using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; using SafeMobileLib; using System.Net.Sockets; using System.Net; using Telerik.WinControls; using System.Threading; namespace AppServerMobile { public partial class MainForm : Form { private TcpClient client; private BackgroundWorker bgWorkerRegistration; private WaitingForm wf; private SDRegistration sdReg; public MainForm() { testIfAlreadyRunning(); InitializeComponent(); Version v = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; Console.WriteLine("Version: " + v.ToString()); Console.WriteLine("--------AppServer MOBILE!!! " + v.ToString() + "---------"); Console.WriteLine("--------www.safemobile.com---------------"); this.Text += " " + v.ToString(); Program.CFG = new Config(); AndroidHandler aHandler = new AndroidHandler(); aHandler.Start(); MessageBussHandler mHandler = new MessageBussHandler(Program.CFG.msgBusIP, Program.CFG.msgBusPort); this.WindowState = FormWindowState.Minimized; this.Visible = false; notifyIcon1.Visible = true; try { Utils.WriteEventLog("Safemobile", "AppServerMobile ON", EventLogEntryType.Information, 3162); } catch (Exception ex) { SM.Debug("Unable to write log Event ex:" + ex.ToString()); } bgWorkerRegistration = new BackgroundWorker(); bgWorkerRegistration.DoWork += new DoWorkEventHandler(bgWorkerRegistration_DoWork); bgWorkerRegistration.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorkerRegistration_RunWorkerCompleted); bgWorkerRegistration.RunWorkerAsync(); wf = new WaitingForm(); wf.Show(); } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { this.Visible = true; this.WindowState = FormWindowState.Normal; notifyIcon1.Visible = false; } private void MainForm_Load(object sender, EventArgs e) { this.Visible = false; } private void MainForm_Resize(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) { this.Visible = false; notifyIcon1.Visible = true; } } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { try { Utils.WriteEventLog("Safemobile", "AppServerMobile OFF", EventLogEntryType.Information, 3162); System.Environment.Exit(0); } catch (Exception ex) { SM.Debug("Unable to write log Event ex:" + ex.ToString()); } } #region bg worker registration events void bgWorkerRegistration_DoWork(object sender, DoWorkEventArgs e) { sdReg = getRegistration(); } void bgWorkerRegistration_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (wf != null) if (wf.IsInitialized) if (wf.IsLoaded) { SM.Debug("Shuting down waiting form"); wf.Close(); } if (appServerMissing) { MessageBox.Show("Could not reach Application Server. Please check the connection and try again!!!", "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error); System.Environment.Exit(0); } ContinueLogin(); } #endregion private bool appServerMissing = false; private SDRegistration getRegistration() { SDRegistration toReturn = new SDRegistration(); toReturn.ip = "valid"; /* try { client = new TcpClient(); IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(Program.CFG.DB_IP), Program.CFG.regPort); client.Connect(serverEndPoint); NetworkStream clientStream = client.GetStream(); System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); byte[] buffer = encoding.GetBytes("400"); //encryption doesn't work, to be added when working //byte[] encodedBuffer = Encryption.Encrypt(buffer); clientStream.Write(buffer, 0, buffer.Length); SM.Debug("Sent registration request to server, waiting..."); byte[] message = new byte[128]; //byte[] decryptedMessage = Encryption.Decrypt(message); clientStream.ReadTimeout = 10000; int result = clientStream.Read(message, 0, message.Length); SM.Debug("Received registration from server"); String decodedString = encoding.GetString(message); String[] options = decodedString.Split(';'); if (options[0].Equals("401")) { if (options[1].StartsWith("inv")) { toReturn.ip = "invalid"; } else { toReturn.ip = "valid"; } } } catch (Exception ex) { SM.Debug("Dongle registration:" + ex.ToString()); appServerMissing = true; toReturn.ip = "invalid"; }*/ return toReturn; } private void ContinueLogin() { SM.Debug("Continuing login form after registration info aquired from app server IP:" + sdReg.ip); if (sdReg.ip.Equals("invalid")) { RadMessageBox.Show("Your dongle don't have license for Aplication Server Mobile", "Error", MessageBoxButtons.OK, RadMessageIcon.Error); System.Environment.Exit(1); } } private void testIfAlreadyRunning() { Process[] processlist = Process.GetProcesses(); Process curentP = Process.GetCurrentProcess(); int count = 0; foreach (Process theprocess in processlist) { if (theprocess.ProcessName == curentP.ProcessName) { count++; } } if (count > 1) { SM.Debug("AppMobile already running!!!"); DialogResult dr = MessageBox.Show("Aplication already running!!!Restart application?", "error", MessageBoxButtons.YesNo, MessageBoxIcon.Error); if (dr == DialogResult.No) { System.Environment.Exit(0); } foreach (Process theprocess in processlist) { if (theprocess.ProcessName == curentP.ProcessName) { Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id); Console.WriteLine("Curent Process: {0} ID: {1}", curentP.ProcessName, curentP.Id); if (theprocess.Id != curentP.Id) { Console.WriteLine("Killing Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id); theprocess.Kill(); } } } Thread.Sleep(1000); } } } }