using System; using System.Collections.Generic; using System.Text; using System.Net.Sockets; using System.Collections; namespace SafeNetLib { public class Debug { TCPServer tcp; public Debug(int debugPort) { tcp = new TCPServer(); tcp.OnConnectionRecv += new TCPServer.ConnectionRecv(tcp_OnConnectionRecv); tcp.OnMessageRecv += new TCPServer.MessageRecv(tcp_OnMessageRecv); tcp.Start(debugPort); } void tcp_OnConnectionRecv(NetworkStream ns, string IP) { Utils.ConsWrite(DebugMSG_Type.Debug, "Debug client: " + IP); string msg = "Welcome to Connect+GW remote debug.\n" + "Type -i for SUinfo;\n" + "Type -r for Reporting interval;\n" + "Type -gl for last GPS time table;\n" + "Type -g for GPS requests pennding messages;\n"; System.Text.Encoding enc = System.Text.Encoding.ASCII; byte[] buf = enc.GetBytes(msg); tcp.Send(buf, buf.Length, ns); } void tcp_OnMessageRecv(byte[] data, int recv, NetworkStream ns) { String stringData = System.Text.Encoding.ASCII.GetString(data, 0, recv); String usefulData = stringData.Trim(); Utils.ConsWrite(DebugMSG_Type.Debug, "Debug RX:" + usefulData); ProcessRequest(usefulData, ns); } private void ProcessRequest(string request, NetworkStream ns) { string ret = ""; switch (request) { case "-i": { ret = Process_ht_SUInfo(); break; } case "-r": { ret = Process_ht_UnitsInterval(); break; } case "-g": { ret = Process_ht_pendingMsg(); break; } case "-gl": { ret = Process_ht_location_hash(); break; } default: { ret = "Unknown command: " + request; break; } } System.Text.Encoding enc = System.Text.Encoding.ASCII; byte[] buf = enc.GetBytes(ret); tcp.Send(buf, buf.Length, ns); } private string Process_ht_UnitsInterval() { string ret = "Error\n"; try { string temp = "ht_UnitsInterval:\n"; lock (SN_Queues.ht_SUInfo.SyncRoot) { foreach (DictionaryEntry item in SN_Queues.ht_SUInfo) { SUinfo msg = (SUinfo)item.Value; temp += "suid:" + item.Key + "\t interval:" + msg.repInterval + "\n"; } } ret = temp; } catch (Exception ex) { Utils.ConsWrite(DebugMSG_Type.always, "ERROR Process_ht_UnitsIntervalt:\n" + ex.ToString()); ret += " " + ex.ToString(); } return ret; } private string Process_ht_SUInfo() { string ret = "Error\n"; try { string temp = "ht_SUInfo:\n"; lock (SN_Queues.ht_SUInfo.SyncRoot) { foreach (DictionaryEntry item in SN_Queues.ht_SUInfo) { SUinfo msg = (SUinfo)item.Value; temp += "suid:" + msg.suid + "\t ARS:" + msg.ARSon + "\t arsCheckTime:" + msg.arsCheckTime + "\n"; } } ret = temp; } catch (Exception ex) { Utils.ConsWrite(DebugMSG_Type.always, "ERROR Process_ht_SUInfo:\n" + ex.ToString()); ret += " " + ex.ToString(); } return ret; } private string Process_ht_pendingMsg() { string ret = "Error\n"; LOGS.LOG("Debug: LOCK2"); lock (SN_Queues.ht_pendingMsg.SyncRoot) { try { string temp = "ht_pendingMsg:\n"; foreach (DictionaryEntry item in SN_Queues.ht_pendingMsg) { MotoTRBOcmdMsg msg = (MotoTRBOcmdMsg)item.Value; temp += "suid:" + msg.m_suid + "\t m_cmd:" + msg.m_cmd + "\t m_payload:" + msg.m_payload + "\t m_seqID:" + msg.m_seqID + "\t m_time:" + msg.m_time + "\n"; } ret = temp; } catch (Exception ex) { Utils.ConsWrite(DebugMSG_Type.always, "ERROR Process_ht_pendingMsg:\n" + ex.ToString()); ret += " " + ex.ToString() + "\n"; } } LOGS.LOG("Debug: UN-LOCK2"); return ret; } private string Process_ht_location_hash() { string ret = "Error\n"; try { string temp = "ht_location_hash:\n"; lock (SN_Queues.ht_location_hash.SyncRoot) { foreach (DictionaryEntry item in SN_Queues.ht_location_hash) { //MotoTRBOcmdMsg msg = (MotoTRBOcmdMsg)item.Value; temp += "suid:" + item.Key + "\t last GPS at:" + ((DateTime)item.Value).ToString() + "\n"; } } ret = temp; } catch (Exception ex) { Utils.ConsWrite(DebugMSG_Type.always, "ERROR Process_ht_location_hash:\n" + ex.ToString()); ret += " " + ex.ToString() + "\n"; } return ret; } } }