using System; using System.Text; namespace HDL_ON.DriverLayer { public class A_Protocal_Common { public static A_Protocal_Common apc; public A_Protocal_Common() { apc = new A_Protocal_Common(); } /// /// 获取13位时间戳 /// /// 时间 /// long public long Get_time_stamp() { //DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); long t = DateTime.Now.Ticks / 10000; //除10000调整为13位 return t; } /// /// 转换通讯数据 /// public byte[] ConvertSendBodyData(string topic, string bodyDataString) { string topicString = "Topic:" + topic + "/r/n"; byte[] bodyBytes = Encoding.ASCII.GetBytes(bodyDataString); string lenghtString = "Length:" + bodyBytes.Length.ToString() + "/r/n" + "/r/n"; string sendDataString = topicString + lenghtString + bodyDataString; byte[] sendDataBytes = Encoding.ASCII.GetBytes(sendDataString); return sendDataBytes; } /// /// 转换接收到的数据 /// /// public string ConvertReceiveData(byte[] bytes) { string receiveString = ""; string topic = ""; int lenght = 0; var reString = System.Text.Encoding.UTF8.GetString(bytes); var res = reString.Split("/r/n/r/n"); if (res.Length == 2) { var topics = res[0].Split("/r/n"); foreach (var ts in topics) { var key = ts.Split(":"); switch (key[0]) { case "Topic": topic = key[1]; break; case "Lenght": lenght = Convert.ToInt32(key[1]); break; } } switch (topic) { case CommunicationTopic.SearchLoaclGateway: var jt = Newtonsoft.Json.JsonConvert.DeserializeObject(res[1]); if (jt != null) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject(jt.objects.ToString()); //Newtonsoft.Json.Linq.JObject.FromObject(jt.objects); } break; } } return receiveString; } } /// /// 通讯回复数据包 /// public class ResponsePack { public string id; public string code; public string time_stamp; public object objects; } /// /// 通讯主题 /// public static class CommunicationTopic { /// /// 搜索本地网关 /// public const string SearchLoaclGateway = "/user/all/custom/gateway/search"; } }