using System; using System.Text; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; using SensorHub.Servers; using SensorHub.Servers.JsonFormat; using System.Collections.Generic; using Newtonsoft.Json; namespace SensorHub.WasteGas { public class SewPeriodData : CommandBase<WGSession, StringRequestInfo> { public override void ExecuteCommand(WGSession session, StringRequestInfo requestInfo) { try { //SewPeriodData:设备ID,上传时间,CO数据,O2氧气数据,H2S数据,可燃气体数据,液位开关状态\r\n session.Logger.Info("有害气体监测仪数据已经上传!"); string[] bt = requestInfo.Body.Split(','); if (string.IsNullOrEmpty(session.MacID)) { session.MacID = bt[0]; } //对bt[1]进行TEA解密 byte[] dat = strToHexByte(bt[1]); TEA.decrypt(ref dat, dat.Length); string str = System.Text.Encoding.Default.GetString(dat); if (str.IndexOf('\r') >= 0) { str = str.Remove(str.IndexOf('\r')); } string[] decryptbt = str.Split(','); session.Logger.Info("有害气体监测仪:" + bt[0] + "," + str); List<String> eventList = new List<String>(); List<DatasJson> datasList = new List<DatasJson>(); float co = float.Parse(decryptbt[1]); float o2 = float.Parse(decryptbt[2]); float h2s = float.Parse(decryptbt[3]); float ch4 = float.Parse(decryptbt[4]); datasList.Add(new WasteGasDatasJson(decryptbt[0], float.Parse(decryptbt[1]), float.Parse(decryptbt[2]), float.Parse(decryptbt[3]), float.Parse(decryptbt[4]), decryptbt[5] == "0" ? false : true)); DateTime now = DateTime.Now; String logtime = now.ToString("yyyy") + now.ToString("MM") + now.ToString("dd") + now.ToString("HH") + now.ToString("mm") + now.ToString("ss"); DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); //当地时区 long timeStamp = (long)(now - startTime).TotalMilliseconds; //相差毫秒数 //往第三方发送数据 if (datasList != null && datasList.Count > 0) { String message = JsonConvert.SerializeObject(new Json("Data", "WasteGas", bt[0], new DataJson("WasteGasData", -1, datasList, logtime), timeStamp)); if (Common.SendMessage(message)) { session.Logger.Info("往第三方发送数据:" + message); } else { session.Logger.Info("未连接上第三方服务器"); } } //send the success cmd; string sdata0 = "SewPeriodData:success"; byte[] data0 = new byte[sdata0.Length + 2]; Encoding.ASCII.GetBytes(sdata0, 0, sdata0.Length, data0, 0); data0[sdata0.Length] = 0x0D; data0[sdata0.Length + 1] = 0x0A; session.Send(data0, 0, data0.Length); session.Logger.Info("下发回复信息:" + sdata0); } catch (Exception e) { session.Logger.Error("有害气体监测仪数据保存失败!" + e.ToString()); } } /// <summary> /// 字符串转16进制字节数组 /// </summary> /// <param name="hexString"></param> /// <returns></returns> private byte[] strToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += "0"; byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; } } }