1798 lines
79 KiB
C#
1798 lines
79 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Collections;
|
|||
|
using System.ComponentModel;
|
|||
|
using System.Data;
|
|||
|
using System.Drawing;
|
|||
|
using System.Text;
|
|||
|
using System.Windows.Forms;
|
|||
|
using Nini.Config;
|
|||
|
using SafeMobileLib;
|
|||
|
using Telerik.WinControls;
|
|||
|
using RegLibDLL;
|
|||
|
using System.Net.Sockets;
|
|||
|
using System.Net;
|
|||
|
using System.Resources;
|
|||
|
using System.Globalization;
|
|||
|
using Telerik.WinControls.UI;
|
|||
|
using SafeMobileLib.DBmanagers;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.IO;
|
|||
|
using System.Linq;
|
|||
|
using SharedUI;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace SubscriberAndUserManager
|
|||
|
{
|
|||
|
public partial class MainForm : Telerik.WinControls.UI.RadRibbonForm
|
|||
|
{
|
|||
|
// save the version of the application server in order to use it for the updater
|
|||
|
public static String APP_SERVER_VERSION = "";
|
|||
|
|
|||
|
public static SafeMobileLib.IconTheme iconThemeType = SafeMobileLib.IconTheme.PIN;
|
|||
|
|
|||
|
private Login lgForm;
|
|||
|
public static bool HasEmailSettings;
|
|||
|
|
|||
|
|
|||
|
#region THEMING
|
|||
|
public static Color LabelColor = Color.FromArgb(255, 64, 0);
|
|||
|
public static Color LabelColorTicketSubject = Color.FromArgb(72, 191, 255);
|
|||
|
public static Color ButtonColor = Color.FromArgb(211, 111, 15);
|
|||
|
public static Color ButtonColorDisabled = Color.FromArgb(113, 113, 113);
|
|||
|
public static Color GroupHeaderColor = Color.FromArgb(255, 64, 0);
|
|||
|
public static Color TabSelectedColor = Color.FromArgb(15, 158, 190);
|
|||
|
public static Color TabOverColor = Color.FromArgb(255, 64, 0);
|
|||
|
public static Color TabNormalColor = Color.FromArgb(15, 115, 211);
|
|||
|
public static Color GridSelectedRow = Color.FromArgb(146, 217, 255);
|
|||
|
public static Color GridAlternateRow = Color.FromArgb(193, 235, 255);
|
|||
|
|
|||
|
public static Dictionary<String, Image> imagesDictionary = new Dictionary<string, Image>();
|
|||
|
private static RibbonTab currentTab;
|
|||
|
|
|||
|
public static void setThemingColors(RADIOTYPE themeType)
|
|||
|
{
|
|||
|
switch (themeType)
|
|||
|
{
|
|||
|
case RADIOTYPE.MOTO:
|
|||
|
case RADIOTYPE.CONECTPLUS:
|
|||
|
case RADIOTYPE.REPEATER_TRBO:
|
|||
|
case RADIOTYPE.TETRA:
|
|||
|
{
|
|||
|
LabelColor = Color.FromArgb(27, 161, 226);
|
|||
|
LabelColorTicketSubject = Color.FromArgb(72, 191, 255);
|
|||
|
ButtonColor = Color.FromArgb(27, 161, 226);
|
|||
|
ButtonColorDisabled = Color.FromArgb(113, 113, 113);
|
|||
|
GroupHeaderColor = Color.FromArgb(27, 161, 226);
|
|||
|
TabSelectedColor = Color.FromArgb(15, 158, 190);
|
|||
|
TabOverColor = Color.FromArgb(23, 131, 238);
|
|||
|
TabNormalColor = Color.FromArgb(15, 115, 211);
|
|||
|
GridSelectedRow = Color.FromArgb(146, 217, 255);
|
|||
|
GridAlternateRow = Color.FromArgb(239, 250, 255);
|
|||
|
break;
|
|||
|
}
|
|||
|
case RADIOTYPE.HYT:
|
|||
|
{
|
|||
|
LabelColor = Color.FromArgb(244, 177, 131);
|
|||
|
LabelColorTicketSubject = Color.FromArgb(0, 99, 147);
|
|||
|
ButtonColor = Color.FromArgb(244, 177, 131);
|
|||
|
ButtonColorDisabled = Color.FromArgb(113, 113, 113);
|
|||
|
GroupHeaderColor = Color.FromArgb(244, 177, 131);
|
|||
|
TabSelectedColor = Color.FromArgb(255, 181, 61);
|
|||
|
TabOverColor = Color.FromArgb(200, 122, 49);
|
|||
|
TabNormalColor = Color.FromArgb(255, 164, 101);
|
|||
|
GridSelectedRow = Color.FromArgb(255, 184, 146);
|
|||
|
GridAlternateRow = Color.FromArgb(255, 244, 239);
|
|||
|
break;
|
|||
|
}
|
|||
|
case RADIOTYPE.SIMOCO:
|
|||
|
{
|
|||
|
LabelColor = Color.FromArgb(71, 101, 154);
|
|||
|
LabelColorTicketSubject = Color.FromArgb(0, 99, 147);
|
|||
|
ButtonColor = Color.FromArgb(71, 101, 154);
|
|||
|
ButtonColorDisabled = Color.FromArgb(113, 113, 113);
|
|||
|
GroupHeaderColor = Color.FromArgb(71, 101, 154);
|
|||
|
TabSelectedColor = Color.FromArgb(117, 139, 217);
|
|||
|
TabOverColor = Color.FromArgb(70, 102, 213);
|
|||
|
TabNormalColor = Color.FromArgb(71, 101, 154);
|
|||
|
GridSelectedRow = Color.FromArgb(177, 200, 223);
|
|||
|
GridAlternateRow = Color.FromArgb(239, 248, 255);
|
|||
|
break;
|
|||
|
}
|
|||
|
case RADIOTYPE.EXCERA:
|
|||
|
{
|
|||
|
LabelColor = Color.FromArgb(139, 146, 158);
|
|||
|
LabelColorTicketSubject = Color.FromArgb(158, 167, 171);
|
|||
|
ButtonColor = Color.FromArgb(56, 60, 63);
|
|||
|
ButtonColorDisabled = Color.FromArgb(113, 113, 113);
|
|||
|
GroupHeaderColor = Color.FromArgb(139, 146, 158);
|
|||
|
TabSelectedColor = Color.FromArgb(139, 146, 158);
|
|||
|
TabOverColor = Color.FromArgb(151, 153, 161);
|
|||
|
TabNormalColor = Color.FromArgb(56, 60, 63);
|
|||
|
GridSelectedRow = Color.FromArgb(222, 224, 226);
|
|||
|
GridAlternateRow = Color.FromArgb(231, 235, 239);
|
|||
|
break;
|
|||
|
}
|
|||
|
case RADIOTYPE.HARRIS:
|
|||
|
{
|
|||
|
LabelColor = Color.FromArgb(184, 54, 41);
|
|||
|
LabelColorTicketSubject = Color.FromArgb(0, 99, 147);
|
|||
|
ButtonColor = Color.FromArgb(184, 54, 41);
|
|||
|
ButtonColorDisabled = Color.FromArgb(113, 113, 113);
|
|||
|
GroupHeaderColor = Color.FromArgb(184, 54, 41);
|
|||
|
TabSelectedColor = Color.FromArgb(215, 125, 100);
|
|||
|
TabOverColor = Color.FromArgb(208, 82, 47);
|
|||
|
TabNormalColor = Color.FromArgb(184, 54, 41);
|
|||
|
GridSelectedRow = Color.FromArgb(240, 160, 164);
|
|||
|
GridAlternateRow = Color.FromArgb(255, 244, 245);
|
|||
|
break;
|
|||
|
}
|
|||
|
case RADIOTYPE.ATLAS:
|
|||
|
{
|
|||
|
LabelColor = Color.FromArgb(0, 0, 0);
|
|||
|
LabelColorTicketSubject = Color.FromArgb(0, 99, 147);
|
|||
|
ButtonColor = Color.FromArgb(0, 0, 0);
|
|||
|
ButtonColorDisabled = Color.FromArgb(113, 113, 113);
|
|||
|
GroupHeaderColor = Color.FromArgb(0, 0, 0);
|
|||
|
TabSelectedColor = Color.FromArgb(200, 200, 200);
|
|||
|
TabOverColor = Color.FromArgb(155, 155, 155);
|
|||
|
TabNormalColor = Color.FromArgb(0, 0, 0);
|
|||
|
GridSelectedRow = Color.FromArgb(200, 200, 200);
|
|||
|
GridAlternateRow = Color.FromArgb(244, 244, 244);
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
case RADIOTYPE.LINX:
|
|||
|
case RADIOTYPE.LINXB:
|
|||
|
{
|
|||
|
LabelColor = Color.FromArgb(0, 0, 0);
|
|||
|
LabelColorTicketSubject = Color.FromArgb(0, 99, 147);
|
|||
|
ButtonColor = Color.FromArgb(0, 0, 0);
|
|||
|
ButtonColorDisabled = Color.FromArgb(113, 113, 113);
|
|||
|
GroupHeaderColor = Color.FromArgb(0, 0, 0);
|
|||
|
TabSelectedColor = Color.FromArgb(200, 200, 200);
|
|||
|
TabOverColor = Color.FromArgb(155, 155, 155);
|
|||
|
TabNormalColor = Color.FromArgb(0, 0, 0);
|
|||
|
GridSelectedRow = Color.FromArgb(200, 200, 200);
|
|||
|
GridAlternateRow = Color.FromArgb(244, 244, 244);
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
|
|||
|
//private IConfigSource source = null;
|
|||
|
public static string CFG_FILE = "SubsConfig.ini";
|
|||
|
//public static Boolean Hytera =false;
|
|||
|
public static RADIOTYPE radioType = RADIOTYPE.HARRIS;
|
|||
|
public static Color HyteraColor = Color.Moccasin;
|
|||
|
public static Color HarrisColor = System.Drawing.SystemColors.ControlDark;
|
|||
|
public static Color HarTextColor = Color.White;
|
|||
|
public static bool IS_SIERRA_WIRELESS = false;
|
|||
|
|
|||
|
|
|||
|
public static string DBServer, DBSchema, DBUser, DBPass, DBPort;
|
|||
|
public static string dbIpforSip;
|
|||
|
private bool DBcleanUp = false;
|
|||
|
public DBuserManager db4users;
|
|||
|
private DBvehiclesManager db4vehs;
|
|||
|
private DBsettingsManager db4settings;
|
|||
|
private DBalarmManager db4alarmTypes;
|
|||
|
private DBtelemetryManager db4telemetry;
|
|||
|
private DBalarmManager db4Alarm;
|
|||
|
private DBgatewaysManager db4gateway;
|
|||
|
private DBgroupsManager db4groups;
|
|||
|
private DBcontactsManager db4contacts;
|
|||
|
private DBregistrationManager db4Registration;
|
|||
|
private DBdailyreportManager db4Reports;
|
|||
|
private DBemailServiceManager db4emailService;
|
|||
|
private static DBiconsManager dbicons;
|
|||
|
private DBTicketingManager db4Ticketing;
|
|||
|
private DBsubsOperationManager dbsub;
|
|||
|
private DBcallPatchManager dbpatch;
|
|||
|
|
|||
|
private controlUser usrControl;
|
|||
|
private controlUnit unitControl;
|
|||
|
private controlSettings setControl;
|
|||
|
private controlSystem systemControl;
|
|||
|
private controlGateways gatewayControl;
|
|||
|
private controlRegistration registrationControl;
|
|||
|
private controlReports reportControl;
|
|||
|
private controlTicketing ticketingControl;
|
|||
|
private TcpClient client;
|
|||
|
private Int32 registrationPort = 5680;
|
|||
|
|
|||
|
static String serverIP = "";
|
|||
|
|
|||
|
Int32 totalGateways = 0;
|
|||
|
Int32 totalGPS = 0;
|
|||
|
Int32 totalSMS = 0;
|
|||
|
Int32 totalTicketing = 0;
|
|||
|
Int32 totalReports = 0;
|
|||
|
Int32 totalVoice = 0;
|
|||
|
Int32 totalRecordings = 0;
|
|||
|
Int32 totalZones = 0;
|
|||
|
Int32 totalTelemetry = 0;
|
|||
|
Int32 totalGoogle = 0;
|
|||
|
Int32 totalUS = 0;
|
|||
|
Int32 totalOpenStreetMap = 0;
|
|||
|
Int32 totalArcgis = 0;
|
|||
|
internal static Int32 totalUnits = 0;
|
|||
|
internal static Int32 numberOfActiveUnits = 0;
|
|||
|
int totaldbunits = 0;
|
|||
|
public static ResourceManager RManager = new ResourceManager("SubscriberAndUserManager.Language.Language", typeof(MainForm).Assembly);
|
|||
|
public static CultureInfo culture = CultureInfo.CreateSpecificCulture("");
|
|||
|
public static Int32 Langidx=0;
|
|||
|
public static ArrayList VehNameList = new ArrayList();
|
|||
|
public static ArrayList ImeiList = new ArrayList();
|
|||
|
public static ArrayList imgList = new ArrayList();
|
|||
|
public static Dictionary<int, Image> carImages = new Dictionary<int, Image>();
|
|||
|
internal static string SipServer, WebServer, RestartSipLink, reloadDataLink;
|
|||
|
internal static bool hideLinxFeatures = true;
|
|||
|
internal static string selectedItemDDSierra = "";
|
|||
|
private string messageBusIP;
|
|||
|
private int messageBusPort;
|
|||
|
|
|||
|
private bool autoupdate = true;
|
|||
|
private bool isDevelop = false;
|
|||
|
internal static Vehicles selectedVeh;
|
|||
|
|
|||
|
public volatile static UdpMulticast udp;
|
|||
|
|
|||
|
private string localIP = "";
|
|||
|
|
|||
|
public static string returnLNGString(string name)
|
|||
|
{
|
|||
|
string returnSTR = "";
|
|||
|
|
|||
|
string temp = RManager.GetString(name, culture);
|
|||
|
returnSTR = temp;
|
|||
|
if (temp != null)
|
|||
|
if (temp.Contains("\\r\\n"))
|
|||
|
{
|
|||
|
returnSTR = temp.Replace("\\r\\n", "\r\n");
|
|||
|
}
|
|||
|
|
|||
|
return returnSTR;
|
|||
|
}
|
|||
|
|
|||
|
public static Boolean TestIP(string IP)
|
|||
|
{
|
|||
|
String[] tmp = IP.Split('.');
|
|||
|
if (tmp.Length != 4) return false;
|
|||
|
Int32 number;
|
|||
|
bool result;
|
|||
|
for(Int32 i=0;i<=3;i++)
|
|||
|
{
|
|||
|
result = Int32.TryParse(tmp[i], out number);
|
|||
|
if (result)
|
|||
|
{
|
|||
|
if ((number < 0) || (number > 255)) return false;
|
|||
|
}
|
|||
|
else return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
private void setLanguage()
|
|||
|
{
|
|||
|
this.Text = returnLNGString("adminModule");
|
|||
|
tabUnits.Text = returnLNGString("units");
|
|||
|
tabUser.Text = returnLNGString("users");
|
|||
|
tabTicketing.Text = returnLNGString("ts");
|
|||
|
tabSettings.Text = returnLNGString("sett");
|
|||
|
tabSystem.Text = returnLNGString("alarms");
|
|||
|
tabRegistration.Text = returnLNGString("regs");
|
|||
|
tabGateways.Text = returnLNGString("gate");
|
|||
|
tabReports.Text = returnLNGString("Dailyreports");
|
|||
|
btnAddUnit.Text = returnLNGString("add");
|
|||
|
btnUserAdd.Text = returnLNGString("add");
|
|||
|
btnUnitDelete.Text = returnLNGString("del");
|
|||
|
btnUserDelete.Text = returnLNGString("del");
|
|||
|
btnUnitEdit.Text = returnLNGString("edit");
|
|||
|
btnGroupEdit.Text = returnLNGString("lbGrp");
|
|||
|
btnUserEdit.Text = returnLNGString("edit");
|
|||
|
btnSaveSettings4User.Text = rbtSaveUnits.Text = rbtSaveGateways.Text = rbtSaveRegistration.Text =
|
|||
|
rbtSaveReports.Text = rbtSaveSettings.Text = returnLNGString("saveset");
|
|||
|
btnTelemetrySave.Text = returnLNGString("save");
|
|||
|
radRibbonBarGroup1.Text = returnLNGString("sett");
|
|||
|
radRibbonBarGroup2.Text = returnLNGString("units");
|
|||
|
radRibbonBarGroup6.Text = returnLNGString("group");
|
|||
|
radRibbonBarGroup4.Text = returnLNGString("sett");
|
|||
|
radRibbonBarGroup5.Text = returnLNGString("sett");
|
|||
|
radRibbonBarGroup10.Text = returnLNGString("sett");
|
|||
|
radRibbonBarGroup11.Text = returnLNGString("sett");
|
|||
|
radRibbonBarGroup12.Text = returnLNGString("sett");
|
|||
|
radRibbonBarGroup15.Text = returnLNGString("refreshGrid");
|
|||
|
radRibbonBarGroup13.Text = returnLNGString("sett");
|
|||
|
radRibbonBarGroup14.Text = returnLNGString("sett");
|
|||
|
rbtSaveGateways.Text = returnLNGString("save");
|
|||
|
rbtSaveRegistration.Text = returnLNGString("save");
|
|||
|
rbtSaveReports.Text = returnLNGString("save");
|
|||
|
rbtSaveSettings.Text = returnLNGString("save");
|
|||
|
rbtSaveUnits.Text = returnLNGString("save");
|
|||
|
btnTelemetrySave.Text = returnLNGString("save");
|
|||
|
//radRibbonBarGroup5.Text = returnLNGString("sdset");
|
|||
|
lbsaveNotificationSip.Text = returnLNGString("saveNotificationSip");
|
|||
|
}
|
|||
|
|
|||
|
#region Constructor
|
|||
|
private DialogResult loginDialogResult = DialogResult.Cancel;
|
|||
|
public MainForm()
|
|||
|
{
|
|||
|
// initialize the
|
|||
|
InitializeComponent();
|
|||
|
|
|||
|
SM debug = new SM();
|
|||
|
|
|||
|
setThemingColors(radioType);
|
|||
|
|
|||
|
|
|||
|
LoadConfig();
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if (serverIP.Equals("localhost"))
|
|||
|
{
|
|||
|
serverIP = "127.0.0.1";
|
|||
|
}
|
|||
|
dbIpforSip = MainForm.serverIP == "127.0.0.1" ? UdpMulticast.getPreferedIPAdress().ToString() : serverIP;
|
|||
|
RadMessageBox.SetThemeName("TelerikMetroBlue");
|
|||
|
|
|||
|
if (radioType==RADIOTYPE.HYT)
|
|||
|
{
|
|||
|
//this.AllowAero = false;
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.SYTADMIN24x;
|
|||
|
}
|
|||
|
else if (radioType == RADIOTYPE.HARRIS)
|
|||
|
{
|
|||
|
//this.AllowAero = false;
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.visionSmall;
|
|||
|
}
|
|||
|
else if (radioType == RADIOTYPE.ATLAS)
|
|||
|
{
|
|||
|
//ThemeResolutionService.ApplicationThemeName = "Office2010Black"; //ATLASCHANGE
|
|||
|
//this.AllowAero = false;
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.ATLASadmin32;
|
|||
|
}
|
|||
|
else if (radioType == RADIOTYPE.SIMOCO)
|
|||
|
{
|
|||
|
//this.AllowAero = false;
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.simoco_setup_241;
|
|||
|
}
|
|||
|
else if (radioType == RADIOTYPE.EXCERA)
|
|||
|
{
|
|||
|
//this.AllowAero = false;
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.simoco_setup_241;
|
|||
|
}
|
|||
|
// ThemeResolutionService.ApplicationThemeName = "Breeze";
|
|||
|
//show login form
|
|||
|
|
|||
|
|
|||
|
lgForm = new Login(Login.RegistrationStatus.NOT_REGISTERED);
|
|||
|
lgForm.FormClosing += delegate (object sender, FormClosingEventArgs e)
|
|||
|
{
|
|||
|
registrationBackgroundWorker.CancelAsync();
|
|||
|
if(lgForm.DialogResult != DialogResult.OK)
|
|||
|
Application.Exit();
|
|||
|
};
|
|||
|
|
|||
|
/*
|
|||
|
if (totalGateways > 0)
|
|||
|
{
|
|||
|
lgForm = new Login(db4users, true);
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
lgForm = new Login(db4users, false);
|
|||
|
}*/
|
|||
|
|
|||
|
// This event will be raised on the worker thread when the worker starts
|
|||
|
registrationBackgroundWorker.DoWork += new DoWorkEventHandler(registrationBackgroundWorker_DoWork);
|
|||
|
|
|||
|
// Start the registration background worker
|
|||
|
registrationBackgroundWorker.RunWorkerAsync();
|
|||
|
|
|||
|
loginDialogResult = lgForm.ShowDialog();
|
|||
|
//Console.WriteLine("login dialog result =" + loginDialogResult);
|
|||
|
//if login form was closed without entering a correct password exit
|
|||
|
if (loginDialogResult != DialogResult.OK) //System.Environment.Exit(0);
|
|||
|
{
|
|||
|
// I should not do anything, the login form will close the application
|
|||
|
Application.Exit();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
db4vehs = new DBvehiclesManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4settings = new DBsettingsManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4telemetry = new DBtelemetryManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4Alarm = new DBalarmManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4gateway = new DBgatewaysManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4groups = new DBgroupsManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4contacts = new DBcontactsManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4emailService = new DBemailServiceManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
dbicons = new DBiconsManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4Reports = new DBdailyreportManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4Ticketing = new DBTicketingManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
dbsub = new DBsubsOperationManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
dbpatch = new DBcallPatchManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
|
|||
|
HasEmailSettings = db4emailService.GetEmailServiceSettings().Enable;
|
|||
|
|
|||
|
// detect if Sierra Wireless
|
|||
|
IS_SIERRA_WIRELESS = dbsub.IsSierraWireless();
|
|||
|
|
|||
|
LoadUnitIcons();
|
|||
|
|
|||
|
this.AllowAero = false;
|
|||
|
|
|||
|
//cleanup DB from old IMEIS
|
|||
|
if (DBcleanUp)
|
|||
|
DB_Cleanup();
|
|||
|
|
|||
|
switch (MainForm.Langidx)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("en");
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("zh-CN");
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("cs");
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("fr");
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("de");
|
|||
|
break;
|
|||
|
case 5:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("it");
|
|||
|
break;
|
|||
|
case 6:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("ja");
|
|||
|
break;
|
|||
|
case 7:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("pl");
|
|||
|
break;
|
|||
|
case 8:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("pt");
|
|||
|
break;
|
|||
|
case 9:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("ro");
|
|||
|
break;
|
|||
|
case 10:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("ru");
|
|||
|
break;
|
|||
|
case 11:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("sr");
|
|||
|
break;
|
|||
|
case 12:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("es");
|
|||
|
break;
|
|||
|
case 13:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("sv");
|
|||
|
break;
|
|||
|
case 14:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("tr");
|
|||
|
break;
|
|||
|
case 15:
|
|||
|
culture = CultureInfo.CreateSpecificCulture("ar");
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
setLanguage();
|
|||
|
tabUnits.IsSelected = true;
|
|||
|
radRibbonBar1.RibbonBarElement.QuickAccessToolBar.Visibility = Telerik.WinControls.ElementVisibility.Hidden;
|
|||
|
radRibbonBar1.CollapseRibbonOnTabDoubleClick = false;
|
|||
|
if ((totalGateways == 0) || (totalGPS == 0 && totalSMS == 0 && totalTicketing == 0 && totalReports == 0 && totalTelemetry == 0
|
|||
|
&& totalVoice == 0 && totalRecordings == 0 && totalZones == 0 && totalGoogle == 0 && totalArcgis == 0))
|
|||
|
{
|
|||
|
radRibbonBar1.Enabled = false;
|
|||
|
MainPanel.Enabled = false;
|
|||
|
RadMessageBox.Show(MainForm.returnLNGString("dongleError") + "\n" + MainForm.returnLNGString("pleaseInsertValidDongle"), MainForm.returnLNGString("err"), MessageBoxButtons.OK, RadMessageIcon.Error);
|
|||
|
|
|||
|
//System.Environment.Exit(0);
|
|||
|
System.Windows.Forms.Application.Exit();
|
|||
|
}
|
|||
|
if ((radioType == RADIOTYPE.HARRIS) || (radioType == RADIOTYPE.ATLAS))
|
|||
|
{
|
|||
|
this.btnAddUnit.ForeColor = MainForm.HarTextColor;
|
|||
|
//this.btnGroupAdd.ForeColor = MainForm.HarTextColor;
|
|||
|
//this.btnGroupDelete.ForeColor = MainForm.HarTextColor;
|
|||
|
this.btnGroupEdit.ForeColor = MainForm.HarTextColor;
|
|||
|
this.btnSaveSettings4User.ForeColor = MainForm.HarTextColor;
|
|||
|
this.btnTelemetrySave.ForeColor = MainForm.HarTextColor;
|
|||
|
this.btnUnitDelete.ForeColor = MainForm.HarTextColor;
|
|||
|
this.btnUnitEdit.ForeColor = MainForm.HarTextColor;
|
|||
|
this.btnUserAdd.ForeColor = MainForm.HarTextColor;
|
|||
|
this.btnUserEdit.ForeColor = MainForm.HarTextColor;
|
|||
|
this.btnUserDelete.ForeColor = MainForm.HarTextColor;
|
|||
|
this.radRibbonBarGroup1.ForeColor = MainForm.HarTextColor;
|
|||
|
this.radRibbonBarGroup2.ForeColor = MainForm.HarTextColor;
|
|||
|
this.radRibbonBarGroup4.ForeColor = MainForm.HarTextColor;
|
|||
|
this.radRibbonBarGroup5.ForeColor = MainForm.HarTextColor;
|
|||
|
this.radRibbonBarGroup6.ForeColor = MainForm.HarTextColor;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
btnAddUnit.MouseEnter += new EventHandler(btnAddUnit_MouseEnter);
|
|||
|
btnAddUnit.MouseLeave += new EventHandler(btnAddUnit_MouseLeave);
|
|||
|
//btnGroupAdd.MouseEnter += new EventHandler(btnGroupAdd_MouseEnter);
|
|||
|
//btnGroupAdd.MouseLeave += new EventHandler(btnGroupAdd_MouseLeave);
|
|||
|
//btnGroupDelete.MouseEnter += new EventHandler(btnGroupDelete_MouseEnter);
|
|||
|
//btnGroupDelete.MouseLeave += new EventHandler(btnGroupDelete_MouseLeave);
|
|||
|
btnGroupEdit.MouseEnter += new EventHandler(btnGroupEdit_MouseEnter);
|
|||
|
btnGroupEdit.MouseLeave += new EventHandler(btnGroupEdit_MouseLeave);
|
|||
|
|
|||
|
btnSaveSettings4User.MouseEnter += new EventHandler(btnSaveSettings4User_MouseEnter);
|
|||
|
btnSaveSettings4User.MouseLeave += new EventHandler(btnSaveSettings4User_MouseLeave);
|
|||
|
|
|||
|
btnTelemetrySave.MouseEnter += new EventHandler(btnTelemetrySave_MouseEnter);
|
|||
|
btnTelemetrySave.MouseLeave += new EventHandler(btnTelemetrySave_MouseLeave);
|
|||
|
btnUnitDelete.MouseEnter += new EventHandler(btnUnitDelete_MouseEnter);
|
|||
|
btnUnitDelete.MouseLeave += new EventHandler(btnUnitDelete_MouseLeave);
|
|||
|
btnUnitEdit.MouseEnter += new EventHandler(btnUnitEdit_MouseEnter);
|
|||
|
btnUnitEdit.MouseLeave += new EventHandler(btnUnitEdit_MouseLeave);
|
|||
|
|
|||
|
btnUserAdd.MouseEnter += new EventHandler(btnUserAdd_MouseEnter);
|
|||
|
btnUserAdd.MouseLeave += new EventHandler(btnUserAdd_MouseLeave);
|
|||
|
btnUserEdit.MouseEnter += new EventHandler(btnUserEdit_MouseEnter);
|
|||
|
btnUserEdit.MouseLeave += new EventHandler(btnUserEdit_MouseLeave);
|
|||
|
btnUserDelete.MouseEnter += new EventHandler(btnUserDelete_MouseEnter);
|
|||
|
btnUserDelete.MouseLeave += new EventHandler(btnUserDelete_MouseLeave);
|
|||
|
}
|
|||
|
|
|||
|
if ((radioType == RADIOTYPE.ATLAS) || (radioType == RADIOTYPE.CONECTPLUS))
|
|||
|
{
|
|||
|
//RADIOTYPE.ATLAS
|
|||
|
radRibbonBar1.CommandTabs.Remove(tabGateways);
|
|||
|
}
|
|||
|
if ((radioType != RADIOTYPE.MOTO) && (radioType != RADIOTYPE.REPEATER_TRBO))
|
|||
|
{
|
|||
|
//RADIOTYPE.ATLAS
|
|||
|
radRibbonBar1.CommandTabs.Remove(tabTicketing);
|
|||
|
totalTicketing = 0;
|
|||
|
}
|
|||
|
|
|||
|
//int UDP multicast
|
|||
|
udp = new UdpMulticast(messageBusIP, messageBusPort);
|
|||
|
udp.OnNewDataRecv += new UdpMulticast.newData4Send(udp_OnNewDataRecv);
|
|||
|
udp.StartListen(localIP);
|
|||
|
|
|||
|
string lanLinxServer = db4settings.getSettingValue(0, "lanLinxServer");
|
|||
|
string lanSipServerPort = db4settings.getSettingValue(0, "lanSipPort");
|
|||
|
string lanSigServerPort = db4settings.getSettingValue(0, "lanSigPort");
|
|||
|
SipServer = $"{lanLinxServer}:{lanSipServerPort}";
|
|||
|
WebServer = $"{lanLinxServer}:{lanSigServerPort}";
|
|||
|
RestartSipLink = $"http://{WebServer}/restart-sip";
|
|||
|
reloadDataLink = $"http://{WebServer}/reload-data";
|
|||
|
ddSierraWireless.SelectedIndex = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// On worker thread so do our thing!
|
|||
|
private void registrationBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
|
|||
|
{
|
|||
|
System.Threading.Thread.Sleep(200);
|
|||
|
|
|||
|
// exit application if APP Server could not be reached
|
|||
|
if (getRegistration() == false)
|
|||
|
{
|
|||
|
/*
|
|||
|
if (!this.IsHandleCreated)
|
|||
|
{
|
|||
|
this.CreateHandle();
|
|||
|
}*/
|
|||
|
lgForm.Invoke((MethodInvoker)delegate ()
|
|||
|
{
|
|||
|
lgForm.OnRegistrationStatusChanged(Login.RegistrationStatus.UNAUTHORIZED);
|
|||
|
RadMessageBox.Instance.TopMost = true;
|
|||
|
RadMessageBox.Instance.TopLevel = true;
|
|||
|
|
|||
|
if ((radioType == RADIOTYPE.HARRIS) || (radioType == RADIOTYPE.ATLAS)) ((RadLabel)
|
|||
|
RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm.HarTextColor;
|
|||
|
|
|||
|
RadMessageBox.SetThemeName("TelerikMetroBlue");
|
|||
|
RadMessageBox.Show(MainForm.returnLNGString("cantapp"), MainForm.returnLNGString("err"), MessageBoxButtons.OK, RadMessageIcon.Error);
|
|||
|
});
|
|||
|
|
|||
|
//System.Environment.Exit(0);
|
|||
|
System.Threading.Thread.Sleep(500);
|
|||
|
Application.Exit();
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
registrationBackgroundWorker.ReportProgress(100);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private void registrationBackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
|
|||
|
{
|
|||
|
// registration process had finished
|
|||
|
if (e.ProgressPercentage == 100)
|
|||
|
{
|
|||
|
|
|||
|
db4Registration = new DBregistrationManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
db4users = new DBuserManager(DBServer, DBSchema, DBUser, DBPass, DBPort);
|
|||
|
lgForm.dbUserManager = db4users;
|
|||
|
lgForm.OnRegistrationStatusChanged(Login.RegistrationStatus.REGISTERED);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
private void LoadUnitIcons()
|
|||
|
{
|
|||
|
// create icons
|
|||
|
MainForm.imgList = db4vehs.get_all_car_picture();
|
|||
|
|
|||
|
string fileName = "";
|
|||
|
string filePath = "";
|
|||
|
|
|||
|
foreach (Car c in MainForm.imgList)
|
|||
|
{
|
|||
|
fileName = c.fileName;
|
|||
|
filePath = System.Windows.Forms.Application.StartupPath + @"\resource\cars\"
|
|||
|
+ (SubscriberAndUserManager.MainForm.iconThemeType == SafeMobileLib.IconTheme.CLASSIC ? "" : "list_")
|
|||
|
+ SubscriberAndUserManager.MainForm.iconThemeType + "_" + c.iconPattern + ".png";
|
|||
|
|
|||
|
|
|||
|
if (filePath.Length == 0)
|
|||
|
{
|
|||
|
GetCustomIcon(c.idx);
|
|||
|
}
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
|
|||
|
Bitmap bmp = new Bitmap(filePath);
|
|||
|
{
|
|||
|
Image tmp2 = bmp;
|
|||
|
try
|
|||
|
{
|
|||
|
// add the car to the dictionary if not exists
|
|||
|
if (!MainForm.carImages.ContainsKey(c.idx))
|
|||
|
MainForm.carImages.Add(c.idx, Utils.ScaleImage(tmp2, 32, 32));
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Utils.WriteLine("Exception on populating icons: " + ex.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Utils.WriteLine("\nBmp " + filePath + " exception " + ex.ToString(), ConsoleColor.Red);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public static void GetCustomIcon(int idx)
|
|||
|
{
|
|||
|
Utils.WriteLine("Got custom icon with id " + idx);
|
|||
|
Byte[] newCarBytes = dbicons.Get_Unit_Image(idx);
|
|||
|
try
|
|||
|
{
|
|||
|
using (var m = new MemoryStream(newCarBytes))
|
|||
|
{
|
|||
|
// save the image received from the database to a png file
|
|||
|
Bitmap bmp = new Bitmap(m);
|
|||
|
{
|
|||
|
// add the car to the dictionary if not exists
|
|||
|
if (!MainForm.carImages.ContainsKey(idx))
|
|||
|
MainForm.carImages.Add(idx, Utils.ScaleImage(bmp, 32, 32));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Utils.WriteLine("Exception on populating icons: " + ex.ToString());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void udp_OnNewDataRecv(byte[] data, int dataLen)
|
|||
|
{
|
|||
|
string str = System.Text.Encoding.ASCII.GetString(data, 0, dataLen);
|
|||
|
SM.Debug("RX: " + str.Trim());
|
|||
|
try
|
|||
|
{
|
|||
|
BussMessageParser(data, dataLen);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine(ex.ToString());
|
|||
|
}
|
|||
|
//BussMessageParser2(data,dataLen);
|
|||
|
}
|
|||
|
|
|||
|
private bool BussMessageParser(byte[] rawData, int actualLen)
|
|||
|
{
|
|||
|
string data = System.Text.Encoding.ASCII.GetString(rawData, 0, actualLen);
|
|||
|
//SM.Debug("RX: " + data.Trim());
|
|||
|
|
|||
|
string[] tempArr = data.Split('#');
|
|||
|
if (tempArr.Length == 0)
|
|||
|
{
|
|||
|
SM.Debug("incorect message=" + data);
|
|||
|
return false;
|
|||
|
}
|
|||
|
int messLen = Convert.ToInt32(tempArr[1]);
|
|||
|
|
|||
|
if (actualLen != messLen)
|
|||
|
{
|
|||
|
Console.WriteLine("message length({0}) != actual length({1})", messLen, actualLen);
|
|||
|
return false;
|
|||
|
}
|
|||
|
int opCode = Convert.ToInt32(tempArr[3]);
|
|||
|
switch (opCode)
|
|||
|
{
|
|||
|
|
|||
|
case (byte)61:
|
|||
|
SM.Debug("controSettings-> got DB backup reply");
|
|||
|
string status = (tempArr[4] == "1") ? MainForm.returnLNGString("backup") + MainForm.returnLNGString("done") : MainForm.returnLNGString("backup") + MainForm.returnLNGString("failed");
|
|||
|
setControl.parseMultiCastData((Int32)opCode, status);
|
|||
|
break;
|
|||
|
case (byte)71:
|
|||
|
SM.Debug("controSettings-> got DB backup request ACK");
|
|||
|
setControl.parseMultiCastData((Int32)opCode, MainForm.returnLNGString("backupProgress"));
|
|||
|
break;
|
|||
|
|
|||
|
case (byte)62:
|
|||
|
SM.Debug("controSettings-> got DB restore reply");
|
|||
|
status = (tempArr[4] == "1") ? MainForm.returnLNGString("restore") + MainForm.returnLNGString("done") : MainForm.returnLNGString("restore") + MainForm.returnLNGString("failed");
|
|||
|
setControl.parseMultiCastData((Int32)opCode, status);
|
|||
|
break;
|
|||
|
case (byte)72:
|
|||
|
SM.Debug("controSettings-> got DB restore request ACK");
|
|||
|
setControl.parseMultiCastData((Int32)opCode, MainForm.returnLNGString("restoreProgress"));
|
|||
|
break;
|
|||
|
|
|||
|
case (byte)63:
|
|||
|
SM.Debug("controSettings-> got DB backup list");
|
|||
|
string fileNames = tempArr[4];
|
|||
|
if(setControl != null)
|
|||
|
setControl.parseMultiCastData((Int32)opCode, fileNames);
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public void SendRestart()
|
|||
|
{
|
|||
|
udp.Send(Utils.Convert_text_For_multicast("#0.0#209#"), Utils.Convert_text_For_multicast("#0.0#209#").Length);
|
|||
|
}
|
|||
|
|
|||
|
public static void BroadcastRegistrationSD(string msg)
|
|||
|
{
|
|||
|
Encoding enc = System.Text.Encoding.ASCII;
|
|||
|
byte[] buf = enc.GetBytes(msg);
|
|||
|
udp.Send(buf, buf.Length);
|
|||
|
}
|
|||
|
|
|||
|
#region Change Label Color for Harris
|
|||
|
|
|||
|
private void btnAddUnit_MouseLeave(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnAddUnit.ForeColor = MainForm.HarTextColor;
|
|||
|
}
|
|||
|
|
|||
|
private void btnAddUnit_MouseEnter(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnAddUnit.ForeColor = Color.Black;
|
|||
|
}
|
|||
|
|
|||
|
private void btnGroupEdit_MouseLeave(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnGroupEdit.ForeColor = MainForm.HarTextColor;
|
|||
|
}
|
|||
|
|
|||
|
private void btnGroupEdit_MouseEnter(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnGroupEdit.ForeColor = Color.Black;
|
|||
|
}
|
|||
|
|
|||
|
private void btnSaveSettings4User_MouseLeave(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnSaveSettings4User.ForeColor = MainForm.HarTextColor;
|
|||
|
}
|
|||
|
|
|||
|
private void btnSaveSettings4User_MouseEnter(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnSaveSettings4User.ForeColor = Color.Black;
|
|||
|
}
|
|||
|
|
|||
|
private void btnTelemetrySave_MouseLeave(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnTelemetrySave.ForeColor = MainForm.HarTextColor;
|
|||
|
}
|
|||
|
|
|||
|
private void btnTelemetrySave_MouseEnter(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnTelemetrySave.ForeColor = Color.Black;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUnitDelete_MouseLeave(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUnitDelete.ForeColor = MainForm.HarTextColor;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUnitDelete_MouseEnter(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUnitDelete.ForeColor = Color.Black;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUnitEdit_MouseLeave(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUnitEdit.ForeColor = MainForm.HarTextColor;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUnitEdit_MouseEnter(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUnitEdit.ForeColor = Color.Black;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUserAdd_MouseLeave(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUserAdd.ForeColor = MainForm.HarTextColor;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUserAdd_MouseEnter(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUserAdd.ForeColor = Color.Black;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUserEdit_MouseLeave(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUserEdit.ForeColor = MainForm.HarTextColor;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUserEdit_MouseEnter(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUserEdit.ForeColor = Color.Black;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUserDelete_MouseLeave(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUserDelete.ForeColor = MainForm.HarTextColor;
|
|||
|
}
|
|||
|
|
|||
|
private void btnUserDelete_MouseEnter(object sender, EventArgs e)
|
|||
|
{
|
|||
|
btnUserDelete.ForeColor = Color.Black;
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
private Boolean getRegistration()
|
|||
|
{
|
|||
|
|
|||
|
Boolean toReturn = false;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
client = new TcpClient();
|
|||
|
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(serverIP), registrationPort);
|
|||
|
client.Connect(serverEndPoint);
|
|||
|
NetworkStream clientStream = client.GetStream();
|
|||
|
|
|||
|
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
|
|||
|
byte[] buffer = encoding.GetBytes("300");
|
|||
|
clientStream.Write(buffer, 0, buffer.Length);
|
|||
|
Console.WriteLine("Sent registration request to server, waiting...");
|
|||
|
byte[] message = new byte[256];
|
|||
|
clientStream.WriteTimeout = 3000;
|
|||
|
clientStream.ReadTimeout = 3000;
|
|||
|
int result = clientStream.Read(message, 0, message.Length);
|
|||
|
Console.WriteLine("Received registration from server");
|
|||
|
String decodedString = encoding.GetString(message).Trim('\0');
|
|||
|
String[] options = decodedString.Split(';');
|
|||
|
Console.WriteLine("Option" + decodedString);
|
|||
|
|
|||
|
APP_SERVER_VERSION = options[options.Length - 1].Replace("valid-", "");
|
|||
|
|
|||
|
if (!App.isValidVersion(APP_SERVER_VERSION,
|
|||
|
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()))
|
|||
|
{
|
|||
|
lgForm.Invoke((MethodInvoker)delegate ()
|
|||
|
{
|
|||
|
RadMessageBox.Instance.TopMost = true;
|
|||
|
RadMessageBox.Instance.TopLevel = true;
|
|||
|
|
|||
|
if ((radioType == RADIOTYPE.HARRIS) || (radioType == RADIOTYPE.ATLAS)) ((RadLabel)
|
|||
|
RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm.HarTextColor;
|
|||
|
|
|||
|
RadMessageBox.SetThemeName("TelerikMetroBlue");
|
|||
|
DialogResult dr = RadMessageBox.Show("Please update your version of software to the latest one required by Application Server. Do you wish to update now?",
|
|||
|
"Update required...", MessageBoxButtons.YesNo, RadMessageIcon.Exclamation);
|
|||
|
|
|||
|
if (dr == DialogResult.Yes)
|
|||
|
{
|
|||
|
UpdateForm uf = new UpdateForm(App.ADMIN_MODULE, true) { IsDevelop = isDevelop };
|
|||
|
uf.ShowDialog();
|
|||
|
|
|||
|
Application.Exit();
|
|||
|
}
|
|||
|
else
|
|||
|
Application.Exit();
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if (options[0].Equals("301"))
|
|||
|
{
|
|||
|
totalGateways = Int32.Parse(options[1]);
|
|||
|
totalGPS = Int32.Parse(options[2]);
|
|||
|
totalSMS = Int32.Parse(options[3]);
|
|||
|
totalTicketing = Int32.Parse(options[4]);
|
|||
|
totalReports = Int32.Parse(options[5]);
|
|||
|
totalVoice = Int32.Parse(options[6]);
|
|||
|
totalRecordings = Int32.Parse(options[7]);
|
|||
|
totalZones = Int32.Parse(options[8]);
|
|||
|
totalTelemetry = Int32.Parse(options[9]);
|
|||
|
totalGoogle = Int32.Parse(options[10]);
|
|||
|
totalUS = Int32.Parse(options[11]);
|
|||
|
totalOpenStreetMap = Int32.Parse(options[12]);
|
|||
|
totalArcgis = Int32.Parse(options[13]);
|
|||
|
totalUnits = Int32.Parse(options[14]);
|
|||
|
messageBusIP = options[15];
|
|||
|
messageBusPort = Int32.Parse(options[16]);
|
|||
|
DBServer = options[17];
|
|||
|
DBSchema = options[18];
|
|||
|
DBUser = options[19];
|
|||
|
DBPass = options[20];
|
|||
|
DBPort = options[21];
|
|||
|
Console.WriteLine("Totals: GW:" + totalGateways + " GPS:" + totalGPS + " SMS:" + totalSMS + " Job Ticketing:"
|
|||
|
+ totalTicketing + " Reports:" + totalReports + " Voice:" + totalVoice + " Recordings:" + totalRecordings + " Zones:" + totalZones + " Telemetry:"
|
|||
|
+ totalTelemetry + " Google:" + totalGoogle + /*" US:" + totalUS +*/ " OpenStreetMap:" + totalOpenStreetMap + " Arcgis:"
|
|||
|
+ totalArcgis + " Units: " + totalUnits + " Messagebus IP: " + messageBusIP + " Messagebus port: " + messageBusPort
|
|||
|
+ " Database IP: " + DBServer + $" Database schema: {DBSchema} Database user: {DBUser} Database port: {DBPort}");
|
|||
|
}
|
|||
|
|
|||
|
toReturn = true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine("Exception in gateway:getRegistration():" + ex.ToString());
|
|||
|
toReturn = false;
|
|||
|
}
|
|||
|
return toReturn;
|
|||
|
}
|
|||
|
|
|||
|
private void LoadConfig()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
Program.source = new IniConfigSource(CFG_FILE);
|
|||
|
|
|||
|
|
|||
|
if (Program.source.Configs["Registration"] == null)
|
|||
|
Program.source.Configs.Add("Registration");
|
|||
|
|
|||
|
registrationPort = GetInt32Value("Registration", "port", 5680); // Convert.ToInt32(Program.source.Configs["Registration"].Get("port"));
|
|||
|
|
|||
|
|
|||
|
if (Program.source.Configs["Database"] == null)
|
|||
|
Program.source.Configs.Add("Database");
|
|||
|
|
|||
|
serverIP = GetStringValue("Server", "IP", "127.0.0.1");
|
|||
|
|
|||
|
DBcleanUp = GetBooleanValue("Database", "deleteOrphanIMEI", true); // Convert.ToBoolean(source.Configs["Database"].Get("deleteOrphanIMEI"));
|
|||
|
localIP = GetStringValue("Database", "localIP", "");
|
|||
|
|
|||
|
|
|||
|
if (Program.source.Configs["Language"] == null)
|
|||
|
Program.source.Configs.Add("Language");
|
|||
|
|
|||
|
Langidx = GetInt32Value("Language", "Language", 0); // Convert.ToInt32(source.Configs["Language"].Get("Language"));
|
|||
|
|
|||
|
|
|||
|
if (Program.source.Configs["MessageBus"] == null)
|
|||
|
Program.source.Configs.Add("MessageBus");
|
|||
|
|
|||
|
if (Program.source.Configs["Update"] == null)
|
|||
|
Program.source.Configs.Add("Update");
|
|||
|
|
|||
|
autoupdate = GetBooleanValue("Update", "autoupdate", true);
|
|||
|
|
|||
|
if (Program.source.Configs["Update"].Contains("develop"))
|
|||
|
isDevelop = Program.source.Configs["Update"].GetBoolean("develop");
|
|||
|
|
|||
|
GetStringValue("Update", "Version", "1.0.0.2");
|
|||
|
GetBooleanValue("Update", "Enable", true);
|
|||
|
|
|||
|
if (Program.source.Configs["Registration"].Contains("Linx"))
|
|||
|
hideLinxFeatures = !Program.source.Configs["Registration"].GetBoolean("Linx");
|
|||
|
if (MainForm.radioType == RADIOTYPE.LINX || MainForm.radioType == RADIOTYPE.LINXB) hideLinxFeatures = false;
|
|||
|
// save config file
|
|||
|
Program.source.Save();
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Console.WriteLine(e.Message + " " + e.StackTrace + " " + e.Source);
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region tabs load functions
|
|||
|
private void radRibbonBar1_CommandTabSelected(object sender, Telerik.WinControls.UI.CommandTabEventArgs args)
|
|||
|
{
|
|||
|
|
|||
|
lbUnitsRegistation.Visible = args.CommandTab == tabUnits;
|
|||
|
lbsaveNotificationSip.Visible = args.CommandTab == tabUnits && needRestart;
|
|||
|
ddSierraWireless.Visible = ddSierraWireless.Visible = IS_SIERRA_WIRELESS && args.CommandTab == tabUnits;
|
|||
|
currentTab = args.CommandTab;
|
|||
|
if (args.CommandTab == tabUser) LoadUserTab();
|
|||
|
if (args.CommandTab == tabUnits) LoadUnitsTab();
|
|||
|
if (args.CommandTab == tabSystem) LoadSystemTab();
|
|||
|
if (args.CommandTab == tabSettings) LoadSettingsTab();
|
|||
|
if (args.CommandTab == tabGateways) LoadGatewayTab();
|
|||
|
if (args.CommandTab == tabRegistration) LoadRegistrationTab();
|
|||
|
if (args.CommandTab == tabReports) LoadDailyReportTab();
|
|||
|
if (args.CommandTab == tabTicketing) LoadTicketingTab();
|
|||
|
}
|
|||
|
private void LoadRegistrationTab()
|
|||
|
{
|
|||
|
if (registrationControl == null)
|
|||
|
registrationControl = new controlRegistration(db4Registration, totalGateways, totalGPS, totalSMS, totalTicketing, totalReports,
|
|||
|
totalVoice, totalRecordings, totalZones, totalTelemetry,totalGoogle,totalUS,totalOpenStreetMap,totalArcgis);
|
|||
|
|
|||
|
registrationControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
|||
|
registrationControl.OnAppServerRefreshRequest += delegate()
|
|||
|
{
|
|||
|
SendRestart();
|
|||
|
};
|
|||
|
MainPanel.Controls.Clear();
|
|||
|
MainPanel.Controls.Add(registrationControl);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private void LoadDailyReportTab()
|
|||
|
{
|
|||
|
if (db4Reports != null)
|
|||
|
{
|
|||
|
reportControl = new controlReports(db4Reports, db4users);
|
|||
|
reportControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
|||
|
}
|
|||
|
MainPanel.Controls.Clear();
|
|||
|
MainPanel.Controls.Add(reportControl);
|
|||
|
}
|
|||
|
private void LoadUserTab()
|
|||
|
{
|
|||
|
if (db4users != null)
|
|||
|
{
|
|||
|
usrControl = new controlUser(db4users, db4vehs, dbicons, db4settings, db4gateway, db4groups);
|
|||
|
usrControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
|||
|
}
|
|||
|
lbsaveNotificationSip.Visible = needRestart;
|
|||
|
MainPanel.Controls.Clear();
|
|||
|
MainPanel.Controls.Add(usrControl);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
private void LoadUnitsTab()
|
|||
|
{
|
|||
|
numberOfActiveUnits = db4vehs.getActiveVehiclesCount(totalUnits, MainForm.IS_SIERRA_WIRELESS, out totaldbunits);
|
|||
|
lbUnitsRegistation.Text = string.Format(returnLNGString("activeTotalUnits"), numberOfActiveUnits, totaldbunits, totalUnits);
|
|||
|
lbsaveNotificationSip.Visible = needRestart;
|
|||
|
MainPanel.Controls.Clear();
|
|||
|
|
|||
|
if (db4vehs != null)
|
|||
|
{
|
|||
|
unitControl = new controlUnit(db4users, db4vehs, db4groups, dbicons, db4contacts);
|
|||
|
//unitControl.Parent = this;
|
|||
|
unitControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
|||
|
if (selectedVeh != null)
|
|||
|
unitControl.RefreshGrid(selectedVeh);
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
MainPanel.Controls.Add(unitControl);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private void LoadSystemTab()
|
|||
|
{
|
|||
|
MainPanel.Controls.Clear();
|
|||
|
|
|||
|
if (db4vehs != null)
|
|||
|
{
|
|||
|
systemControl = new controlSystem(db4vehs, db4telemetry, db4Alarm, this);
|
|||
|
systemControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
|||
|
}
|
|||
|
|
|||
|
MainPanel.Controls.Add(systemControl);
|
|||
|
}
|
|||
|
private void LoadSettingsTab()
|
|||
|
{
|
|||
|
MainPanel.Controls.Clear();
|
|||
|
|
|||
|
if (db4emailService != null)
|
|||
|
{
|
|||
|
setControl = new controlSettings(DBUser, DBSchema, DBServer, db4emailService, db4Alarm, dbicons, db4settings);
|
|||
|
setControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
|||
|
}
|
|||
|
|
|||
|
MainPanel.Controls.Add(setControl);
|
|||
|
}
|
|||
|
private void LoadGatewayTab()
|
|||
|
{
|
|||
|
MainPanel.Controls.Clear();
|
|||
|
|
|||
|
if (db4gateway != null)
|
|||
|
{
|
|||
|
gatewayControl = new controlGateways(db4gateway, totalGateways, db4Registration);
|
|||
|
gatewayControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
|||
|
}
|
|||
|
lbsaveNotificationSip.Visible = needRestart;
|
|||
|
MainPanel.Controls.Add(gatewayControl);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private void LoadTicketingTab()
|
|||
|
{
|
|||
|
MainPanel.Controls.Clear();
|
|||
|
|
|||
|
if (db4Ticketing != null)
|
|||
|
{
|
|||
|
ticketingControl = new controlTicketing(db4Ticketing);
|
|||
|
ticketingControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
|||
|
}
|
|||
|
|
|||
|
MainPanel.Controls.Add(ticketingControl);
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region users
|
|||
|
private void btnUserAdd_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
Console.WriteLine("User form ; mode = ADD");
|
|||
|
UsersForm uf = new UsersForm(db4users, db4settings,db4gateway);
|
|||
|
uf.FormClosed += new FormClosedEventHandler(uf_FormClosed);
|
|||
|
uf.Show();
|
|||
|
}
|
|||
|
|
|||
|
void uf_FormClosed(object sender, FormClosedEventArgs e)
|
|||
|
{
|
|||
|
if (usrControl.selectedUser != null)
|
|||
|
{
|
|||
|
if (UsersForm.UsersCollection.ContainsKey(usrControl.selectedUser.Id))
|
|||
|
UsersForm.UsersCollection.Remove(usrControl.selectedUser.Id);
|
|||
|
}
|
|||
|
if (currentTab == tabUser)
|
|||
|
LoadUserTab();
|
|||
|
}
|
|||
|
|
|||
|
private void btnUserEdit_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
Console.WriteLine("User form ; mode = EDIT");
|
|||
|
if (usrControl != null && usrControl.selectedUser != null)
|
|||
|
{
|
|||
|
UsersForm uf = UsersForm.GetSingleton(db4users, usrControl.selectedUser);
|
|||
|
uf.FormClosed += new FormClosedEventHandler(uf_FormClosed);
|
|||
|
uf.Show();
|
|||
|
uf.BringToFront();
|
|||
|
if (uf.WindowState == FormWindowState.Minimized)
|
|||
|
uf.WindowState = FormWindowState.Normal;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//RadMessageBox.Show("Select an user first","error!", MessageBoxButtons.OK, RadMessageIcon.Error);
|
|||
|
CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("selfirst"), MainForm.returnLNGString("err"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void btnUserDelete_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (usrControl != null && usrControl.selectedUser != null)
|
|||
|
{
|
|||
|
if (usrControl.selectedUser.UType == USERTYPE.Admin)
|
|||
|
{
|
|||
|
CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("adminUSR"), MainForm.returnLNGString("err"));
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
Int32 countGeo = db4users.countGeofencesForUser(usrControl.selectedUser.Id);
|
|||
|
Int32 countLand = db4users.countLandmarksForUser(usrControl.selectedUser.Id);
|
|||
|
DialogResult dr = CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("deluser"), MainForm.returnLNGString("areyou"), true);
|
|||
|
if (dr == DialogResult.Yes && countLand == 0 && countGeo == 0)
|
|||
|
{
|
|||
|
|
|||
|
db4users.deleteUser(usrControl.selectedUser.UserName);
|
|||
|
db4settings.deleteSettingForUser(usrControl.selectedUser.Id);
|
|||
|
db4gateway.deleteGatewayforUser(usrControl.selectedUser.Id);
|
|||
|
dbpatch.deletePatchFromAdmin(0, usrControl.selectedUser.Id.ToString());
|
|||
|
LoadUserTab();
|
|||
|
}
|
|||
|
else if(dr == DialogResult.Yes)
|
|||
|
{
|
|||
|
PopupForm tmp = new PopupForm(usrControl.selectedUser.UserName ,countGeo, countLand);
|
|||
|
tmp.ShowDialog();
|
|||
|
string user;
|
|||
|
user = tmp.Name;
|
|||
|
if (!String.IsNullOrEmpty(user))
|
|||
|
{
|
|||
|
int idForUSer = db4users.getUserId(user);
|
|||
|
db4users.resetallGeoFenceAndLandmarks(usrControl.selectedUser.Id, idForUSer);
|
|||
|
db4users.deleteUser(usrControl.selectedUser.UserName);
|
|||
|
db4settings.deleteSettingForUser(usrControl.selectedUser.Id);
|
|||
|
db4gateway.deleteGatewayforUser(usrControl.selectedUser.Id);
|
|||
|
dbpatch.deletePatchFromAdmin(0, usrControl.selectedUser.Id.ToString());
|
|||
|
}
|
|||
|
LoadUserTab();
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("selfirst"), MainForm.returnLNGString("err"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region vehicles
|
|||
|
private void btnAddUnit_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (numberOfActiveUnits >= totalUnits)
|
|||
|
{
|
|||
|
CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("maxUnitsReached"), MainForm.returnLNGString("err"));
|
|||
|
return;
|
|||
|
}
|
|||
|
selectedVeh = unitControl.selectedVeh;
|
|||
|
List<User> usrList = db4users.getAllUsers();
|
|||
|
VehiclesForm vf = new VehiclesForm(db4vehs,db4groups,db4gateway, db4Alarm, db4telemetry, usrList,this);
|
|||
|
vf.FormClosed += new FormClosedEventHandler(vf_FormClosed);
|
|||
|
vf.Show();
|
|||
|
}
|
|||
|
|
|||
|
void vf_FormClosed(object sender, FormClosedEventArgs e)
|
|||
|
{
|
|||
|
if (currentTab == tabUnits)
|
|||
|
LoadUnitsTab();
|
|||
|
}
|
|||
|
|
|||
|
private void btnUnitEdit_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (unitControl != null && unitControl.selectedVeh != null)
|
|||
|
{
|
|||
|
List<User> usrList = db4users.getAllUsers();
|
|||
|
VehiclesForm vf;
|
|||
|
selectedVeh = unitControl.selectedVeh;
|
|||
|
if (unitControl.GridViewUnitsList.SelectedRows.Count > 1)
|
|||
|
{
|
|||
|
//VehiclesForm vf = new VehiclesForm(db4vehs, db4groups, db4gateway, usrList, unitControl.parms, this);
|
|||
|
vf = VehiclesForm.GetSingleton(db4vehs, db4groups, db4gateway, usrList, unitControl.parms, this);
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//vf = new VehiclesForm(db4vehs, db4groups,db4gateway, usrList, unitControl.selectedVeh, this);
|
|||
|
vf = VehiclesForm.GetSingleton(db4vehs, db4groups, db4gateway, usrList, unitControl.selectedVeh, this);
|
|||
|
}
|
|||
|
vf.FormClosed += new FormClosedEventHandler(vf_FormClosed);
|
|||
|
vf.Show();
|
|||
|
vf.BringToFront();
|
|||
|
if (vf.WindowState == FormWindowState.Minimized)
|
|||
|
vf.WindowState = FormWindowState.Normal;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void btnUnitDelete_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (unitControl != null)
|
|||
|
{
|
|||
|
selectedVeh = null;
|
|||
|
if (unitControl.GridViewUnitsList.SelectedRows.Count > 1)
|
|||
|
{
|
|||
|
|
|||
|
DialogResult dr = RadMessageBox.Show(MainForm.returnLNGString("aredelList"), MainForm.returnLNGString("areyou"),
|
|||
|
MessageBoxButtons.YesNo, RadMessageIcon.Exclamation);
|
|||
|
if (dr == DialogResult.Yes)
|
|||
|
{
|
|||
|
db4vehs.deleteVehicleList(unitControl.parms.imeiList, unitControl.parms.IdList);
|
|||
|
//MainForm.CallWebServer(MainForm.RestartSipLink);
|
|||
|
MainForm.needRestart = true;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
DialogResult dr = RadMessageBox.Show(MainForm.returnLNGString("aredel"), MainForm.returnLNGString("areyou"),
|
|||
|
MessageBoxButtons.YesNo, RadMessageIcon.Exclamation);
|
|||
|
//CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("aredel"), MainForm.returnLNGString("areyou"), true);
|
|||
|
if (dr == DialogResult.Yes)
|
|||
|
{
|
|||
|
db4vehs.deleteVehicle(unitControl.selectedVeh.Imei);
|
|||
|
//MainForm.CallWebServer(MainForm.RestartSipLink);
|
|||
|
MainForm.needRestart = true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
LoadUnitsTab();
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
private void btnTelemetrySave_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
systemControl.Save();
|
|||
|
DisplayToast(MainForm.returnLNGString("settingSvdSucces"), MainForm.returnLNGString("HTMLsettingSvdSucces"));
|
|||
|
}
|
|||
|
|
|||
|
private void btnSaveSettings4User_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
usrControl.SaveSettings();
|
|||
|
DisplayToast(MainForm.returnLNGString("settingSvdSucces"), MainForm.returnLNGString("HTMLsettingSvdSucces"));
|
|||
|
//SendRestart();
|
|||
|
restartSipProcedure();
|
|||
|
}
|
|||
|
|
|||
|
#region groups
|
|||
|
private void btnGroupAdd_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
//unitControl.AddNewGroup();
|
|||
|
GroupsForm gf = new GroupsForm(unitControl,db4groups, db4gateway, "add");
|
|||
|
gf.Show();
|
|||
|
}
|
|||
|
private void btnGroupEdit_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
//GroupsForm gf = new GroupsForm(unitControl, db4groups, db4gateway, "edit");
|
|||
|
GroupsForm gf = GroupsForm.GetSingleton(unitControl, db4groups, db4gateway, "edit");
|
|||
|
gf.Show();
|
|||
|
gf.BringToFront();
|
|||
|
if (gf.WindowState == FormWindowState.Minimized)
|
|||
|
gf.WindowState = FormWindowState.Normal;
|
|||
|
}
|
|||
|
|
|||
|
private void btnGroupDelete_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
GroupsForm gf = new GroupsForm(unitControl, db4groups, db4gateway, "delete");
|
|||
|
gf.Show();
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
private void btnAddNewGateway_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
//todo: add new gateway in the database
|
|||
|
}
|
|||
|
|
|||
|
private void btnAddNewSafeDispatch_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
//todo: add new SafeDispatch in the database
|
|||
|
}
|
|||
|
|
|||
|
private void btnSaveSettings_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
#region Job Tickets
|
|||
|
private void btnTicketAdd_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
Console.WriteLine("Job Ticketing form ; mode = ADD");
|
|||
|
TicketingForm tf = new TicketingForm(db4Ticketing, db4settings, db4gateway);
|
|||
|
tf.FormClosed += new FormClosedEventHandler(tf_FormClosed);
|
|||
|
tf.Show();
|
|||
|
}
|
|||
|
|
|||
|
void tf_FormClosed(object sender, FormClosedEventArgs e)
|
|||
|
{
|
|||
|
LoadTicketingTab();
|
|||
|
}
|
|||
|
|
|||
|
private void btnTicketEdit_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
Console.WriteLine("Job Ticketing form ; mode = EDIT");
|
|||
|
if (ticketingControl != null && ticketingControl.selectedTicketStatus != null)
|
|||
|
{
|
|||
|
TicketingForm tf = new TicketingForm(db4Ticketing, ticketingControl.selectedTicketStatus);
|
|||
|
tf.FormClosed += new FormClosedEventHandler(tf_FormClosed);
|
|||
|
tf.Show();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//RadMessageBox.Show("Select an user first","error!", MessageBoxButtons.OK, RadMessageIcon.Error);
|
|||
|
CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("tsselfirst"), MainForm.returnLNGString("err"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void btnTicketDelete_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (ticketingControl != null && ticketingControl.selectedTicketStatus != null)
|
|||
|
{
|
|||
|
DialogResult dr = CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("delts"), MainForm.returnLNGString("areyou"), true);
|
|||
|
if (dr == DialogResult.Yes)
|
|||
|
{
|
|||
|
|
|||
|
TicketResponse resp = db4Ticketing.deleteTicketingStatus(ticketingControl.selectedTicketStatus.Status);
|
|||
|
TicketingForm tf = new TicketingForm(db4Ticketing, ticketingControl.selectedTicketStatus);
|
|||
|
if (resp == TicketResponse.alreadyInTransactions)
|
|||
|
CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("tsallintrans"), MainForm.returnLNGString("err"));
|
|||
|
LoadTicketingTab();
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//RadMessageBox.Show("Select an user first", "error!", MessageBoxButtons.OK, RadMessageIcon.Error);
|
|||
|
CustomMessageBox.Show(CustomMessageBoxType.exclamation, MainForm.returnLNGString("selfirst"), MainForm.returnLNGString("err"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void ddSierraWireless_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
|
|||
|
{
|
|||
|
if (!IS_SIERRA_WIRELESS)
|
|||
|
return;
|
|||
|
selectedItemDDSierra = ddSierraWireless.SelectedItem.Text;
|
|||
|
unitControl?.ShowVehs(controlUnit.isCheckboxChecked);
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
//DB cleanup
|
|||
|
private void DB_Cleanup()
|
|||
|
{
|
|||
|
SM.Debug("DB cleanup function!!!!!!!");
|
|||
|
List<SUID_AND_IMEI> list = new List<SUID_AND_IMEI>();
|
|||
|
list = db4vehs.getOrphanImeis();
|
|||
|
foreach (SUID_AND_IMEI obj in list)
|
|||
|
{
|
|||
|
SM.Debug("Imei:" + obj.Imei +" found in DB without a vehicle attached!!!",false);
|
|||
|
vehResponse resp = db4vehs.CleanupSC_ID(obj.Sc_id);
|
|||
|
if (resp == vehResponse.done)
|
|||
|
{
|
|||
|
SM.Debug("Imei:" + obj.Imei + " removed from DB");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
SM.Debug("Imei:" + obj.Imei + " failed to cleanup from DB");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void Main_Shown(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (radioType==RADIOTYPE.HYT)
|
|||
|
{
|
|||
|
/*Theme currentTheme = Telerik.WinControls.ThemeResolutionService.GetTheme("Desert");
|
|||
|
currentTheme.AddColorBlend("BaseColor", HslColor.FromColor(Color.FromArgb(153, 204, 255)));
|
|||
|
Color c1 = Color.Orange;
|
|||
|
Color c2 = Color.FromArgb(c1.A, (int)(c1.R * 0.9), (int)(c1.G * 0.9), (int)(c1.B * 0.9));
|
|||
|
currentTheme.ThemeProperties["BaseColor"] = HslColor.FromColor(c2);*/
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.SYTADMIN64x;
|
|||
|
radRibbonBar1.StartButtonImage = global::SubscriberAndUserManager.Properties.Resources.SYT_admin_mod_2_small;
|
|||
|
//this.BackColor = HyteraColor;
|
|||
|
//MainPanel.BackColor = HyteraColor;
|
|||
|
btnUserAdd.Image = global::SubscriberAndUserManager.Properties.Resources.addNewOR;
|
|||
|
btnAddUnit.Image = global::SubscriberAndUserManager.Properties.Resources.addNewOR;
|
|||
|
//btnGroupAdd.Image = global::SubscriberAndUserManager.Properties.Resources.addNewOR;
|
|||
|
|
|||
|
btnUserEdit.Image = global::SubscriberAndUserManager.Properties.Resources.editNewOR;
|
|||
|
btnUnitEdit.Image = global::SubscriberAndUserManager.Properties.Resources.editNewOR;
|
|||
|
btnGroupEdit.Image = global::SubscriberAndUserManager.Properties.Resources.i_groupsOR;
|
|||
|
|
|||
|
btnUserDelete.Image = global::SubscriberAndUserManager.Properties.Resources.deleteNewOR;
|
|||
|
btnUnitDelete.Image = global::SubscriberAndUserManager.Properties.Resources.deleteNewOR;
|
|||
|
//btnGroupDelete.Image = global::SubscriberAndUserManager.Properties.Resources.deleteNewOR;
|
|||
|
|
|||
|
btnSaveSettings4User.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewOR;
|
|||
|
btnTelemetrySave.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewOR;
|
|||
|
|
|||
|
rbtSaveGateways.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewOR;
|
|||
|
rbtSaveRegistration.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewOR;
|
|||
|
rbtSaveReports.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewOR;
|
|||
|
rbtSaveSettings.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewOR;
|
|||
|
rbtSaveUnits.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewOR;
|
|||
|
}
|
|||
|
|
|||
|
else if (radioType == RADIOTYPE.HARRIS)
|
|||
|
{
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.visionSmall;
|
|||
|
radRibbonBar1.StartButtonImage = global::SubscriberAndUserManager.Properties.Resources.VISIONadminsmall;
|
|||
|
//this.BackColor = HarrisColor;
|
|||
|
//MainPanel.BackColor = HarrisColor;
|
|||
|
btnUserAdd.Image = global::SubscriberAndUserManager.Properties.Resources.addNewGR;
|
|||
|
btnAddUnit.Image = global::SubscriberAndUserManager.Properties.Resources.addNewGR;
|
|||
|
//btnGroupAdd.Image = global::SubscriberAndUserManager.Properties.Resources.addNewGR;
|
|||
|
|
|||
|
btnUserEdit.Image = global::SubscriberAndUserManager.Properties.Resources.editNewGR;
|
|||
|
btnUnitEdit.Image = global::SubscriberAndUserManager.Properties.Resources.editNewGR;
|
|||
|
btnGroupEdit.Image = global::SubscriberAndUserManager.Properties.Resources.i_groupsGR;
|
|||
|
|
|||
|
btnUserDelete.Image = global::SubscriberAndUserManager.Properties.Resources.deleteNewGR;
|
|||
|
btnUnitDelete.Image = global::SubscriberAndUserManager.Properties.Resources.deleteNewGR;
|
|||
|
//btnGroupDelete.Image = global::SubscriberAndUserManager.Properties.Resources.deleteNewGR;
|
|||
|
|
|||
|
btnSaveSettings4User.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGR;
|
|||
|
btnTelemetrySave.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGR;
|
|||
|
|
|||
|
rbtSaveGateways.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGR;
|
|||
|
rbtSaveRegistration.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGR;
|
|||
|
rbtSaveReports.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGR;
|
|||
|
rbtSaveSettings.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGR;
|
|||
|
rbtSaveUnits.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGR;
|
|||
|
}
|
|||
|
|
|||
|
else if (radioType == RADIOTYPE.ATLAS) //ATLASCHANGE
|
|||
|
{
|
|||
|
//Theme currentTheme = Telerik.WinControls.ThemeResolutionService.GetTheme("Office2010Black");
|
|||
|
// Theme currentTheme = Telerik.WinControls.ThemeResolutionService.GetTheme("Office2010Black");
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.ATLASadmin32;
|
|||
|
radRibbonBar1.StartButtonImage = global::SubscriberAndUserManager.Properties.Resources.Atlas_img_32;
|
|||
|
//this.BackColor = HarrisColor;
|
|||
|
//MainPanel.BackColor = HarrisColor;
|
|||
|
btnUserAdd.Image = global::SubscriberAndUserManager.Properties.Resources.addNewGE;
|
|||
|
btnAddUnit.Image = global::SubscriberAndUserManager.Properties.Resources.addNewGE;
|
|||
|
//btnGroupAdd.Image = global::SubscriberAndUserManager.Properties.Resources.addNewGE;
|
|||
|
|
|||
|
btnUserEdit.Image = global::SubscriberAndUserManager.Properties.Resources.editNewGE;
|
|||
|
btnUnitEdit.Image = global::SubscriberAndUserManager.Properties.Resources.editNewGE;
|
|||
|
btnGroupEdit.Image = global::SubscriberAndUserManager.Properties.Resources.i_groupsGE;
|
|||
|
|
|||
|
btnUserDelete.Image = global::SubscriberAndUserManager.Properties.Resources.deleteNewGE;
|
|||
|
btnUnitDelete.Image = global::SubscriberAndUserManager.Properties.Resources.deleteNewGE;
|
|||
|
//btnGroupDelete.Image = global::SubscriberAndUserManager.Properties.Resources.deleteNewGE;
|
|||
|
|
|||
|
btnSaveSettings4User.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGE;
|
|||
|
btnTelemetrySave.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGE;
|
|||
|
|
|||
|
rbtSaveGateways.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGE;
|
|||
|
rbtSaveRegistration.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGE;
|
|||
|
rbtSaveReports.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGE;
|
|||
|
rbtSaveSettings.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGE;
|
|||
|
rbtSaveUnits.Image = global::SubscriberAndUserManager.Properties.Resources.write1NewGE;
|
|||
|
}
|
|||
|
else if (radioType == RADIOTYPE.SIMOCO)
|
|||
|
{
|
|||
|
//Theme currentTheme = Telerik.WinControls.ThemeResolutionService.GetTheme("Office2010Black");
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.simoco_setup_64;
|
|||
|
radRibbonBar1.StartButtonImage = global::SubscriberAndUserManager.Properties.Resources.simoco_setup_24;
|
|||
|
}
|
|||
|
else if (radioType == RADIOTYPE.EXCERA)
|
|||
|
{
|
|||
|
//Theme currentTheme = Telerik.WinControls.ThemeResolutionService.GetTheme("Office2010Black");
|
|||
|
this.Icon = global::SubscriberAndUserManager.Properties.Resources.AXYS_ICON;
|
|||
|
radRibbonBar1.StartButtonImage = global::SubscriberAndUserManager.Properties.Resources.axys_tools_24;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void MainForm_Load(object sender, EventArgs e)
|
|||
|
{
|
|||
|
//if registration is unsuccessfull db4vehs will be null
|
|||
|
if (db4vehs == null)
|
|||
|
return;
|
|||
|
radRibbonBar1.CollapseRibbonOnTabDoubleClick = false;
|
|||
|
lbUnitsRegistation.Text = string.Format(returnLNGString("activeTotalUnits"), numberOfActiveUnits, totaldbunits, totalUnits);
|
|||
|
|
|||
|
LoadUnitsTab();
|
|||
|
|
|||
|
ContextMenu contextMenu = new ContextMenu();
|
|||
|
contextMenu.MenuItems.Add("Check for updates...", (s, e2) => {
|
|||
|
UpdateForm uf = new UpdateForm(App.ADMIN_MODULE, true) { IsDevelop = isDevelop };
|
|||
|
uf.Show();
|
|||
|
});
|
|||
|
contextMenu.MenuItems.Add("Exit", (s, e2) => CloseApp());
|
|||
|
notifyIcon1.ContextMenu = contextMenu;
|
|||
|
|
|||
|
|
|||
|
notifyIcon1.ShowBalloonTip(500);
|
|||
|
|
|||
|
// check for a new version if available
|
|||
|
if (autoupdate)
|
|||
|
CheckForUpdate();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#region UPDATE
|
|||
|
|
|||
|
/// <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()
|
|||
|
{
|
|||
|
App appType = App.ADMIN_MODULE;
|
|||
|
AutoUpdate au = new AutoUpdate(appType) { IsDevelop = isDevelop };
|
|||
|
au.OnNewVersionAvailable += delegate (string version)
|
|||
|
{
|
|||
|
notifyIcon1.Text = "New version available";
|
|||
|
notifyIcon1.ShowBalloonTip(2500, $"{App.GetAppName(appType)} version {version} available",
|
|||
|
$"Press to download and install the latest version of {App.GetAppName(appType)}.", ToolTipIcon.Info);
|
|||
|
notifyIcon1.BalloonTipClicked += delegate (object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (notifyIcon1.Text.Equals("New version available"))
|
|||
|
{
|
|||
|
UpdateForm uf = new UpdateForm(appType, true) { IsDevelop = isDevelop };
|
|||
|
uf.Show();
|
|||
|
}
|
|||
|
};
|
|||
|
};
|
|||
|
// call method to check for new updated
|
|||
|
au.CheckUpdate();
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
|
|||
|
private void CloseApp()
|
|||
|
{
|
|||
|
Process oldProcess = Process.GetCurrentProcess();
|
|||
|
oldProcess.Kill();
|
|||
|
Application.Exit();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public void DisplayToast(String captionText, String contentText)
|
|||
|
{
|
|||
|
// hide alert if already opened
|
|||
|
if (desktopAlertFeedback.IsDisposed || desktopAlertFeedback.IsDisposing)
|
|||
|
desktopAlertFeedback.Hide();
|
|||
|
|
|||
|
desktopAlertFeedback.CaptionText = captionText;
|
|||
|
desktopAlertFeedback.ContentText = contentText;
|
|||
|
desktopAlertFeedback.Show();
|
|||
|
}
|
|||
|
|
|||
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
|||
|
{
|
|||
|
db4users?.CloseConnection();
|
|||
|
|
|||
|
registrationBackgroundWorker?.CancelAsync();
|
|||
|
CallWebServer(RestartSipLink);
|
|||
|
CallWebServer(reloadDataLink);
|
|||
|
}
|
|||
|
|
|||
|
internal static bool needRestart = false;
|
|||
|
internal static bool needReload = false;
|
|||
|
private void btSaveSettings_FakeClick(object sender, EventArgs e)
|
|||
|
{
|
|||
|
DisplayToast(MainForm.returnLNGString("settingSvdSucces"), MainForm.returnLNGString("HTMLsettingSvdSucces"));
|
|||
|
restartSipProcedure();
|
|||
|
}
|
|||
|
|
|||
|
private void rtbRefreshGrid_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
reportControl?.populateList();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
internal void restartSipProcedure()
|
|||
|
{
|
|||
|
if (needRestart)
|
|||
|
CallWebServer(RestartSipLink);
|
|||
|
if (needReload)
|
|||
|
CallWebServer(reloadDataLink);
|
|||
|
needRestart = false;
|
|||
|
needReload = true;
|
|||
|
lbsaveNotificationSip.Visible = false;
|
|||
|
}
|
|||
|
|
|||
|
internal void setVisibleSipRestartNotification()
|
|||
|
{
|
|||
|
needRestart = true;
|
|||
|
needReload = true;
|
|||
|
lbsaveNotificationSip.Visible = true;
|
|||
|
}
|
|||
|
|
|||
|
internal void setVisibleReloadNotification()
|
|||
|
{
|
|||
|
needReload = true;
|
|||
|
lbsaveNotificationSip.Visible = true;
|
|||
|
}
|
|||
|
|
|||
|
public static async void CallWebServer(string address)
|
|||
|
{
|
|||
|
udp.Send(Utils.Convert_text_For_multicast("#0.0#209#1"), Utils.Convert_text_For_multicast("#0.0#209#1").Length);
|
|||
|
//if (MainForm.radioType != RADIOTYPE.SIMOCO)
|
|||
|
await Utils.CallWebServerAsync(address);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Get an int value from the configuration file. The desired value is identifiec by
|
|||
|
/// the key and the header under which is placed is pointed by the header. Also a default
|
|||
|
/// value can be set in case the value doesn't exist and needs to be created before
|
|||
|
/// beeing returned
|
|||
|
/// </summary>
|
|||
|
/// <param name="header">Header unde which the desired config parameter is placed</param>
|
|||
|
/// <param name="key">The Key that designates the desired config parameter</param>
|
|||
|
/// <param name="defaultValue">A default value that will be used and returned in case the
|
|||
|
/// config file doesn't have a value for the parameter</param>
|
|||
|
/// <returns>Parameter value from the config file, or the default value in case it doesn't
|
|||
|
/// exist</returns>
|
|||
|
private Int32 GetInt32Value(String header, String key, Int32 defaultValue)
|
|||
|
{
|
|||
|
if (!Program.source.Configs[header].Contains(key))
|
|||
|
Program.source.Configs[header].Set(key, defaultValue);
|
|||
|
|
|||
|
return Program.source.Configs[header].GetInt(key);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Get a string value from the configuration file. The desired value is identifiec by
|
|||
|
/// the key and the header under which is placed is pointed by the header. Also a default
|
|||
|
/// value can be set in case the value doesn't exist and needs to be created before
|
|||
|
/// beeing returned
|
|||
|
/// </summary>
|
|||
|
/// <param name="header">Header unde which the desired config parameter is placed</param>
|
|||
|
/// <param name="key">The Key that designates the desired config parameter</param>
|
|||
|
/// <param name="defaultValue">A default value that will be used and returned in case the
|
|||
|
/// config file doesn't have a value for the parameter</param>
|
|||
|
/// <returns>Parameter value from the config file, or the default value in case it doesn't
|
|||
|
/// exist</returns>
|
|||
|
private String GetStringValue(String header, String key, String defaultValue)
|
|||
|
{
|
|||
|
if (!Program.source.Configs[header].Contains(key))
|
|||
|
Program.source.Configs[header].Set(key, defaultValue);
|
|||
|
|
|||
|
return Program.source.Configs[header].GetString(key);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Get a boolean value from the configuration file. The desired value is identifiec by
|
|||
|
/// the key and the header under which is placed is pointed by the header. Also a default
|
|||
|
/// value can be set in case the value doesn't exist and needs to be created before
|
|||
|
/// beeing returned
|
|||
|
/// </summary>
|
|||
|
/// <param name="header">Header unde which the desired config parameter is placed</param>
|
|||
|
/// <param name="key">The Key that designates the desired config parameter</param>
|
|||
|
/// <param name="defaultValue">A default value that will be used and returned in case the
|
|||
|
/// config file doesn't have a value for the parameter</param>
|
|||
|
/// <returns>Parameter value from the config file, or the default value in case it doesn't
|
|||
|
/// exist</returns>
|
|||
|
private Boolean GetBooleanValue(String header, String key, Boolean defaultValue)
|
|||
|
{
|
|||
|
if (!Program.source.Configs[header].Contains(key))
|
|||
|
Program.source.Configs[header].Set(key, defaultValue);
|
|||
|
|
|||
|
return Program.source.Configs[header].GetBoolean(key);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//public enum RADIOTYPE
|
|||
|
//{
|
|||
|
// MOTO = 0,
|
|||
|
// HYT = 1,
|
|||
|
// HARRIS = 2,
|
|||
|
// ATLAS = 3,
|
|||
|
// TETRA =4,
|
|||
|
// UNKNOWN = 5,
|
|||
|
// CONECTPLUS =6,
|
|||
|
// REPEATER_TRBO = 7,
|
|||
|
// SIMOCO = 8,
|
|||
|
// LINX = 9,
|
|||
|
// LINXB = 10,
|
|||
|
// EXCERA = 11,
|
|||
|
//}
|
|||
|
}
|