SafeDispatch/AppServerMobile/MainForm.cs
2024-02-22 18:43:59 +02:00

217 lines
8.0 KiB
C#

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);
}
}
}
}