1287 lines
51 KiB
Plaintext
1287 lines
51 KiB
Plaintext
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.ComponentModel;
|
||
|
using System.Data;
|
||
|
using System.Drawing;
|
||
|
using System.Text;
|
||
|
using System.Windows.Forms;
|
||
|
using SafeNetLib;
|
||
|
using System.Threading;
|
||
|
using System.Diagnostics;
|
||
|
using System.Net.Sockets;
|
||
|
using System.Collections;
|
||
|
using System.Text.RegularExpressions;
|
||
|
using System.Drawing.Text;
|
||
|
using AutoUpdaterDotNET;
|
||
|
|
||
|
namespace MotoTRBO_SOC
|
||
|
{
|
||
|
public partial class FormMain : Form
|
||
|
{
|
||
|
|
||
|
private Thread threadInitAll;
|
||
|
private TallysmanReceiveThread TallysmanReceiveConnection = null;
|
||
|
private Thread TallysmanReceiveThreadObj = null;
|
||
|
private Thread restartThread = null;
|
||
|
private ToolStripMenuItem notifyIconCloseMenuItem;
|
||
|
private Address adr;
|
||
|
private static Boolean gatewayStatus = false;
|
||
|
private Boolean isMessageBoxShown = false;
|
||
|
|
||
|
private PerformanceCounter cpuCounter = new PerformanceCounter();
|
||
|
private PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");
|
||
|
|
||
|
public FormMain()
|
||
|
{
|
||
|
InitializeComponent();
|
||
|
|
||
|
Application.ApplicationExit += new EventHandler(this.OnApplicationExit);
|
||
|
|
||
|
cpuCounter.CategoryName = "Processor";
|
||
|
cpuCounter.CounterName = "% Processor Time";
|
||
|
cpuCounter.InstanceName = "_Total";
|
||
|
|
||
|
}
|
||
|
|
||
|
private void FormMain_Load(object sender, EventArgs e)
|
||
|
{
|
||
|
|
||
|
/*
|
||
|
// The ToolTip for the PictureBox.
|
||
|
new ToolTip().SetToolTip(pictureBoxArs, "ARS");
|
||
|
new ToolTip().SetToolTip(pictureBoxPosition, "Position");
|
||
|
new ToolTip().SetToolTip(pictureBoxSMS, "SMS");
|
||
|
new ToolTip().SetToolTip(pictureBoxDatabase, "Database");
|
||
|
|
||
|
// change fonts to all labels
|
||
|
PrivateFontCollection pfc = new PrivateFontCollection();
|
||
|
pfc.AddFontFile(@"Resources\OCRAExtended.ttf");
|
||
|
labelAppTitle.Font = new Font(pfc.Families[0], 11, FontStyle.Bold);
|
||
|
labelGwStatus.Font = new Font(pfc.Families[0], 27, FontStyle.Bold);
|
||
|
labelStatus.Font = new Font(pfc.Families[0], 7, FontStyle.Regular);
|
||
|
labelEvent.Font = new Font(pfc.Families[0], 7, FontStyle.Regular);
|
||
|
labelVersion.Font = new Font(pfc.Families[0], 9, FontStyle.Regular);
|
||
|
*/
|
||
|
|
||
|
// create notify Icon
|
||
|
notifyIcon = new NotifyIcon();
|
||
|
notifyIcon.MouseDoubleClick += notifyIcon_DoubleClick;
|
||
|
notifyIcon.Visible = true;
|
||
|
notifyIcon.BalloonTipText = "MotoTRBO Gateway is stil running...";
|
||
|
notifyIcon.BalloonTipTitle = "MotoTRBO Gateway Minimized";
|
||
|
notifyIcon.BalloonTipIcon = ToolTipIcon.Info;
|
||
|
notifyIcon.Icon = this.Icon;
|
||
|
notifyIcon.Text = "MotoTRBO Gateway";
|
||
|
|
||
|
//Optional - Add a context menu to the TrayIcon:
|
||
|
notifyIconContextMenuStrip = new ContextMenuStrip();
|
||
|
notifyIconCloseMenuItem = new ToolStripMenuItem();
|
||
|
notifyIconContextMenuStrip.SuspendLayout();
|
||
|
|
||
|
//
|
||
|
// TrayIconContextMenu
|
||
|
//
|
||
|
this.notifyIconContextMenuStrip.Items.AddRange(new ToolStripItem[] {
|
||
|
this.notifyIconCloseMenuItem});
|
||
|
this.notifyIconContextMenuStrip.Name = "TrayIconContextMenu";
|
||
|
this.notifyIconContextMenuStrip.Size = new Size(153, 70);
|
||
|
//
|
||
|
// CloseMenuItem
|
||
|
//
|
||
|
this.notifyIconCloseMenuItem.Name = "CloseMenuItem";
|
||
|
this.notifyIconCloseMenuItem.Size = new Size(152, 22);
|
||
|
this.notifyIconCloseMenuItem.Text = "Exit";
|
||
|
this.notifyIconCloseMenuItem.Click += new EventHandler(this.CloseMenuItem_Click);
|
||
|
|
||
|
notifyIconContextMenuStrip.ResumeLayout(false);
|
||
|
notifyIcon.ContextMenuStrip = notifyIconContextMenuStrip;
|
||
|
|
||
|
new Thread(new ThreadStart(StartLOG)).Start();
|
||
|
|
||
|
threadInitAll = new Thread(new ThreadStart(ThreadsInit));
|
||
|
threadInitAll.Start();
|
||
|
}
|
||
|
|
||
|
private void CloseMenuItem_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
pictureBoxClose_Click(sender, e);
|
||
|
}
|
||
|
|
||
|
private void StartLOG()
|
||
|
{
|
||
|
MotoTRBO_GW.hLOG = new LOGS();
|
||
|
}
|
||
|
|
||
|
private void ThreadsInit()
|
||
|
{
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, System.Reflection.Assembly.GetExecutingAssembly().Location);
|
||
|
|
||
|
Version v = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "Version: " + v.ToString());
|
||
|
|
||
|
|
||
|
//load config file
|
||
|
if (!LoadConfig())
|
||
|
{
|
||
|
//Utils.ConsWrite(DebugMSG_Type.always, "EERROR loading configs!!!!\nPlease fix configs in DB/cfg file and restart the GW!!!");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
this.Invoke((MethodInvoker)delegate
|
||
|
{
|
||
|
if (MotoTRBO_GW.running)
|
||
|
{
|
||
|
labelVersion.Text = "Version " + v.ToString();
|
||
|
labelStatus.Text = "gateway " + MotoTRBO_GW.cfg.masterRadioIP + " [" + MotoTRBO_GW.cfg.gw_id + "] status";
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
CheckForUpdate();
|
||
|
|
||
|
|
||
|
//SOC_connection sc = new SOC_connection(Server_IP, Server_Port, gatewayID);
|
||
|
string MyConString = "SERVER=" + MotoTRBO_GW.cfg.SERVER + "; " +
|
||
|
"DATABASE=" + MotoTRBO_GW.cfg.DATABASE + "; " +
|
||
|
"UID=" + MotoTRBO_GW.cfg.UID + "; " +
|
||
|
"PASSWORD=" + MotoTRBO_GW.cfg.PASSWORD + "; Pooling=false;";
|
||
|
|
||
|
MotoTRBO_GW.DBConnection = new DBconnThread(MyConString, MotoTRBO_GW.cfg.gw_id);
|
||
|
MotoTRBO_GW.DBConnection.StartDB();
|
||
|
|
||
|
restartThread = new Thread(new ThreadStart(WaitForMessageBox));
|
||
|
|
||
|
|
||
|
// check if account is enabled or not
|
||
|
if (!MotoTRBO_GW.DBConnection.DB.DBconnected)
|
||
|
{
|
||
|
isMessageBoxShown = true;
|
||
|
restartThread.Start();
|
||
|
MessageBox.Show("Could not connect to DataBase. Please check your internet connection and try again.", "DataBase Connection Error");
|
||
|
isMessageBoxShown = false;
|
||
|
System.Windows.Forms.Application.Exit();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
MotoTRBO_GW.DBConnection.DB.TestSafeMobileChanges();
|
||
|
|
||
|
|
||
|
bool result = MotoTRBO_GW.DBConnection.DB.CheckGatewayIsEnabled(MotoTRBO_GW.cfg.gw_id);
|
||
|
|
||
|
if (!result)
|
||
|
{
|
||
|
isMessageBoxShown = true;
|
||
|
restartThread.Start();
|
||
|
MessageBox.Show("Your gateway is deactivated. Please contact us at support@safemobile.com or reconfigure your gateway from setting button [right bottom corner].", "Gateway Deactivated");
|
||
|
isMessageBoxShown = false;
|
||
|
System.Windows.Forms.Application.Exit();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
StartDBService();
|
||
|
|
||
|
//wait
|
||
|
while (!MotoTRBO_GW.unitsLoaded && MotoTRBO_GW.running)
|
||
|
{
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "Waiting for units to be fetched...");
|
||
|
Thread.Sleep(500);
|
||
|
}
|
||
|
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»««««««««««««««««««««««««««««««");
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, String.Format("»»»»»»»»»»»»»»»» Finished loading {0:D4} UNITS «««««««««««««««", SN_Queues.ht_SUInfo.Count));
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»««««««««««««««««««««««««««««««");
|
||
|
|
||
|
UpdateLabelEvent("Finished loading " + SN_Queues.ht_SUInfo.Count + " units");
|
||
|
|
||
|
ArrayList list = new ArrayList();
|
||
|
foreach (DictionaryEntry de in SN_Queues.ht_SUInfo)
|
||
|
{
|
||
|
list.Add(de.Key);
|
||
|
}
|
||
|
|
||
|
MotoTRBO_GW.routeManager = new RouteManager(MotoTRBO_GW.cfg.masterRadioIP, list, MotoTRBO_GW.cfg.capPlus);
|
||
|
//routeManager.OnRadioStatusUpdate += new RouteManager.RadioStatusUpdateDEl(routeManager_OnRadioStatusUpdate);
|
||
|
MotoTRBO_GW.routeManager.OnRadioPing += new RouteManager.RadioPingDEl(routeManager_OnRadioPing);
|
||
|
MotoTRBO_GW.routeManager.Start();
|
||
|
|
||
|
/*
|
||
|
//add route for cap plus
|
||
|
if (MotoTRBO_GW.cfg.capPlus)
|
||
|
RoutingUtils.UpdateRoutes(MotoTRBO_GW.cfg.masterRadioIP, true);
|
||
|
else
|
||
|
{
|
||
|
// get Interface ID
|
||
|
RouteManager.networkID = RadioUtils.GetInterfaceID(MotoTRBO_GW.cfg.masterRadioIP);
|
||
|
RoutingUtils.UpdateRoutes_NonCapPlus(MotoTRBO_GW.cfg.masterRadioIP, RadioUtils.GetInterface(MotoTRBO_GW.cfg.masterRadioIP), RouteManager.networkID);
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
StartARSService();
|
||
|
StartLocationService();
|
||
|
StartSMSService();
|
||
|
StartTallysmanService();
|
||
|
|
||
|
// ! NOT NOW BECAUSE IT'S TO MUCH TRAFFIC ON THE OTA
|
||
|
// send to all units a Triggered message
|
||
|
//MotoTRBO_GW.ARSConnection.onPowerUPGateway();
|
||
|
|
||
|
|
||
|
//p.StartEmailService();//new
|
||
|
//p.StartComputeAddr();- adress are done throw a bing script
|
||
|
|
||
|
int count = 0;
|
||
|
while (MotoTRBO_GW.running)
|
||
|
{
|
||
|
count++;
|
||
|
Thread.Sleep(1000);
|
||
|
TimeSpan span = DateTime.Now.Subtract(MotoTRBO_GW.lastEntry);
|
||
|
|
||
|
//Console.WriteLine("LAST TIME : " + MotoTRBO_GW.lastPositionThreadUpdate.ToString());
|
||
|
|
||
|
// check if the Threads are still running
|
||
|
if (DateTime.Now.Subtract(MotoTRBO_GW.lastPositionThreadUpdate).TotalSeconds < 10)
|
||
|
{
|
||
|
// change icon to enabled
|
||
|
if (pictureBoxPosition.Tag.ToString().Contains("Disabled"))
|
||
|
{
|
||
|
pictureBoxPosition.Image = Properties.Resources.gps_icon;
|
||
|
pictureBoxPosition.Tag = "Enabled";
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/*
|
||
|
// change icon to disabled
|
||
|
if (pictureBoxPosition.Tag.ToString().Contains("Enabled"))
|
||
|
{
|
||
|
pictureBoxPosition.Image = Properties.Resources.gps_icon_disabled;
|
||
|
pictureBoxPosition.Tag = "Disabled";
|
||
|
}
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
// check if the Threads are still running
|
||
|
if (DateTime.Now.Subtract(MotoTRBO_GW.lastARSThreadUpdate).TotalSeconds < 10)
|
||
|
{
|
||
|
// change icon to enabled
|
||
|
if (pictureBoxArs.Tag.ToString().Contains("Disabled"))
|
||
|
{
|
||
|
pictureBoxArs.Image = Properties.Resources.ars_icon;
|
||
|
pictureBoxArs.Tag = "Enabled";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// check if the Threads are still running
|
||
|
if (DateTime.Now.Subtract(MotoTRBO_GW.lastSMSThreadUpdate).TotalSeconds < 10)
|
||
|
{
|
||
|
// change icon to enabled
|
||
|
if (pictureBoxSMS.Tag.ToString().Contains("Disabled"))
|
||
|
{
|
||
|
pictureBoxSMS.Image = Properties.Resources.sms_icon;
|
||
|
pictureBoxSMS.Tag = "Enabled";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*/
|
||
|
// check if the Threads are still running
|
||
|
if (DateTime.Now.Subtract(MotoTRBO_GW.lastEntry).TotalMinutes < 10)
|
||
|
{
|
||
|
// change icon to enabled
|
||
|
if (pictureBoxDatabase.Tag.ToString().Contains("Disabled"))
|
||
|
{
|
||
|
pictureBoxDatabase.Image = Properties.Resources.database_icon;
|
||
|
pictureBoxDatabase.Tag = "Enabled";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
double cpuValue = 0;
|
||
|
|
||
|
if (count % 10 == 0)
|
||
|
{
|
||
|
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "Last entry at:" + MotoTRBO_GW.lastEntry);
|
||
|
//Utils.ConsWrite(DebugMSG_Type.DB, "CPU : " + getCurrentCpuUsage());
|
||
|
//Utils.ConsWrite(DebugMSG_Type.DB, "RAM : " + getAvailableRAM());
|
||
|
|
||
|
PerformanceCounter myAppCpu = new PerformanceCounter("Process", "% Processor Time", "Safenet MotoTRBO Gateway", true);
|
||
|
try
|
||
|
{
|
||
|
if (myAppCpu != null)
|
||
|
{
|
||
|
cpuValue = myAppCpu.NextValue();
|
||
|
//Console.WriteLine("My App'S CPU % = " + cpuValue);
|
||
|
if (cpuValue > 15)
|
||
|
{
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "CPU Value is more than 15%. Restarting Gateway...");
|
||
|
RestartApp();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch (InvalidOperationException)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (count % 60 == 0)
|
||
|
{
|
||
|
count = 0;
|
||
|
GWstatus gws = new GWstatus();
|
||
|
gws.gw_id = MotoTRBO_GW.cfg.gw_id;
|
||
|
gws.status = (gatewayStatus) ? 1 : 0;
|
||
|
gws.message = "Last entry at:" + MotoTRBO_GW.lastEntry + " [CPU: " + cpuValue + "]";
|
||
|
SN_Queues.gwstatusQueue.PostItem(gws);
|
||
|
|
||
|
if (span.TotalSeconds > MotoTRBO_GW.cfg.gw_restart_inactive_seconds)
|
||
|
{
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "Nothing received for " + MotoTRBO_GW.cfg.gw_restart_inactive_seconds + " seconds.");
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
|
||
|
LOGS.LOG("Nothing received for 10 minutes.");
|
||
|
//MotoTRBO_GW.lastEntry = DateTime.Now;
|
||
|
|
||
|
if (MotoTRBO_GW.cfg.gw_restart)
|
||
|
{
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "Adding restart INFO to LOG file");
|
||
|
string format = "dd/MM/yyyy HH:mm";
|
||
|
string s_time = "[" + DateTime.Now.ToString(format) + "] ";
|
||
|
LOGS.LOG("@@@@@@@@@@@@@@@@@@@@@");
|
||
|
LOGS.LOG(s_time + "no GPS received for 10 minutes");
|
||
|
LOGS.LOG(s_time + "should restart");
|
||
|
LOGS.LOG("@@@@@@@@@@@@@@@@@@@@@");
|
||
|
RestartApp();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/*
|
||
|
StopDBService();
|
||
|
Thread.Sleep(10 * 1000);
|
||
|
StartDBService();
|
||
|
*/
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "Adding restart INFO to LOG file");
|
||
|
string format = "dd/MM/yyyy HH:mm";
|
||
|
string s_time = "[" + DateTime.Now.ToString(format) + "] ";
|
||
|
LOGS.LOG("@@@@@@@@@@@@@@@@@@@@@");
|
||
|
LOGS.LOG(s_time + "no GPS received for 10 minutes");
|
||
|
LOGS.LOG(s_time + "SHOULD restart DB thread");
|
||
|
LOGS.LOG("@@@@@@@@@@@@@@@@@@@@@");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//TimerTask();
|
||
|
}
|
||
|
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "Finishing app...");
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
private double previousValue = 0;
|
||
|
// UNUSED
|
||
|
public void TimerTask()
|
||
|
{
|
||
|
while (MotoTRBO_GW.running)
|
||
|
{
|
||
|
Thread.Sleep(5000);
|
||
|
Process[] processList = Process.GetProcesses();
|
||
|
|
||
|
foreach (Process process in processList)
|
||
|
{
|
||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||
|
Console.WriteLine("Process: " + process.ProcessName);
|
||
|
Console.ForegroundColor = ConsoleColor.Gray;
|
||
|
|
||
|
if (!process.ProcessName.Equals("Safenet MotoTRBO Gateway"))
|
||
|
continue;
|
||
|
|
||
|
using (PerformanceCounter pcProcess = new PerformanceCounter("Process", "% Processor Time", process.ProcessName))
|
||
|
using (PerformanceCounter memProcess = new PerformanceCounter("Memory", "Available MBytes"))
|
||
|
{
|
||
|
Console.WriteLine("CPU Usage & Memory Monitorring", EventLogEntryType.Information, 101);
|
||
|
|
||
|
float cpuUseage = pcProcess.NextValue();
|
||
|
Console.ForegroundColor = ConsoleColor.Green;
|
||
|
Console.WriteLine("Process: '{0}' CPU Usage: {1}%", process.ProcessName, cpuUseage);
|
||
|
float memUseage = memProcess.NextValue();
|
||
|
Console.Write("CPU Usage: ");
|
||
|
Console.ForegroundColor = ConsoleColor.White;
|
||
|
Console.Write(cpuUseage + "%\n");
|
||
|
|
||
|
|
||
|
//Console.WriteLine("Process: '{0}' RAM Free: {1}MB", process.ProcessName, memUseage);
|
||
|
|
||
|
previousValue = cpuUseage;
|
||
|
|
||
|
//Console.WriteLine("CPU Usage : " + cpuUseage, EventLogEntryType.Information, 101);
|
||
|
|
||
|
}
|
||
|
/*
|
||
|
Process p = new Process();
|
||
|
p.StartInfo.FileName = "cmd.exe";
|
||
|
p.StartInfo.Arguments = "/c tasklist /fi \"IMAGENAME eq notepad++.exe\" /FO CSV /NH";
|
||
|
|
||
|
p.StartInfo.UseShellExecute = false;
|
||
|
p.StartInfo.RedirectStandardOutput = true;
|
||
|
p.Start();
|
||
|
|
||
|
string output = p.StandardOutput.ReadToEnd();
|
||
|
//this.EventLog.WriteEntry("Tasklist : " + output, EventLogEntryType.Information, 101);
|
||
|
|
||
|
*/
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public string getCurrentCpuUsage(){
|
||
|
|
||
|
// For the current process
|
||
|
Process proceso = Process.GetProcessById(11860);
|
||
|
PerformanceCounterCategory cat = new PerformanceCounterCategory("Process");
|
||
|
|
||
|
string[] instances = cat.GetInstanceNames();
|
||
|
foreach (string instance in instances)
|
||
|
{
|
||
|
|
||
|
using (PerformanceCounter cnt = new PerformanceCounter("Process",
|
||
|
"ID Process", instance, true))
|
||
|
{
|
||
|
int val = (int)cnt.RawValue;
|
||
|
if (val == proceso.Id)
|
||
|
{
|
||
|
return 0 + "%";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0 + "%";
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
public string getAvailableRAM(){
|
||
|
return ramCounter.NextValue()+"MB";
|
||
|
}
|
||
|
|
||
|
void routeManager_OnRadioPing(bool status, string ip)
|
||
|
{
|
||
|
GWstatus gws = new GWstatus();
|
||
|
gws.gw_id = MotoTRBO_GW.cfg.gw_id;
|
||
|
gws.status = (status) ? 1 : 0;
|
||
|
|
||
|
// send message to the queue in order to be added into the DB only if Loading message is displayed
|
||
|
// or if Gateway Status has changed
|
||
|
if (labelGwStatus.Text.Contains("Loading") ||
|
||
|
(labelGwStatus.Text.Contains("Online") && gws.status == 0) ||
|
||
|
(labelGwStatus.Text.Contains("Offline") && gws.status == 1))
|
||
|
{
|
||
|
if (status && !labelGwStatus.Text.Contains("Loading"))
|
||
|
{
|
||
|
//add route for cap plus
|
||
|
if (MotoTRBO_GW.cfg.capPlus)
|
||
|
RoutingUtils.UpdateRoutes(MotoTRBO_GW.cfg.masterRadioIP, true);
|
||
|
else
|
||
|
{
|
||
|
// get Interface ID
|
||
|
RouteManager.networkID = RadioUtils.GetInterfaceID(MotoTRBO_GW.cfg.masterRadioIP);
|
||
|
RoutingUtils.UpdateRoutes_NonCapPlus(MotoTRBO_GW.cfg.masterRadioIP, RadioUtils.GetInterface(MotoTRBO_GW.cfg.masterRadioIP), RouteManager.networkID);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SN_Queues.gwstatusQueue.PostItem(gws);
|
||
|
|
||
|
//Console.WriteLine("[### {0:H:mm:ss} ###] Gateway [" + ip + "] is now " + (status ? "ONLINE" : "OFFLINE"), DateTime.Now);
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»««««««««««««««««««««««««««««««");
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "»»»»»»»»»»»»»»» Gateway " + ip + " is now " + (status ? "ONLINE" : "OFFLINE"));
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»««««««««««««««««««««««««««««««");
|
||
|
|
||
|
this.Invoke((MethodInvoker)delegate
|
||
|
{
|
||
|
pictureBoxLoading.Visible = false;
|
||
|
labelGwStatus.Text = (status ? "Online" : "Offline");
|
||
|
labelGwStatus.ForeColor = (status ? Color.DeepSkyBlue : Color.Maroon);
|
||
|
UpdateLabelEvent(labelGwStatus.Text);
|
||
|
});
|
||
|
|
||
|
gws.message = (status) ? "Running Online" : "Running Offline";
|
||
|
|
||
|
routeManager_OnRadioStatusUpdate(status, ip);
|
||
|
}
|
||
|
|
||
|
// save current gateway status
|
||
|
gatewayStatus = status;
|
||
|
}
|
||
|
|
||
|
static void routeManager_OnRadioStatusUpdate(bool status, string ip)
|
||
|
{
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "IP:" + ip + "status:" + status);
|
||
|
GWstatus gws = new GWstatus();
|
||
|
gws.gw_id = MotoTRBO_GW.cfg.gw_id;
|
||
|
gws.status = (status) ? 1 : 0;
|
||
|
gws.message = (status) ? "Online" : "Offline";
|
||
|
SN_Queues.gwstatusQueue.PostItem(gws);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Load configuration from the config.ini file
|
||
|
/// </summary>
|
||
|
/// <returns>A boolean value representing if the action was successfull or not</returns>
|
||
|
private bool LoadConfig()
|
||
|
{
|
||
|
bool ret = false;
|
||
|
MotoTRBO_GW.cfg = new Config();
|
||
|
MotoTRBO_GW.cfg.OnConfigFileWasBroken += delegate()
|
||
|
{
|
||
|
MessageBox.Show("Something was wrong with your configuration file. "
|
||
|
+ System.Environment.NewLine
|
||
|
+ "Now you're running a default configuration. Please reconfigure your gateway from setting button [right bottom corner] or contact us at " +
|
||
|
"support@safemobil.com. "
|
||
|
|
||
|
+ System.Environment.NewLine + System.Environment.NewLine + "Thank you!", "Reconfiguration needed",
|
||
|
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
||
|
|
||
|
pictureBoxSettings_Click(null, null);
|
||
|
return;
|
||
|
//System.Environment.Exit(0);
|
||
|
};
|
||
|
MotoTRBO_GW.cfg.LoadConfig();
|
||
|
|
||
|
|
||
|
string MyConString = "SERVER=" + MotoTRBO_GW.cfg.SERVER + ";" +
|
||
|
"DATABASE=" + MotoTRBO_GW.cfg.DATABASE + ";" +
|
||
|
"UID=" + MotoTRBO_GW.cfg.UID + ";" +
|
||
|
"PASSWORD=" + MotoTRBO_GW.cfg.PASSWORD + ";Connect Timeout=5;Pooling=false;";
|
||
|
|
||
|
ret = true;
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void StartDBService()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
|
||
|
//Start GPS DB thread
|
||
|
MotoTRBO_GW.DBThreadobjGPS = new Thread(new ThreadStart(MotoTRBO_GW.DBConnection.HandleConnectionGPS));
|
||
|
MotoTRBO_GW.DBThreadobjGPS.IsBackground = true;
|
||
|
MotoTRBO_GW.DBThreadobjGPS.Start();
|
||
|
Thread.Sleep(200);
|
||
|
|
||
|
//Start ARS DB thread
|
||
|
MotoTRBO_GW.DBThreadobjARS = new Thread(new ThreadStart(MotoTRBO_GW.DBConnection.HandleConnectionARS));
|
||
|
MotoTRBO_GW.DBThreadobjARS.IsBackground = true;
|
||
|
MotoTRBO_GW.DBThreadobjARS.Start();
|
||
|
Thread.Sleep(200);
|
||
|
|
||
|
//Start Units DB thread
|
||
|
MotoTRBO_GW.DBThreadobjAux = new Thread(new ThreadStart(MotoTRBO_GW.DBConnection.HandleConnectionAux));
|
||
|
MotoTRBO_GW.DBThreadobjAux.IsBackground = true;
|
||
|
MotoTRBO_GW.DBThreadobjAux.Start();
|
||
|
Thread.Sleep(200);
|
||
|
|
||
|
//Start SMS DB thread
|
||
|
MotoTRBO_GW.DBThreadobjSMS = new Thread(new ThreadStart(MotoTRBO_GW.DBConnection.HandleConnectionSMS));
|
||
|
MotoTRBO_GW.DBThreadobjSMS.IsBackground = true;
|
||
|
MotoTRBO_GW.DBThreadobjSMS.Start();
|
||
|
Thread.Sleep(200);
|
||
|
|
||
|
//Start SMS DB thread
|
||
|
MotoTRBO_GW.DBThreadobjSMS_conf = new Thread(new ThreadStart(MotoTRBO_GW.DBConnection.HandleConnectionSMS_conf));
|
||
|
MotoTRBO_GW.DBThreadobjSMS_conf.IsBackground = true;
|
||
|
MotoTRBO_GW.DBThreadobjSMS_conf.Start();
|
||
|
Thread.Sleep(200);
|
||
|
|
||
|
//Start Addres insert thread
|
||
|
MotoTRBO_GW.DBThreadobjAddr = new Thread(new ThreadStart(MotoTRBO_GW.DBConnection.HandleConnectionAddr));
|
||
|
MotoTRBO_GW.DBThreadobjAddr.IsBackground = true;
|
||
|
//MotoTRBO_GW.DBThreadobjAddr.Start();
|
||
|
//Thread.Sleep(200);
|
||
|
|
||
|
//Start POLL thread
|
||
|
MotoTRBO_GW.DBThreadobjPOLL = new Thread(new ThreadStart(MotoTRBO_GW.DBConnection.HandleConnectionPOLL));
|
||
|
MotoTRBO_GW.DBThreadobjPOLL.IsBackground = true;
|
||
|
MotoTRBO_GW.DBThreadobjPOLL.Start();
|
||
|
Thread.Sleep(200);
|
||
|
|
||
|
//Start POLL thread
|
||
|
MotoTRBO_GW.DBThreadobjTallysman = new Thread(new ThreadStart(MotoTRBO_GW.DBConnection.HandleTallysmanEvents));
|
||
|
MotoTRBO_GW.DBThreadobjTallysman.IsBackground = true;
|
||
|
MotoTRBO_GW.DBThreadobjTallysman.Start();
|
||
|
Thread.Sleep(200);
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "Could not intialize the connection with location server!\r\n" + e.Message + "\r\nPlease check your internet connection !!");
|
||
|
//System.Environment.Exit(1);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
private void StopDBService()
|
||
|
{
|
||
|
// close the DatabaseConnection
|
||
|
if(MotoTRBO_GW.DBConnection != null)
|
||
|
MotoTRBO_GW.DBConnection.StopDB();
|
||
|
|
||
|
if (MotoTRBO_GW.DBThreadobjARS != null)
|
||
|
{
|
||
|
MotoTRBO_GW.DBThreadobjARS.Abort();
|
||
|
}
|
||
|
|
||
|
if (MotoTRBO_GW.DBThreadobjGPS != null)
|
||
|
{
|
||
|
MotoTRBO_GW.DBThreadobjGPS.Abort();
|
||
|
}
|
||
|
|
||
|
if (MotoTRBO_GW.DBThreadobjAux != null)
|
||
|
{
|
||
|
MotoTRBO_GW.DBThreadobjAux.Abort();
|
||
|
}
|
||
|
|
||
|
if (MotoTRBO_GW.DBThreadobjSMS != null)
|
||
|
{
|
||
|
MotoTRBO_GW.DBThreadobjSMS.Abort();
|
||
|
}
|
||
|
|
||
|
if (MotoTRBO_GW.DBThreadobjSMS_conf != null)
|
||
|
{
|
||
|
MotoTRBO_GW.DBThreadobjSMS_conf.Abort();
|
||
|
}
|
||
|
|
||
|
if (MotoTRBO_GW.DBThreadobjAddr != null)
|
||
|
{
|
||
|
MotoTRBO_GW.DBThreadobjAddr.Abort();
|
||
|
}
|
||
|
|
||
|
if (MotoTRBO_GW.DBThreadobjPOLL != null)
|
||
|
{
|
||
|
MotoTRBO_GW.DBThreadobjPOLL.Abort();
|
||
|
}
|
||
|
|
||
|
if (MotoTRBO_GW.DBThreadobjTallysman != null)
|
||
|
{
|
||
|
MotoTRBO_GW.DBThreadobjTallysman.Abort();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Restart the application and close other notify icons
|
||
|
/// </summary>
|
||
|
private void RestartApp()
|
||
|
{
|
||
|
CloseNotifyIcon();
|
||
|
|
||
|
MotoTRBO_GW.running = false;
|
||
|
|
||
|
Thread p = new Thread(new ThreadStart(delegate()
|
||
|
{
|
||
|
|
||
|
//oldProcess.WaitForExit(8000);
|
||
|
System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location, MotoTRBO_GW.isConsoleEnabled ? " -c" : "");
|
||
|
|
||
|
Process oldProcess = Process.GetCurrentProcess();
|
||
|
oldProcess.Kill();
|
||
|
System.Windows.Forms.Application.Exit();
|
||
|
|
||
|
}));
|
||
|
p.Start();
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
private void WaitForMessageBox()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
int count = 0;
|
||
|
while (isMessageBoxShown)
|
||
|
{
|
||
|
Thread.Sleep(500);
|
||
|
|
||
|
if (count++ > 13)
|
||
|
{
|
||
|
isMessageBoxShown = false;
|
||
|
RestartApp();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex) { }
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#region ARS SERVICE
|
||
|
|
||
|
void StartARSService()
|
||
|
{
|
||
|
if (MotoTRBO_GW.cfg.capPlus)
|
||
|
{
|
||
|
CapacityPlus.UpdateRoutes(MotoTRBO_GW.cfg.masterRadioIP);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// get Interface ID
|
||
|
RouteManager.networkID = RadioUtils.GetInterfaceID(MotoTRBO_GW.cfg.masterRadioIP);
|
||
|
RoutingUtils.UpdateRoutes_NonCapPlus(MotoTRBO_GW.cfg.masterRadioIP, RadioUtils.GetInterface(MotoTRBO_GW.cfg.masterRadioIP), RouteManager.networkID);
|
||
|
}
|
||
|
|
||
|
// create thread to listen UDP
|
||
|
Utils.ConsWrite(DebugMSG_Type.DB, "ARS port:" + (ushort)MotoTRBO_GW.cfg.arsPort);
|
||
|
MotoTRBO_GW.ARSConnection = new ARSThread((ushort)MotoTRBO_GW.cfg.arsPort);
|
||
|
//UpdateLabelEvent("Registered for ARS");
|
||
|
|
||
|
// event handler for when the connection on UDP Changes
|
||
|
MotoTRBO_GW.ARSConnection.OnUDPConnectionChanged += new ARSThread.UDPConnectionChangedDelegate(delegate(bool isConnected, String gatewayIP)
|
||
|
{
|
||
|
if (isConnected)
|
||
|
{
|
||
|
pictureBoxArs.Image = Properties.Resources.ars_icon;
|
||
|
pictureBoxArs.Tag = "Enabled";
|
||
|
UpdateLabelEvent("Registered for ARS" + (gatewayIP.Length > 0 ? " on gateway " + gatewayIP : ""));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pictureBoxArs.Image = Properties.Resources.ars_icon_disabled;
|
||
|
pictureBoxArs.Tag = "Disabled";
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// event handler for when an ARS is received
|
||
|
MotoTRBO_GW.ARSConnection.OnArsReceived += new ARSThread.ARSReceivedDEl(delegate(string suid, bool isOn)
|
||
|
{
|
||
|
UpdateLabelEvent(String.Format("ARS {0} from {1}",
|
||
|
(isOn ? "ON" : "OFF"), suid));
|
||
|
});
|
||
|
|
||
|
// event handler for when the Location Request is sent
|
||
|
MotoTRBO_GW.ARSConnection.OnTriggeredLocationRequest += new ARSThread.TriggeredLocationRequestDEl(delegate(string radioID, int reportingInterval)
|
||
|
{
|
||
|
UpdateLabelEvent("Location request [" + reportingInterval + " sec] for " + radioID);
|
||
|
});
|
||
|
|
||
|
|
||
|
MotoTRBO_GW.ARSConnection.Start();
|
||
|
|
||
|
// start the ARS Thread which will handle all ARS messages
|
||
|
MotoTRBO_GW.ARSThreadobj = new Thread(new ThreadStart(MotoTRBO_GW.ARSConnection.HandleConnection));
|
||
|
MotoTRBO_GW.ARSThreadobj.IsBackground = true;
|
||
|
MotoTRBO_GW.ARSThreadobj.Start();
|
||
|
|
||
|
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
private bool tallysmanGwStatusMessage = false;
|
||
|
void StartTallysmanService()
|
||
|
{
|
||
|
|
||
|
//create thread for receiving Tallysman notifications from the radios
|
||
|
TallysmanReceiveConnection = new TallysmanReceiveThread((ushort)MotoTRBO_GW.cfg.TALLYSMAN_PORT);
|
||
|
|
||
|
// event handler for when the connection on UDP Changes
|
||
|
TallysmanReceiveConnection.OnUDPConnectionChanged += new TallysmanReceiveThread.UDPConnectionChangedDelegate(delegate(bool isConnected)
|
||
|
{
|
||
|
if (isConnected)
|
||
|
{
|
||
|
//UpdateLabelEvent("Registered for Tallysman messages");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
#region TALLYSMAN Received Events
|
||
|
TallysmanReceiveConnection.OnLocationReceived += delegate(MotoTRBO_SOC.TallysmanReceiveThread.LocationEventArgs e)
|
||
|
{
|
||
|
|
||
|
UpdateLabelEvent(String.Format("Pos. [{0:0.0000},{1:0.0000}] from {2}{3}{4}", Math.Round(e.Latitude, 4),
|
||
|
Math.Round(e.Longitude, 4), e.RadioID,
|
||
|
e.Altitude > 0 ? System.Environment.NewLine + "\t Altitude [" + e.Altitude + " meters]" : "",
|
||
|
e.LevelOfConfidence > -1 ? "" + "\t Level of confidence ["
|
||
|
+ e.LevelOfConfidence + "%]" : ""));
|
||
|
|
||
|
// add the gateway status
|
||
|
if (!tallysmanGwStatusMessage)
|
||
|
{
|
||
|
AddGatewayStatusMessage(MotoTRBO_GW.cfg.gw_id, (gatewayStatus) ? true : false, "TALLYSMAN CONNECTED");
|
||
|
tallysmanGwStatusMessage = true;
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
htCell_t cell = new htCell_t();
|
||
|
cell.altitude = (int)e.Altitude;
|
||
|
cell.d_lat = e.Latitude;
|
||
|
cell.d_lng = e.Longitude;
|
||
|
cell.isCSBK = false;
|
||
|
cell.lat = e.Latitude + "";
|
||
|
cell.level_confidence = (int)e.LevelOfConfidence;
|
||
|
cell.lng = e.Longitude + "";
|
||
|
cell.location_time = (new DateTime(1970, 1, 1)).AddSeconds(e.GPSTime);
|
||
|
cell.seqID = e.seqID;
|
||
|
cell.spd = e.Speed + "";
|
||
|
cell.suid = e.RadioID + "";
|
||
|
cell.triggered = false;
|
||
|
|
||
|
SN_Queues.DBQueueLocation.PostItem(cell);
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
Utils.WriteLine("EXCEPTION EX " + ex.ToString(), ConsoleColor.Red);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
TallysmanReceiveConnection.OnTelemetryReceived += delegate(MotoTRBO_SOC.TallysmanReceiveThread.TelemetryReceivedEventArgs e)
|
||
|
{
|
||
|
UpdateLabelEvent("Telemetry from radio " + e.RadioID);
|
||
|
};
|
||
|
|
||
|
TallysmanReceiveConnection.OnTallysmanEventReceived += delegate(MotoTRBO_SOC.TallysmanReceiveThread.TallysmanEventArgs e)
|
||
|
{
|
||
|
|
||
|
};
|
||
|
|
||
|
#endregion
|
||
|
TallysmanReceiveThreadObj = new Thread(new ThreadStart(TallysmanReceiveConnection.handleConnection));
|
||
|
TallysmanReceiveThreadObj.IsBackground = true;
|
||
|
TallysmanReceiveThreadObj.Start();
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
private void AddGatewayStatusMessage(String gwCode, bool connected, string message)
|
||
|
{
|
||
|
|
||
|
//add gateway status!!
|
||
|
GWstatus gws = new GWstatus();
|
||
|
gws.gw_id = gwCode;
|
||
|
gws.status = connected ? 1 : 0;
|
||
|
gws.message = message;
|
||
|
|
||
|
SN_Queues.gwstatusQueue.PostItem(gws);
|
||
|
}
|
||
|
|
||
|
|
||
|
void StartEmailService()
|
||
|
{
|
||
|
string MyConString = "SERVER=" + MotoTRBO_GW.cfg.SERVER + ";" +
|
||
|
"DATABASE=" + MotoTRBO_GW.cfg.DATABASE + ";" +
|
||
|
"UID=" + MotoTRBO_GW.cfg.UID + ";" +
|
||
|
"PASSWORD=" + MotoTRBO_GW.cfg.PASSWORD + ";Pooling=false;";
|
||
|
|
||
|
MotoTRBO_GW.emailH = new EmailHandler(MyConString, MotoTRBO_GW.cfg.gw_id);
|
||
|
|
||
|
}
|
||
|
|
||
|
void StartLocationService()
|
||
|
{
|
||
|
// create thread to listen UDP
|
||
|
MotoTRBO_GW.LocationConnection = new LocationThread(MotoTRBO_GW.cfg.locPort);
|
||
|
|
||
|
// event handler for when the connection on UDP Changes
|
||
|
MotoTRBO_GW.LocationConnection.OnUDPConnectionChanged += new LocationThread.UDPConnectionChangedDelegate(delegate(bool isConnected)
|
||
|
{
|
||
|
if (isConnected)
|
||
|
{
|
||
|
pictureBoxPosition.Image = Properties.Resources.gps_icon;
|
||
|
pictureBoxPosition.Tag = "Enabled";
|
||
|
UpdateLabelEvent("Registered for Location messages");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pictureBoxPosition.Image = Properties.Resources.gps_icon_disabled;
|
||
|
pictureBoxPosition.Tag = "Disabled";
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
MotoTRBO_GW.LocationConnection.OnLocationReceived += new LocationThread.LocationReceivedDEl(delegate(htCell_t position)
|
||
|
{
|
||
|
UpdateLabelEvent(String.Format("{3} [{0:00.0000},{1:00.0000}] from {2}",
|
||
|
Math.Round(Double.Parse(position.lat), 4),
|
||
|
Math.Round(Double.Parse(position.lng), 4),
|
||
|
position.suid,
|
||
|
(position.triggered ? "Pos." : "Poll")));
|
||
|
});
|
||
|
MotoTRBO_GW.LocationConnection.OnTriggeredLocationRequest += new LocationThread.TriggeredLocationRequestDEl(delegate(string radioID, int reportingInterval)
|
||
|
{
|
||
|
UpdateLabelEvent("Location request [" + reportingInterval + " sec] for " + radioID);
|
||
|
});
|
||
|
|
||
|
MotoTRBO_GW.LocationConnection.OnImmediateLocationRequest += new LocationThread.ImmediateLocationRequestDEl(delegate(string radioID)
|
||
|
{
|
||
|
UpdateLabelEvent("««« Poll request for " + radioID);
|
||
|
});
|
||
|
|
||
|
//LocationConnection.port = cfg.locPort;
|
||
|
//LocationConnection.parent = this;
|
||
|
MotoTRBO_GW.LocationThreadobj = new Thread(new ThreadStart(MotoTRBO_GW.LocationConnection.handleConnection));
|
||
|
MotoTRBO_GW.LocationThreadobj.IsBackground = true;
|
||
|
MotoTRBO_GW.LocationThreadobj.Start();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
void StartSMSService()
|
||
|
{
|
||
|
string MyConString = "SERVER=" + MotoTRBO_GW.cfg.SERVER + ";" +
|
||
|
"DATABASE=" + MotoTRBO_GW.cfg.DATABASE + ";" +
|
||
|
"UID=" + MotoTRBO_GW.cfg.UID + ";" +
|
||
|
"PASSWORD=" + MotoTRBO_GW.cfg.PASSWORD + ";Pooling=false;";
|
||
|
|
||
|
|
||
|
bool isSMSInitialized = false;
|
||
|
while (!isSMSInitialized)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
MotoTRBO_GW.smsUDPclient = new UdpClient(MotoTRBO_GW.cfg.smsPort);
|
||
|
MotoTRBO_GW.smsUDPclient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
|
||
|
//udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, port));
|
||
|
MotoTRBO_GW.smsUDPclient.Client.ReceiveTimeout = 1000 * ReceiveSMSThread.READ_TIMEOUT;
|
||
|
|
||
|
isSMSInitialized = true;
|
||
|
pictureBoxSMS.Image = MotoTRBO_SOC.Properties.Resources.sms_icon;
|
||
|
pictureBoxSMS.Tag = "Enabled";
|
||
|
|
||
|
Utils.WriteLine("Text message udp client initiated", ConsoleColor.Green);
|
||
|
UpdateLabelEvent("Registered for Text messages");
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
if (ex.ToString().Contains(" Only one usage of each socket address"))
|
||
|
{
|
||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "UDP Port for SMS is already in use. Retry in 500 miliseconds.");
|
||
|
Console.ForegroundColor = ConsoleColor.Gray;
|
||
|
|
||
|
Thread.Sleep(500);
|
||
|
//MessageBox.Show("UDP Port for SMS is already in use. Please try again after fixing the error.", "SMS Error");
|
||
|
//System.Windows.Forms.Application.Exit();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||
|
Utils.ConsWrite(DebugMSG_Type.always, "SMS UDP Exception: " + ex.ToString());
|
||
|
Console.ForegroundColor = ConsoleColor.Gray;
|
||
|
MessageBox.Show("Could not create UDP Connection for SMS. Application will now close", "SMS Error");
|
||
|
System.Windows.Forms.Application.Exit();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// create thread to listen UDP
|
||
|
MotoTRBO_GW.ReceiveSMSthr = new ReceiveSMSThread((ushort)MotoTRBO_GW.cfg.smsPort, MyConString, MotoTRBO_GW.cfg.gw_id);
|
||
|
|
||
|
MotoTRBO_GW.ReceiveSMSthr.OnUDPConnectionChanged += new ReceiveSMSThread.UDPConnectionChangedDelegate(delegate(bool isConnected)
|
||
|
{
|
||
|
if (isConnected)
|
||
|
{
|
||
|
pictureBoxSMS.Image = Properties.Resources.sms_icon;
|
||
|
pictureBoxPosition.Tag = "Enabled";
|
||
|
UpdateLabelEvent("Registered for Text messages");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pictureBoxSMS.Image = Properties.Resources.sms_icon_disabled;
|
||
|
pictureBoxPosition.Tag = "Disabled";
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
MotoTRBO_GW.ReceiveSMSthr.OnSMSReceived += new ReceiveSMSThread.SMSReceivedDEl(ReceiveSMSthr_OnSMSReceived);
|
||
|
//ARSConnection.parent = this;
|
||
|
MotoTRBO_GW.ReceiveSMSThreadobj = new Thread(new ThreadStart(MotoTRBO_GW.ReceiveSMSthr.HandleConnection));
|
||
|
MotoTRBO_GW.ReceiveSMSThreadobj.IsBackground = true;
|
||
|
MotoTRBO_GW.ReceiveSMSThreadobj.Start();
|
||
|
|
||
|
// create thread to listen UDP
|
||
|
MotoTRBO_GW.SendSMSthr = new SendSMSThread(MotoTRBO_GW.cfg.smsPort);
|
||
|
MotoTRBO_GW.SendSMSthr.OnSMSSent += new SendSMSThread.SMSSentDEl(SendSMSthr_OnSMSSent);
|
||
|
//ARSConnection.parent = this;
|
||
|
MotoTRBO_GW.SendSMSThreadobj = new Thread(new ThreadStart(MotoTRBO_GW.SendSMSthr.HandleConnection));
|
||
|
MotoTRBO_GW.SendSMSThreadobj.IsBackground = true;
|
||
|
MotoTRBO_GW.SendSMSThreadobj.Start();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/* Delegate which handles every SMS message received */
|
||
|
void ReceiveSMSthr_OnSMSReceived(String message, String radioID)
|
||
|
{
|
||
|
UpdateLabelEvent(String.Format("SMS [{0}] from {1}",
|
||
|
message, radioID));
|
||
|
}
|
||
|
|
||
|
/* Delegate which handles every SMS message is sent */
|
||
|
void SendSMSthr_OnSMSSent(string message, string radioID)
|
||
|
{
|
||
|
UpdateLabelEvent(String.Format("SMS [{0}] to {1}",
|
||
|
message, radioID));
|
||
|
}
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// Update the label from the UI in which all events are stored
|
||
|
/// </summary>
|
||
|
/// <param name="message">The message which needs to be written into the label</param>
|
||
|
private void UpdateLabelEvent(String message)
|
||
|
{
|
||
|
if (MotoTRBO_GW.running)
|
||
|
{
|
||
|
this.Invoke((MethodInvoker)delegate
|
||
|
{
|
||
|
tbEvent.AppendText(String.Format("{0:H:mm:ss} - {1}", DateTime.Now, message) + Environment.NewLine);
|
||
|
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
void StartComputeAddr()
|
||
|
{
|
||
|
adr = new Address();
|
||
|
|
||
|
MotoTRBO_GW.CompAddrThread = new Thread(new ThreadStart(adr.Compute));
|
||
|
MotoTRBO_GW.CompAddrThread.IsBackground = true;
|
||
|
MotoTRBO_GW.CompAddrThread.Start();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
private bool dragging = false;
|
||
|
private Point dragCursorPoint;
|
||
|
private Point dragFormPoint;
|
||
|
|
||
|
private void FormMain_MouseDown(object sender, MouseEventArgs e)
|
||
|
{
|
||
|
dragging = true;
|
||
|
dragCursorPoint = Cursor.Position;
|
||
|
dragFormPoint = this.Location;
|
||
|
}
|
||
|
|
||
|
private void FormMain_MouseMove(object sender, MouseEventArgs e)
|
||
|
{
|
||
|
if (dragging)
|
||
|
{
|
||
|
Point dif = Point.Subtract(Cursor.Position, new Size(dragCursorPoint));
|
||
|
this.Location = Point.Add(dragFormPoint, new Size(dif));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void FormMain_MouseUp(object sender, MouseEventArgs e)
|
||
|
{
|
||
|
dragging = false;
|
||
|
}
|
||
|
|
||
|
private void FormMain_Resize(object sender, EventArgs e)
|
||
|
{
|
||
|
if (FormWindowState.Minimized == this.WindowState)
|
||
|
{
|
||
|
this.ShowInTaskbar = false;
|
||
|
notifyIcon.Visible = true;
|
||
|
notifyIcon.ShowBalloonTip(500);
|
||
|
this.Hide();
|
||
|
}
|
||
|
else if (FormWindowState.Normal == this.WindowState)
|
||
|
{
|
||
|
notifyIcon.Visible = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void pictureBoxMinimize_MouseEnter(object sender, EventArgs e)
|
||
|
{
|
||
|
pictureBoxMinimize.Image = Properties.Resources.minimize_over;
|
||
|
}
|
||
|
|
||
|
private void pictureBoxMinimize_MouseLeave(object sender, EventArgs e)
|
||
|
{
|
||
|
pictureBoxMinimize.Image = Properties.Resources.minimize;
|
||
|
}
|
||
|
|
||
|
private void pictureBoxMinimize_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
this.WindowState = FormWindowState.Minimized;
|
||
|
}
|
||
|
|
||
|
private void pictureBoxClose_MouseEnter(object sender, EventArgs e)
|
||
|
{
|
||
|
pictureBoxClose.Image = Properties.Resources.close_over;
|
||
|
}
|
||
|
|
||
|
private void pictureBoxClose_MouseLeave(object sender, EventArgs e)
|
||
|
{
|
||
|
pictureBoxClose.Image = Properties.Resources.close;
|
||
|
}
|
||
|
|
||
|
private void pictureBoxClose_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
LOGS.LOG("#####################");
|
||
|
LOGS.LOG("Application ended by user");
|
||
|
LOGS.LOG("#####################");
|
||
|
/*
|
||
|
GWstatus gws = new GWstatus();
|
||
|
gws.gw_id = MotoTRBO_GW.cfg.gw_id;
|
||
|
gws.status = (gatewayStatus) ? 1 : 0;
|
||
|
gws.message = "Gateway is closing!!!";
|
||
|
SN_Queues.gwstatusQueue.PostItem(gws);
|
||
|
|
||
|
// wait for Gateway Status message to be addded into DB
|
||
|
Thread.Sleep(300);
|
||
|
*/
|
||
|
|
||
|
//StopDBService();
|
||
|
|
||
|
/*
|
||
|
Process oldProcess = Process.GetCurrentProcess();
|
||
|
oldProcess.WaitForExit(1000);
|
||
|
oldProcess.Kill();
|
||
|
*/
|
||
|
|
||
|
if(this.InvokeRequired)
|
||
|
{
|
||
|
this.Invoke((MethodInvoker)delegate
|
||
|
{
|
||
|
this.Close();
|
||
|
});
|
||
|
}
|
||
|
else
|
||
|
System.Environment.Exit(0);
|
||
|
}
|
||
|
|
||
|
private void notifyIcon_DoubleClick(object sender, MouseEventArgs e)
|
||
|
{
|
||
|
this.Show();
|
||
|
this.ShowInTaskbar = true;
|
||
|
this.WindowState = FormWindowState.Normal;
|
||
|
}
|
||
|
|
||
|
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
|
||
|
{
|
||
|
MotoTRBO_GW.running = false;
|
||
|
|
||
|
if (MotoTRBO_GW.DBConnection != null)
|
||
|
MotoTRBO_GW.DBConnection.StopDB();
|
||
|
|
||
|
// close the ars connection
|
||
|
if (MotoTRBO_GW.ARSConnection != null)
|
||
|
MotoTRBO_GW.ARSConnection.StopARSThread();
|
||
|
|
||
|
// close the location connection
|
||
|
if (MotoTRBO_GW.LocationConnection != null)
|
||
|
MotoTRBO_GW.LocationConnection.Stop();
|
||
|
|
||
|
if (TallysmanReceiveConnection != null)
|
||
|
TallysmanReceiveConnection.Stop();
|
||
|
|
||
|
// close the sms client
|
||
|
if(MotoTRBO_GW.smsUDPclient != null)
|
||
|
{
|
||
|
MotoTRBO_GW.smsUDPclient.Close();
|
||
|
MotoTRBO_GW.smsUDPclient = null;
|
||
|
}
|
||
|
|
||
|
|
||
|
if (adr != null)
|
||
|
adr.StopAddressThread();
|
||
|
|
||
|
CloseNotifyIcon();
|
||
|
pictureBoxClose_Click(sender, null);
|
||
|
}
|
||
|
|
||
|
private void pictureBoxSettings_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
// display the settings form
|
||
|
SettingsForm sf = new SettingsForm();
|
||
|
sf.OnCommandRequested += delegate(String uiMessage)
|
||
|
{
|
||
|
UpdateLabelEvent(uiMessage);
|
||
|
};
|
||
|
|
||
|
// display the form over this form
|
||
|
sf.Location = this.Location;
|
||
|
// restart app if selected
|
||
|
sf.OnRestartSelected += delegate()
|
||
|
{
|
||
|
labelGwStatus.Text = "Restarting...";
|
||
|
RestartApp();
|
||
|
};
|
||
|
sf.ShowDialog();
|
||
|
}
|
||
|
|
||
|
private void OnApplicationExit(object sender, EventArgs e)
|
||
|
{
|
||
|
CloseNotifyIcon();
|
||
|
}
|
||
|
|
||
|
private void CloseNotifyIcon()
|
||
|
{
|
||
|
if (notifyIcon != null)
|
||
|
{
|
||
|
notifyIcon.Visible = false;
|
||
|
notifyIcon.Icon = null;
|
||
|
notifyIcon.Dispose();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// Check for new version release on SafeMobile Portal
|
||
|
/// The check is done by comparing Current Assembly Version with the one
|
||
|
/// written in a xml file on the portal.
|
||
|
/// </summary>
|
||
|
private void CheckForUpdate()
|
||
|
{
|
||
|
//Uncomment below line to see Russian version
|
||
|
//AutoUpdater.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU");
|
||
|
|
||
|
//If you want to open download page when user click on download button uncomment below line.
|
||
|
//AutoUpdater.OpenDownloadPage = true;
|
||
|
|
||
|
//Don't want user to select remind later time in AutoUpdater notification window then uncomment 3 lines below so default remind later time will be set to 2 days.
|
||
|
|
||
|
//AutoUpdater.LetUserSelectRemindLater = false;
|
||
|
//AutoUpdater.RemindLaterTimeSpan = RemindLaterFormat.Days;
|
||
|
//AutoUpdater.RemindLaterAt = 2;
|
||
|
|
||
|
bool isDevelope = false;
|
||
|
|
||
|
if(MotoTRBO_GW.cfg.autoupdate)
|
||
|
AutoUpdater.Start("http://portal.safemobile.com/upload/safenet/updates" + (isDevelope ? "/develop" : "/production") +"/conventional/safenet_trbo_gateway.xml");
|
||
|
}
|
||
|
|
||
|
private void pictureBox2_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
System.Diagnostics.Process.Start("https://safenet.safemobile.com/");
|
||
|
}
|
||
|
|
||
|
int count = 0;
|
||
|
private void labelVersion_DoubleClick(object sender, EventArgs e)
|
||
|
{
|
||
|
count++;
|
||
|
|
||
|
if (count >= 3)
|
||
|
{
|
||
|
DebugCmd cmd = new DebugCmd();
|
||
|
cmd.ShowDialog();
|
||
|
count = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|