Newer
Older
SensorHub / SensorHub.WasteGas / SewPeriodData.cs
root on 17 Sep 2021 4 KB first commit
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;
        }
    }
}