using System; using System.Collections.Generic; using System.Linq; using System.Text; using SN_Server; using SafeNetLib; using SN_Server.ServerMSGS; using System.Threading; using System.Collections; namespace MotoRepeater_SOC { class MotoRepeater_GW { public static LOGS hLOG; private ServerConnector connector; private QueueManagerThread queueManager; public static UnitList unitList; private WatcherServerThread ddmsWatcher; private LocationThread LocationConnection; private ReceiveSMSThread ReceiveSMSthr = null; private SendSMSThread SendSMSthr = null; public static System.Net.Sockets.UdpClient smsUDPclient = null; private Thread LocationThreadobj = null; private Thread ReceiveSMSThreadobj = null; private Thread SendSMSThreadobj = null; private Thread ServerThreadobjGPS = null; private Thread ServerThreadobjARS = null; private Thread ServerThreadobjSMS = null; private Thread ServerThreadobjPOLL = null; private bool isUnitLoad = false; static void Main(string[] args) { //start file loging!!!!!!! hLOG = new LOGS(); MotoRepeater_GW gw = new MotoRepeater_GW(); Console.ReadKey(); } public MotoRepeater_GW() { string test = "#7#one##7#two##9#three##8#four#"; ArrayList strings = ServerMSG.Split(test, test.Length); foreach (string s in strings) { Console.WriteLine(s); } unitList = new UnitList(); connector = new ServerConnector("97531"); connector.OnNewDataRecv += new ServerConnector.newData4Send(connector_OnNewDataRecv); //staRT ping pong ControlCmdHandler ppHandler = new ControlCmdHandler(connector); //start queue manager StartQueueManager(connector); while (!isUnitLoad) { Console.WriteLine("Waiting for units ...next try in 5 secs"); Thread.Sleep(5000); } //Console.ReadKey(); unitList.Print(); ddmsWatcher = new WatcherServerThread("127.0.0.1", 3000); ddmsWatcher.OnMessageRecv += new WatcherServerThread.MessageRecv(ddmsWatcher_OnMessageRecv); ddmsWatcher.Start(); ddmsWatcher.SubscribeALL(0x2222); // create thread to listen UDP LocationConnection = new LocationThread(4001); //LocationConnection.parent = this; LocationThreadobj = new Thread(new ThreadStart(LocationConnection.HandleConnection)); LocationThreadobj.IsBackground = true; LocationThreadobj.Start(); //SMS smsUDPclient = new System.Net.Sockets.UdpClient(4007); // create thread to listen UDP ReceiveSMSthr = new ReceiveSMSThread(4007); //ARSConnection.parent = this; ReceiveSMSThreadobj = new Thread(new ThreadStart(ReceiveSMSthr.HandleConnection)); ReceiveSMSThreadobj.IsBackground = true; ReceiveSMSThreadobj.Start(); // create thread to listen UDP SendSMSthr = new SendSMSThread(4007); //ARSConnection.parent = this; SendSMSThreadobj = new Thread(new ThreadStart(SendSMSthr.HandleConnection)); SendSMSThreadobj.IsBackground = true; SendSMSThreadobj.Start(); } private void StartQueueManager(ServerConnector connector) { try { queueManager = new QueueManagerThread(connector); //Start GPS server thread ServerThreadobjGPS = new Thread(new ThreadStart(queueManager.HandleConnectionGPS)); ServerThreadobjGPS.IsBackground = true; ServerThreadobjGPS.Start(); Thread.Sleep(200); //Start ARS server thread ServerThreadobjARS = new Thread(new ThreadStart(queueManager.HandleConnectionARS)); ServerThreadobjARS.IsBackground = true; ServerThreadobjARS.Start(); Thread.Sleep(200); //Start SMS server thread ServerThreadobjSMS = new Thread(new ThreadStart(queueManager.HandleConnectionSMS)); ServerThreadobjSMS.IsBackground = true; ServerThreadobjSMS.Start(); Thread.Sleep(200); //Start POLL server thread ServerThreadobjPOLL = new Thread(new ThreadStart(queueManager.HandleConnectionPOLL)); ServerThreadobjPOLL.IsBackground = true; ServerThreadobjPOLL.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 StopQueueManager() { queueManager.Stop(); } void ddmsWatcher_OnMessageRecv(NotifyRespons resp) { if (!resp.Error) { string arsState = (resp.Active) ? "ON" : "OFF"; Console.WriteLine("resp.SUID:" + resp.SUID + " value:" + arsState); //connector.InsertARS(resp.SUID, arsState); if(resp.Active) { PerformeARSon(resp.SUID); } try { ArsMSG ars = new ArsMSG(); ars.imei = resp.SUID; ars.msg = arsState; SN_Queues.arsMsgQueue.PostItem(ars); } catch (Exception e) { Utils.ConsWrite(DebugMSG_Type.always, "Error inserting ARS in Queue"); Utils.ConsWrite(DebugMSG_Type.always, e.Message); } } } void connector_OnNewDataRecv(string str) { try { ServerMSG sm = new ServerMSG(str, str.Length); switch (sm.OPcode) { case 0x7705: { SM_IPList smIP = new SM_IPList(sm); connector.UpdateIPlist(smIP.ipList); break; } case 0x7701: { SM_UnitList smUnit = new SM_UnitList(sm); unitList.Add(smUnit.unit); //unitList.Print(); isUnitLoad = true; break; } case 0x7702: { SM_UnitList smUnit = new SM_UnitList(sm); //TODO //send start GPS trigger Console.WriteLine("[TODO]Must Send start GPS to :" + smUnit.unit.RadioID + " interval" + smUnit.unit.Reporting); break; } case 0x7711: { SN_Server.ServerMSGS.SM_POLLmsg msg = SN_Server.ServerMSGS.SM_GPS.DecodePoll(sm.Payload); SM_GPS.PrintPoll(msg); //check to see if we already have this poll lock (SM_GPS.ht_POLL_List.SyncRoot) { if (!SM_GPS.ht_POLL_List.ContainsKey(msg.DBid)) { //add to poll hashtable SM_GPS.ht_POLL_List.Add(msg.DBid, msg); //add to location que MotoTRBOcmdMsg TRBOmsg = new MotoTRBOcmdMsg(); TRBOmsg.m_cmd = (byte)MotoTRBOcmd.SEND_POLL; TRBOmsg.m_suid = msg.suid; TRBOmsg.m_payload = msg.DBid.ToString(); SN_Queues.locationQueue.PostItem(TRBOmsg); Utils.ConsWrite(DebugMSG_Type.DEV, "Poll for:" + msg.suid + " added to loc queue "); } } SM_GPS.readPOLLQueue.PostItem(msg); break; } case 0x7712: { SM_SMS smSMS = new SM_SMS(sm); SMS msg = new SMS(); msg.Conf = true; msg.RadioID = smSMS.sms.RadioID; msg.Msg = smSMS.sms.Msg; msg.DBid = smSMS.sms.DBid; //check to see if we already sent the message lock (SM_SMS.waitConfSMSList.SyncRoot) { int index = -1; int count = 0; foreach (SMS msgTmp in SM_SMS.waitConfSMSList) { if (msg.DBid == msgTmp.DBid) { index = count; break; } count++; } if (index == -1)//we didn't found the message { Utils.ConsWrite(DebugMSG_Type.DB, "Message added to sendSMSQueue"); LOGS.LOG("@SMS@ " + "Message added to sendSMSQueue"); SM_SMS.sendSMSQueue.PostItem(msg); } else { LOGS.LOG("@SMS@ " + "Message already in SN_Queues.waitConfSMSList .RadioID:" + msg.RadioID + " msg:" + msg.Msg); } } break; } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } private void PerformeARSon(string SUID) { try { int suDBid = MotoRepeater_GW.unitList.GetDBid(SUID); if (suDBid != 0) { //get reporting interval int repInter = unitList.GetReportingInterval(SUID); Utils.ConsWrite(DebugMSG_Type.GPS, "Interval for SUID:" + SUID + " =" + repInter); //create location message!! MotoTRBOcmdMsg msg = new MotoTRBOcmdMsg(); msg.m_cmd = (byte)MotoTRBOcmd.SET_REPORT_INTERVAL; msg.m_suid = SUID; msg.m_payload = "30";// repInter.ToString(); if (repInter != 0) { SN_Queues.locationQueue.PostItem(msg); } else { Utils.ConsWrite(DebugMSG_Type.GPS, "SUID:" + SUID + " interval=0 , no GPS reporting needed."); } } else { Utils.ConsWrite(DebugMSG_Type.GPS, "!!!!!! SUID:" + SUID + " Not found in DB!!!!!!!"); } } catch (Exception ex) { Utils.ConsWrite(DebugMSG_Type.ARS, "SUID:" + SUID + " ERROT in PerformeARSon"); Utils.ConsWrite(DebugMSG_Type.always, ex.ToString()); } } } }