/// <summary>
 /// 1.请求主机房间列表
 /// user:DAJCHSF_Server type:other msg:DAJCHSF_2047DABEF936;8;835;admin$/r$
 /// 2.主机返回房间列表
 /// user:DAJCHSF_2047DABEF936 type:other msg:DAJCHSF_2047DABEF936;835;admin;Zip;H4sIAAAAAAAAAIuuViotTi3KTFGyUlLSUSouSSxJBTJLikpTgdzkjMy8xLzEXJDQs46Jz2e1PF23DSiemZyfB9GQmZuYngrTXZBfDGYaQNgFiUWJSlbVSimpZSX5JYk5QBlDS5AliWmpxaklJZl56TCrasEaSioLUqHa40EGGego+aWWB6Um5xcBeSCFtTrY3Yvm1qfrFj3ta8Xh0KL8/FxDJNcaGhgbmpoYG1iam5iiOJzajupd/nTdEtIcBcRmBjR1VNe8p61rSHaXkampBW0Da13nyxmbSHOUsYmBkTl5jooFAHQFerEIAwAA$/r$
 /// </summary>
 /// <param name="msg">user:DAJCHSF_Server type:other msg:DAJCHSF_2047DABEF936;8;835;admin$/r$</param>
 public static string Host835(string msg)
 {
     try
     {
         if (msg.Split(';').Length >= 3)
         {
             string appUser = msg.Split(';')[0];
             if (appUser.Contains("_"))
             {
                 string           account  = appUser.Split('_')[0];//DAJCHSF,一个家庭可能有多个用户,mac不同,只取账户
                 List <host_room> roomList = null;
                 //获取当前房间的设备列表,先找缓存
                 string msgResult = service.HashGet("Room", account);
                 if (string.IsNullOrEmpty(msgResult))
                 {
                     using (HsfDBContext hsfDBContext = new HsfDBContext())
                     {
                         roomList  = hsfDBContext.host_room.Where(t => t.Account == account && t.DeleteMark == 0).ToList();
                         msgResult = $";835;admin;Zip;{EncryptionHelp.Encryption(JsonConvert.SerializeObject(roomList), true)}$/r$"; //不能缓存用户信息
                                                                                                                                     //缓存当前账户房间列表返回字符串
                         service.HashSet("Room", account, msgResult);
                     }
                 }
                 msgResult = appUser + msgResult;//带上用户信息
                 log.Debug($"835 OK,返回房间列表成功!返回信息:{msgResult}");
                 return(msgResult);
             }
             else
             {
                 log.Debug($"835 Fail,命令不符合规范!");
                 return(null);
             }
         }
         else
         {
             log.Debug($"835 Fail,命令不符合规范!");
             return(null);
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
Exemple #2
0
        public IActionResult Index()
        {
            zCustomUser uu = new zCustomUser() { Gender = 0, Name = "fd" };
            _redisHashService.HashSet("mm", "pp0", uu);
            _redisHashService.HashSet("mm", "pp1", new zCustomUser() { Gender = 1, Name = "官方公告" });
          
            _redisStringService.StringSet("aa", uu);
            string val = _redisStringService.StringGet("aa");
            zCustomUser getuu = _redisHashService.HashGet<zCustomUser>("mm", "pp");

            Log4helper<HomeController>.Info($"进入了{nameof(HomeController)} 的 {nameof(Index)}");
            Log4helper<HomeController>.Errror(new System.Exception("测试Error的写入信息"));
            Log4helper<HomeController>.Debug($"测试Debug写入信息");

            // services.Configure<InterExample>(configuration.GetSection("InterExample"));  //配置为 InterExample 注入对象成功,可以获取对象信息
            // InterExample interExample = (InterExample)HttpContext.RequestServices.GetService(typeof(InterExample));
            _logger.LogError("控制台显示");
            return View();
        }
Exemple #3
0
        //启动监听
        public static async Task LoginStartListenAsync(string ip, string prot, string user, string pwd)
        {
            Console.WriteLine($"使用线程ID:{Thread.CurrentThread.ManagedThreadId}");
            loghelper.loginfo.Info($"使用线程ID:{Thread.CurrentThread.ManagedThreadId}");
            NETClient.Init(disConnectCallBack, IntPtr.Zero, null);          //初始化设置断线回掉

            NETClient.SetAutoReconnect(haveReConnectCallBack, IntPtr.Zero); //设定自动重连

            lLoginID = NETClient.Login(ip, Convert.ToUInt16(prot), user, pwd, EM_LOGIN_SPAC_CAP_TYPE.TCP, IntPtr.Zero, ref device);


            DaHuaSDKHelper daHuaSDK = new DaHuaSDKHelper();

            var alarmdata   = httpHelper.GetAlarmsByHostIP(ip);
            var alarminfo   = daHuaSDK.GetAlarmStatus(lLoginID);
            var onlineinfo  = daHuaSDK.GetConnectionStatus(lLoginID);
            var defenceinfo = daHuaSDK.GetDefenceArmMode(lLoginID);

            lock (locker)
            {
                foreach (var item in alarmdata)
                {
                    AppAlarmStatus appAlarmStatus = new AppAlarmStatus();

                    var der = alarminfo.Where(u => u.Key == item.Channel_ID - 1).FirstOrDefault().Value;
                    if (!string.IsNullOrEmpty(der))    //报警数据导入
                    {
                        appAlarmStatus.IsAlarm = 1;
                    }
                    else
                    {
                        appAlarmStatus.IsAlarm = 0;
                    }
                    //
                    if (onlineinfo.Where(u => u.Key == item.Channel_ID - 1).FirstOrDefault().Key > 0)    //异常数据
                    {
                        appAlarmStatus.IsAnomaly = int.Parse(onlineinfo.Where(u => u.Key == item.Channel_ID - 1).FirstOrDefault().Value);
                    }

                    var defn = defenceinfo.Where(u => u.Key == item.Channel_ID - 1).FirstOrDefault().Value;

                    if (!string.IsNullOrEmpty(defn))
                    {
                        if (defn == EM_DEFENCEMODE.ARMING.ToString())
                        {
                            appAlarmStatus.IsDefence = 1;    //布防
                        }
                        else if (defn == EM_DEFENCEMODE.DISARMING.ToString())
                        {
                            appAlarmStatus.IsDefence = 2;    //撤防
                        }
                        else
                        {
                            appAlarmStatus.IsDefence = -1; //未知
                        }
                    }                                      //布防数据
                    lock (locker)                          //访问http加锁
                    {
                        // var defg = httpHelper.GetAlarmManageStates(item.Alarm_ID).FirstOrDefault();

                        //if (defg != null)
                        //{
                        //    if (defg.TreatmentTimeState != null)//处理状态
                        //    {
                        //        appAlarmStatus.TreatmentState = 0;
                        //    }
                        //    else
                        //    {
                        appAlarmStatus.TreatmentState = 1;
                        //   }
                        // }
                        appAlarmStatus.Channel_ID           = item.Channel_ID;
                        appAlarmStatus.IsOpenDoor           = item.IsOpenOrClosed;//开岗数据
                        appAlarmStatus.LastModificationTime = DateTime.Now.ToString();
                        appAlarmStatus.Alarm_ID             = item.Alarm_ID;
                        appAlarmStatus.AlarmHostIP          = ip;
                    }
                    service.HashSet <AppAlarmStatus>("AlarmStatus_" + item.Alarm_ID, "data", appAlarmStatus);//把数据存到Redis


                    Console.WriteLine($"ip:{ip},通道:{item.Channel_ID},初始化成功!,时间:{appAlarmStatus.LastModificationTime}");
                    loghelper.WriteLog($"ip:{ip},通道:{item.Channel_ID},初始化成功");
                }
            }

            NETClient.SetDVRMessCallBack(messCallBackEx, IntPtr.Zero);//设置报警回掉
            if (IntPtr.Zero != lLoginID)
            {
                bool result = NETClient.StartListen(lLoginID);
                if (result)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine($"IP:{ip}开启监听模式");
                }
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine($"IP:{ip}登陆失败");
            }
        }
Exemple #4
0
        private void MyServer_NewRequestReceived(HansAppSession session, HansRequestInfo requestInfo)
        {
            Task.Run(() =>
            {
                string msg      = requestInfo.Body.StartMark + requestInfo.Body.BodyString + requestInfo.Body.EndMark;//encoding.GetString(requestInfo.Body.BodyBuffer);
                string[] sArray = Regex.Split(msg, "}{", RegexOptions.IgnoreCase);
                for (int i = 0; i < sArray.Length; i++)
                {
                    if (!sArray[i].StartsWith("{"))
                    {
                        sArray[i] = "{" + sArray[i];
                    }
                    int _left  = Regex.Matches(sArray[i], "{").Count;
                    int _right = Regex.Matches(sArray[i], "}").Count;
                    int cha    = _left - _right;
                    for (int b = 0; b < cha; b++)
                    {
                        sArray[i] = sArray[i] + "}";
                    }

                    var res = DynamicJson.Parse(sArray[i]);
                    if (res.IsDefined("code"))
                    {
                        double code = res.code;
                        if (code == 101)
                        {
                            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
                            session.Send("{\"code\":1001,\"res\":0,\"timestamp\": " + Convert.ToInt64(ts.TotalSeconds) + "}");
                            break;
                        }
                        if (code == 010)
                        {
                            session.Send("alive");
                            break;
                        }
                        else
                        {
                            log.Debug($"收到消息: {msg}");
                            switch (code)
                            {
                            case 104:    //{"code":104,"control":2,"id":"010000124b0014c6aaee","ol":true,"ep":1,"pid":260,"did":0,"st":{"on":false}}
                                if (res.IsDefined("control"))
                                {
                                    if (res.control == 2)
                                    {
                                        //缓存设备状态
                                        if (res.ol == true)          //在线
                                        {
                                            if (res.IsDefined("st")) //可能有不存在on的
                                            {
                                                var st = res.st;
                                                if (st.IsDefined("on"))
                                                {
                                                    service.HashSet <string>("DeviceStatus", res.id + "_" + res.ep, st.on.ToString());   //mac_port,
                                                }
                                                else
                                                {
                                                    //在线没有on,但是没有开关状态的情况,默认关闭
                                                    service.HashSet <string>("DeviceStatus", res.id + "_" + res.ep, "False");   //mac_port,
                                                }
                                            }
                                            else
                                            {
                                                //在线没有st,但是没有开关状态的情况,默认关闭
                                                service.HashSet <string>("DeviceStatus", res.id + "_" + res.ep, "False");   //mac_port,
                                            }
                                        }
                                        else
                                        {
                                            service.HashSet <string>("DeviceStatus", res.id + "_" + res.ep, "");   //离线为""
                                        }
                                    }
                                }
                                break;

                            case 1002:
                                if (res.IsDefined("zigbee"))
                                {
                                    Gateway_SessionDic[res.zigbee].Send(sArray[i]);
                                }
                                else
                                {
                                    log.Debug($"请求网关的session不存在 {res.zigbee}: {msg}");
                                }
                                break;

                            case 5001:
                                if (res.IsDefined("zigbee"))
                                {
                                    if (Gateway_SessionDic.ContainsKey(res.zigbee))
                                    {
                                        Gateway_SessionDic[res.zigbee].Send(sArray[i]);
                                    }
                                    else
                                    {
                                        log.Debug($"请求网关的session不存在 {res.zigbee}: {msg}");
                                    }
                                }
                                break;

                            case 501:
                                foreach (var item in res.device)
                                {
                                    //if (item.ol != false && item.st.on != null)
                                    //{
                                    //    service.HashSet<string>("DeviceStatus", item.id + "_" + item.ep, item.st.on.ToString());//mac_port,
                                    //}
                                    //else
                                    //{
                                    //    service.HashSet<string>("DeviceStatus", item.id + "_" + item.ep, "");//离线为""
                                    //}

                                    if (item.ol == true)          //在线
                                    {
                                        if (item.IsDefined("st")) //可能有不存在on的
                                        {
                                            var st = item.st;
                                            if (st.IsDefined("on"))
                                            {
                                                service.HashSet <string>("DeviceStatus", item.id + "_" + item.ep, st.on.ToString());   //mac_port,
                                            }
                                            else
                                            {
                                                //在线没有on,但是没有开关状态的情况,默认关闭
                                                service.HashSet <string>("DeviceStatus", item.id + "_" + item.ep, "False");   //mac_port,
                                            }
                                        }
                                        else
                                        {
                                            //在线没有st
                                            service.HashSet <string>("DeviceStatus", item.id + "_" + item.ep, "False");   //mac_port,
                                        }
                                    }
                                    else
                                    {
                                        service.HashSet <string>("DeviceStatus", item.id + "_" + item.ep, "");   //离线为""
                                    }
                                }
                                break;

                            default:
                                break;
                            }
                        }
                    }
                    else if (res.IsDefined("mac") && res.IsDefined("id"))
                    {
                        //缓存当前socket连接,初次连接心跳之前会收到网关注册信息{"id":"00ff2c2c2c6a6f005979","mac":"2c:6a:6f:00:59:79"}
                        //Func<string, HansAppSession, HansAppSession> dd = (key,oldValue)=>session;
                        //当网关重新连接的时候,ip换了的时候,替换之前的session
                        Gateway_SessionDic.AddOrUpdate(res.id, session, (Func <string, HansAppSession, HansAppSession>)((key, oldValue) => session));

                        service.HashSet <string>("DeviceStatus", res.id + "_13579", "True"); //mac_port,
                                                                                             //网关会自动上传104所有设备状态
                        log.Debug($"收到消息缓存session: {session.RemoteEndPoint} ,网关状态信息: {msg}");
                    }
                    else if (res.IsDefined("lot"))
                    {
                        SmartHome_Session = session;
                        log.Debug($"收到Lot长连接session: {session.RemoteEndPoint} 信息: {msg}");
                    }
                    else
                    {
                        log.Info($"{session.RemoteEndPoint.ToString()} 未识别信息: {sArray[i]}");
                    }
                }
            });
        }