示例#1
0
        public static string GetMacMsg(byte[] msg, HeartBeatType htype)
        {
            if (msg != null && msg.Length > 0)
            {
                if (htype == HeartBeatType.HANFEN)
                {
                    var msg_str = Encoding.UTF8.GetString(msg);
                    //66ff00ff+ACCF23B87DAB,172.20.10.4
                    var hanfeng = msg_str.Split(new string[] { "+", "," }, StringSplitOptions.RemoveEmptyEntries);
                    if (hanfeng.Length >= 3)
                    {
                        //66ff00ff+ACCF2349A932,192.168.1.150
                        var mac = hanfeng[1].ToLower();
                        return(mac);
                    }
                }
                else if (htype == HeartBeatType.YILIN)
                {
                    var trans_data = StrHelper.GetHexStr(msg);
                    var split_data = trans_data.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

                    var mac_flag = "0079"; ///开始是mac 地址
                                           ///长度6个字节
                    var mac_len = 12;
                    ///心跳包开始标识
                    var heartBeatStart = "55ff";
                    /////表示心跳包
                    //var index_18_len_2 = "ff";
                    trans_data = trans_data.Replace(" ", "");
                    if (trans_data.IndexOf(mac_flag) != -1)
                    {
                        if (trans_data.Length > 20)
                        {
                            var flag_char = trans_data.Substring(18, 2);
                            if (trans_data.StartsWith(heartBeatStart) && flag_char.Equals("ff"))
                            {
                                var index = trans_data.IndexOf(mac_flag);
                                ///mac地址
                                if (trans_data.IndexOf(mac_flag) != -1)
                                {
                                    var start = trans_data.IndexOf(mac_flag) + mac_flag.Length;
                                    if (trans_data.Length >= start && trans_data.Length >= (start + mac_len))
                                    {
                                        var mac = trans_data.Substring(start, mac_len).ToLower();
                                        return(mac);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(string.Empty);
        }
示例#2
0
        /// <summary>
        /// 设备重启
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="info"></param>
        /// <param name="bys"></param>
        private void DEVICE_RESTART(Socket socket, MacIPVersionInfo info, byte[] bys)
        {
            var msg = StrHelper.GetHexStr(bys).Replace(" ", "");

            //0x55 + 0xFF + 0x13 + mac(6B) + CRC
            if (msg.Length == 20)
            {
                var mac = msg.Substring(6, 12);
                LogHelper.LogFilter(true, $"设备重启=>{mac},{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},{msg}");
            }
        }
示例#3
0
        /// <summary>
        /// 汉枫
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="info"></param>
        /// <param name="bys"></param>
        private void HanFengMethod(Socket socket, MacIPVersionInfo info, byte[] bys)
        {
            var ipEnd = (IPEndPoint)socket.RemoteEndPoint;
            var mac   = info.mac;

            if (!string.IsNullOrEmpty(mac))
            {
                Program.upgradeDevice(mac, socket);
            }

            var heartBeatKey = "HeartBeat:" + ipEnd.Address.ToString() + "" + ipEnd.Port;

            if (RedisHelper <string> .IsKeyExist(heartBeatKey) == false)
            {
                var task = new TaskFactory();
                task.StartNew(() =>
                {
                    var ip      = info.IP;
                    var orgText = StrHelper.GetHexStr(bys);


                    if (!string.IsNullOrEmpty(mac) && (mac.Equals("98d8634a034e") || mac.Equals("98d8634a0344") || mac.Equals("98d8638c7fa2")))
                    {
                        LogHelper.LogFilter(true, $"心跳包=>{info.mac},{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
                    }
                    DALMacIPInfo.MacIPInfo_Add(new MacIPInfo()
                    {
                        mac     = info.mac,
                        IP      = ipEnd.Address.ToString(),
                        localip = ip,
                        ssid    = "",
                        OrgText = orgText
                    });
                });
                RedisHelper <string> .StoreOneKey(heartBeatKey, "1", heartbeatTime);
            }
        }
示例#4
0
        /// <summary>
        /// 忆林的
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="info"></param>
        /// <param name="bys"></param>
        private void YiLinMethod(Socket pox, MacIPVersionInfo info, byte[] bys)
        {
            var mac = info.mac;

            if (!string.IsNullOrEmpty(mac))
            {
                Program.upgradeDevice(mac, pox);
            }
            //LogWriteLock.EnterWriteLock();
            //var st = new SocketTime();
            //st.socket = pox;
            //st.time = DateTime.Now;
            //socketMap[mac] = st;
            //LogWriteLock.ExitWriteLock();
            var ipEnd        = (IPEndPoint)pox.RemoteEndPoint;
            var heartBeatKey = "HeartBeat:" + ipEnd.Address.ToString() + "" + ipEnd.Port;


            var key = "Socket.Tcp.SetTime." + mac;

            #region 设置时间
            if (!RedisHelper <string> .IsKeyExist(key))
            {
                Task.Factory.StartNew(() =>
                {
                    try
                    {
                        ///60*60*24
                        RedisHelper <string> .StoreOneKey(key, "1", 86400);
                        var set_time_str   = "55ff00010091010110a1000a0461" + StrHelper.BackTime();
                        var set_time_bytes = CRC16.CRC_XModem(set_time_str);
                        pox.Send(set_time_bytes);
                        Thread.Sleep(50);
                    }
                    catch (SocketException se)
                    {
                        Func <bool> func1 = () => true;
                        var msgx          = "TCP:670:" + se.ErrorCode + " " + se.Message;
                        LogHelper.LogFilter(func1, msgx);
                    }
                });
            }
            #endregion

            #region 设置心跳包
            if (RedisHelper <string> .IsKeyExist(heartBeatKey) == false)
            {
                var task = new TaskFactory();
                task.StartNew(() =>
                {
                    var orgText = StrHelper.GetHexStr(bys);
                    if (!string.IsNullOrEmpty(mac) && (mac.Equals("98d8634a034e") || mac.Equals("98d8634a0344") || mac.Equals("98d8638c7fa2")))
                    {
                        LogHelper.LogFilter(true, $"心跳包=>{mac},{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
                    }
                    DALMacIPInfo.MacIPInfo_Add(new MacIPInfo()
                    {
                        mac     = mac,
                        IP      = ipEnd.Address.ToString(),
                        localip = "",
                        ssid    = "",
                        OrgText = orgText
                    });
                });
                ///缓存2分钟
                RedisHelper <string> .StoreOneKey(heartBeatKey, "1", heartbeatTime);
            }
            else
            {
            }
            #endregion
        }
示例#5
0
        private static void SendMsgToClient(byte[] ds, MacTcpUdp mu)
        {
            var rdata = StrHelper.GetHexStr(ds);
            var mac   = mu.mac;

            if (!string.IsNullOrEmpty(mac))
            {
                if (mac.Equals("98d8634a0344", StringComparison.OrdinalIgnoreCase))
                {
                    LogHelper.LogFilter(true, "返回=>" + rdata);
                }
            }
            else
            {
                mac = string.Empty;
            }
            var bdata = Encoding.UTF8.GetBytes(JsonHelper <Status <string> > .GetJson(new Status <string>()
            {
                code = "1", data = rdata, mac = mac, msg = "", commandType = "1"
            }));
            var queue = mu.clients;
            ///能否正常发通UDP
            var flag = true;

            while (queue != null && queue.Count > 0)
            {
                var el = queue.Dequeue();
                if (el != null && !(el.time.AddSeconds(10) < DateTime.Now))
                {
                    try
                    {
                        if (mu.udpServer != null)
                        {
                            LogHelper.Info("设备mac:" + mac + " 数据" + rdata);
                            var iet = (IPEndPoint)el.point;
                            if (!iet.Address.Equals(IPAddress.Any))
                            {
                                try
                                {
                                    if (flag)
                                    {
                                        mu.udpServer.SendTo(bdata, el.point);
                                    }
                                }
                                catch (SocketException ex)
                                {
                                    flag = false;
                                    queue.Clear();
                                    //LogHelper.Info("TCP:378:   " + ex.Message);

                                    LogHelper.LogFilter(true, ex.StackTrace);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("TCP:395" + ex.Message);


                        //Func<bool> func1 = () => true;
                        //var msgx = "TCP:395" + ex.Message;
                        //LogHelper.LogFilter(func1, msgx);

                        LogHelper.LogFilter(true, ex.StackTrace);
                    }
                }
            }
        }
示例#6
0
        public static MacIPVersionInfo GetHearBeatInfo(byte[] msg)
        {
            HeartBeatType ht = GetMsgType(msg);
            var           mo = new MacIPVersionInfo();

            mo.heartBeatType = ht;
            if (ht == HeartBeatType.HANFEN)
            {
                var mac = string.Empty;
                mo.IP      = GetHANFENIP(msg, out mac);
                mo.mac     = mac;
                mo.version = "";
            }
            else if (ht == HeartBeatType.YILIN)
            {
                var mac = string.Empty;
                mo.IP      = "";
                mo.mac     = GetMacMsg(msg, HeartBeatType.YILIN);
                mo.version = "";
            }
            else if (ht == HeartBeatType.DEFAULT)
            {
                var mac = string.Empty;

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.CMD)
            {
                var mac = string.Empty;

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.BUFANGCHEFANG)
            {
                var mac = string.Empty;

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.CHECK_TIME)
            {
                var mac = string.Empty;
                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.BAOJING)
            {
                var mac = string.Empty;

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.DEVICE_RESTART)
            {
                string mac = string.Empty;
                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.mac           = mac;
                mo.version       = "";
            }
            else if (ht == HeartBeatType.NUANTONG)
            {
                /*
                 * 16) 暖通设备控制支持
                 * 目前暖通控制通过云端执行操作,格式如
                 * 0x55 + 0xFF + 0x11 + mac(6B) +tCount(1B) + [cCount(1B) + command]+ CRC
                 *
                 * tCount:表示有几个指令
                 * []:表示的是指令集,个数由tCount决定, 每个指令为指令长度+指令内容组成;
                 * 云端收到操作后按照指令集依次发送到对应mac设备, 如mac设备离线忽略操作;
                 */

                mo.heartBeatType = ht;
                mo.IP            = "";
                mo.version       = "";


                var str = StrHelper.GetHexStr(msg).Replace(" ", "");

                if (str.Length >= 20)
                {
                    ///mac
                    var mac = str.Substring(6, 12);

                    LogHelper.LogFilter(true, "暖通==>" + str);
                    var tcount = str.Substring(18, 2);
                    var count  = Convert.ToInt32(tcount, 16);
                    //index=14
                    //55ff11 262040589573 01 07 0110660130fc9b
                    //55ff11 262040589573 02 07 0110660130fc9b 78070110660130fc9b78
                    //55ff11 262040589573 02 07 0110660130fc9b 07 0110660130fc9b78
                    var start = 20;
                    for (var i = 0; i < count; i++)
                    {
                        if (start >= str.Length)
                        {
                            break;
                        }
                        var cmdCount = Convert.ToInt32(str.Substring(start, 2).ToLower(), 16);
                        var cmd      = str.Substring(start + 2, cmdCount * 2);
                        mo.listcmd.Add(cmd);
                        start = start + cmdCount * 2 + 2;
                    }
                }
            }

            return(mo);
        }