public bool funRecieveOneByteToBuf(byte btReBuf) //收到一个字节内容 { bool blRe = false; byte btbuf; lstbt_ReByteBuf.Add(btReBuf); int intReByteCount = lstbt_ReByteBuf.Count; if (intReByteCount <= 0) { } else if (intReByteCount == 1) { btbuf = 0xA5;// 0xA5;接收字头 if (lstbt_ReByteBuf[0] != btbuf) { lstbt_ReByteBuf.Clear(); } } else if (intReByteCount == 2) { btbuf = 0x5A;// 0x5A; if (lstbt_ReByteBuf[1] != btbuf) { lstbt_ReByteBuf.Clear(); } } else if (intReByteCount == 3) //接收随机码 { stu_ReceiProcessVar = new stuWholeCmdBuf(); stu_ReceiProcessVar.bt_RandCode = lstbt_ReByteBuf[2]; stu_ReceiProcessVar.bt4_SID = new byte[4]; } else if (intReByteCount < 8) //接收SID { stu_ReceiProcessVar.bt4_SID[intReByteCount - 4] = lstbt_ReByteBuf[intReByteCount - 1]; } else if (intReByteCount == 11) //接收长度 { long lng1; lng1 = (int)lstbt_ReByteBuf[10]; lng1 = lng1 * 256 + (int)lstbt_ReByteBuf[9]; lng1 = lng1 * 256 + (int)lstbt_ReByteBuf[8]; lng1 = lng1 * 256 + (int)lstbt_ReByteBuf[7]; if (lng1 > 65536) { lstbt_ReByteBuf.Clear(); } else { stu_ReceiProcessVar.intContentLen = (int)lng1; } } else if (intReByteCount == (stu_ReceiProcessVar.intContentLen + 12))//收到最后一个数据 { //校验一帧 int intCrc, intCrc1; intCrc = 0x00; for (int i = 2; i < intReByteCount - 1; i++) { intCrc = intCrc ^ lstbt_ReByteBuf[i]; } intCrc = intCrc % 256; intCrc1 = (int)lstbt_ReByteBuf[intReByteCount - 1]; if (intCrc == intCrc1) //异域校验成功 { // 进入Json命令分解 int intCmdContentLen; intCmdContentLen = stu_ReceiProcessVar.intContentLen; if ((intCmdContentLen > 0) && (intCmdContentLen < 65536)) { m_stuSystemVar.bt4_SID[0] = stu_ReceiProcessVar.bt4_SID[0]; m_stuSystemVar.bt4_SID[1] = stu_ReceiProcessVar.bt4_SID[1]; m_stuSystemVar.bt4_SID[2] = stu_ReceiProcessVar.bt4_SID[2]; m_stuSystemVar.bt4_SID[3] = stu_ReceiProcessVar.bt4_SID[3]; byte[] btbuf1 = new byte[intCmdContentLen]; for (int i = 0; i < intCmdContentLen; i++) { btbuf1[i] = (byte)(lstbt_ReByteBuf[i + 11] ^ stu_ReceiProcessVar.bt_RandCode); } JObject jobre = new JObject(); stu_ReceiProcessVar.bt_ReByteArray = btbuf1; if (funByteContentAnaToJsonObject(btbuf1, ref jobre) == true) { stu_ReceiProcessVar.jobjOneContent = jobre; } lststu_ReceiCmdBuf.Add(stu_ReceiProcessVar); lststu_ReceiCmdBufS.Add(stu_ReceiProcessVar); blRe = true; } } //重新清一帧 lstbt_ReByteBuf.Clear(); } else if (intReByteCount > 50000) //超长 { //重新清一帧 lstbt_ReByteBuf.Clear(); } ///////////////// return(blRe); }
public void funReceiCmdAnalyseScan(GlobalCtrl ctrl) //定时100ms接收到命令解析 用于在中断线程内调用,解析完后,分别生对应的接收命令表 { try { while (true) { if (lststu_ReceiCmdBuf.Count > 0) { string str1; stuWholeCmdBuf mOneCmd = lststu_ReceiCmdBuf[0]; lststu_ReceiCmdBuf.RemoveAt(0); JObject job1 = mOneCmd.jobjOneContent; string strer = job1["receiver"].ToString(); string strName = job1["sender"].ToString(); str1 = JsonConvert.SerializeObject(job1); string str2 = "接收到返回信息"; #region JObject jobCmd = new JObject(); jobCmd.Add(new JProperty("Server", "A5x0")); jobCmd.Add(new JProperty("sender", "CmdServer")); jobCmd.Add(new JProperty("receiver", strer)); JArray jarr = new JArray(); JObject jobbuf = new JObject(); jobbuf.Add(new JProperty("", "")); jarr.Add(jobbuf); jobCmd.Add(new JProperty("", jarr)); string strjsons = JsonConvert.SerializeObject(jobCmd); #endregion if (!str1.Equals(strjsons)) { frmMain.strMessageDispBuf = str2 + str1 + "\r\n"; // gLogWriter.WriteLog(str2, str1); lsts_CmdStrBuf.Clear(); //清空 } string strUser = job1["receiver"].ToString(); //获取本地地址 string strjson = JsonConvert.SerializeObject(job1).ToString(); lsts_Cmduser.Add(strUser); string str4 = "登录命令"; frmMain.strMessageDispBuf = str4 + strjson + "\r\n"; // m_stuSystemVar.intLoginStatus = 1;//用户登录成功 string strJson = ctrl.ReceiveMsgScan(job1); //if (!job1.ToString().Contains("Server")) //{ // strJson = ctrl.ReceiveMsgScan(job1); //} if (!string.IsNullOrEmpty(strJson)) { funSendOneFramCmd(strJson); } // m_stuSystemVar.intLoginStatus = ctrl.LoginStatus;//用户登录成功 } else { break; } } } catch (Exception ex) { Debug.WriteLine("提示:命令解析回传过程中出错,异常信息:" + ex.Message); // throw ex; } return; }
public void funReceiCmdAnalyseScan() //定时100ms接收到命令解析 用于在中断线程内调用,解析完后,分别生对应的接收命令表 { try { while (true) { if (lststu_ReceiCmdBuf.Count > 0) { string str1; stuWholeCmdBuf mOneCmd = new stuWholeCmdBuf(); mOneCmd = lststu_ReceiCmdBuf[0]; lststu_ReceiCmdBuf.RemoveAt(0); JObject job1 = mOneCmd.jobjOneContent; str1 = JsonConvert.SerializeObject(mOneCmd.jobjOneContent); string str2 = "接收用户发送的信息"; frmMainMo.strMonitorDisBuf = str2 + str1 + "\r\n"; gLogWriter.WriteLog(str2, str1); if ((job1.Property("seq") != null) && (job1.Property("cmdType") != null) && (job1.Property("cmdAction") != null) && (job1.Property("sender") != null) && (job1.Property("receiver") != null) && (job1.Property("paramList").Count > 0)) { #region 系统 SYS_1 if (job1["cmdType"].ToString() == "1") { #region 用户登录 if (job1["cmdAction"].ToString() == "Login") { //1)提取用户名,密码,发送地址 string struser = job1["paramList"][0]["username"].ToString(); //账号 strMoinitor.Add(struser); //存储用户名 string Password = job1["paramList"][0]["password"].ToString(); //密码 string MoUser = job1["receiver"].ToString(); //需要发送到的地址 //2)检验登录的用户名与密码是否正确 if ((struser == "admin" || struser == "lisi" || struser == "zhangsan") && (Password == "admin123")) { //依次给每一个连接用户名, if ((frmMainMo.C_myServer.g_lstConnectMonitorTab.Count == 1) && (frmMainMo.C_myServer.g_lstConnectMonitorTab[0].strLoginUserName == "")) { frmMainMo.C_myServer.g_lstConnectMonitorTab[0].strLoginUserName = struser;//给用户名 LoadUserUpdateByConnectImf(frmMainMo.C_myServer.g_lstConnectMonitorTab[0].ipaEndIP.ToString(), frmMainMo.C_myServer.g_lstConnectMonitorTab[0].intEndPort, struser); } else if ((frmMainMo.C_myServer.g_lstConnectMonitorTab.Count == 2) && (frmMainMo.C_myServer.g_lstConnectMonitorTab[1].strLoginUserName == "")) { frmMainMo.C_myServer.g_lstConnectMonitorTab[1].strLoginUserName = struser; LoadUserUpdateByConnectImf(frmMainMo.C_myServer.g_lstConnectMonitorTab[1].ipaEndIP.ToString(), frmMainMo.C_myServer.g_lstConnectMonitorTab[1].intEndPort, struser); } else if ((frmMainMo.C_myServer.g_lstConnectMonitorTab.Count == 3) && (frmMainMo.C_myServer.g_lstConnectMonitorTab[2].strLoginUserName == "")) { frmMainMo.C_myServer.g_lstConnectMonitorTab[2].strLoginUserName = struser; LoadUserUpdateByConnectImf(frmMainMo.C_myServer.g_lstConnectMonitorTab[2].ipaEndIP.ToString(), frmMainMo.C_myServer.g_lstConnectMonitorTab[2].intEndPort, struser); } CheckStaus(struser); //3)返回登录成功命令 Cmd_IRCamPaletteOpt_OK("OK", 1, struser);//返回登录成功命令 } else { Cmd_IRCamPaletteOpt_OK("Out", 1, struser);//返回登录成功命令 } } #endregion #region 退出用户 else if (job1["cmdAction"].ToString() == "Logout") { // string username = job1["paramList"][0]["username"].ToString();//获取需要下线的用户名/// string username = job1["sender"].ToString(); CheckStaus(username);//返回告诉发送端收到了命令 for (int i = 0; i < frmMainMo.C_myServer.g_lstConnectMonitorTab.Count; i++) { if (frmMainMo.C_myServer.g_lstConnectMonitorTab[i].strLoginUserName == username) { Cmd_IRCamPaletteOpt_listOut(username);//返回命令 string str6 = frmMainMo.C_myServer.g_lstConnectMonitorTab[i].ipaEndIP.ToString(); string str7 = frmMainMo.C_myServer.g_lstConnectMonitorTab[i].intEndPort.ToString(); int int7 = Convert.ToInt32(str7); frmMainMo.mGuiSysOppt.funForceDisOneMonitorConnect(str6, int7, username); } } } #endregion #region 心跳 else if (job1["cmdAction"].ToString() == "Palpitate") { string strUser = job1["sender"].ToString(); string str = "心跳成功"; CheckStaus(strUser); Cmd_IRCamPaletteOpt_Palpitate(strUser, str);//返回心跳命令 } #endregion #region 启停止巡检 //启停止巡检_CruiseSet//查询巡检状态_CruiseStateGet//状态查询_ObjStateGet//监控头重启_MonDevRestart else if ((job1["cmdAction"].ToString() == "CruiseSet") || (job1["cmdAction"].ToString() == "CruiseStateGet") || (job1["cmdAction"].ToString() == "ObjStateGet") || (job1["cmdAction"].ToString() == "MonDevRestart")) { string strDizhi = job1["sender"].ToString(); string MoUser = job1["receiver"].ToString();//获取命令转发的用户名 for (int j = 0; j < frmMainMo.C_myServer.g_lstConnectMonitorTab.Count; j++) { string strdi = frmMainMo.m_ClJsonCtrl.StrUserdizhi[j]; //获取监控地址 if (strdi == MoUser) //判断命令中的地址是否存在于在线的客户端 { lstintUserOut = 1; //1表示地址存在,0表示不存在 string strjson = JsonConvert.SerializeObject(job1); //获取命令 lststu_ReceiStrCmd.Add(strjson); frmMainMo.m_ClJsonCtrl.funreciCmdMonitor(MoUser); //转发 lststu_ReceiStrCmd = new List <string>(); //清空 } } if (lstintUserOut == 1) { lstintUserOut = 0; } else { string str = "地址不在线!!!"; Cmd_IRCamPaletteOpt_OUT(str, strDizhi);//返回地址不存在命令 } } #endregion } #endregion #region 云台 else if (job1["cmdType"].ToString() == "2") { if ((job1["cmdAction"].ToString() == "PTZMove") || (job1["cmdAction"].ToString() == "PTZMoveAngleSet") || (job1["cmdAction"].ToString() == "PrePosSet") || (job1["cmdAction"].ToString() == "PrePosInvoke") || (job1["cmdAction"].ToString() == "PTZAngleGet") || (job1["cmdAction"].ToString() == "PTZInit")) { string strDizhi = job1["sender"].ToString(); string MoUser = job1["receiver"].ToString();//获取命令转发的用户名 for (int j = 0; j < frmMainMo.m_ClJsonCtrl.StrUserdizhi.Count; j++) { string strdi = frmMainMo.m_ClJsonCtrl.StrUserdizhi[j]; //获取监控地址 if (strdi == MoUser) //判断命令中的地址是否存在于在线的客户端 { lstintUserOut = 1; //1表示地址存在,0表示不存在 string strjson = JsonConvert.SerializeObject(job1); //获取命令 lststu_ReceiStrCmd.Add(strjson); frmMainMo.m_ClJsonCtrl.funreciCmdMonitor(MoUser); //转发 lststu_ReceiStrCmd = new List <string>(); //清空 } } if (lstintUserOut == 1) { lstintUserOut = 0; } else { string str = "地址不在线!!!"; Cmd_IRCamPaletteOpt_OUT(str, strDizhi);//返回地址不存在命令 } } } #endregion #region 可见光 else if (job1["cmdType"].ToString() == "3") { //手动变焦_ZoomOpt//直接变焦位置_ZoomPosSet//变焦位置查询_ZoomPosGet//存图_SaveImg if ((job1["cmdAction"].ToString() == "ZoomOpt") || (job1["cmdAction"].ToString() == "ZoomPosSet") || (job1["cmdAction"].ToString() == "ZoomPosGet") || (job1["cmdAction"].ToString() == "SaveImg")) { string strDizhi = job1["sender"].ToString(); string MoUser = job1["receiver"].ToString();//获取命令转发的用户名 for (int j = 0; j < frmMainMo.m_ClJsonCtrl.StrUserdizhi.Count; j++) { string strdi = frmMainMo.m_ClJsonCtrl.StrUserdizhi[j]; //获取监控地址 if (strdi == MoUser) //判断命令中的地址是否存在于在线的客户端 { lstintUserOut = 1; //1表示地址存在,0表示不存在 string strjson = JsonConvert.SerializeObject(job1); //获取命令 lststu_ReceiStrCmd.Add(strjson); frmMainMo.m_ClJsonCtrl.funreciCmdMonitor(MoUser); //转发 lststu_ReceiStrCmd = new List <string>(); //清空 } } if (lstintUserOut == 1) { lstintUserOut = 0; } else { string str = "你选择地址不在线!!!"; Cmd_IRCamPaletteOpt_OUT(str, strDizhi);//返回地址不存在命令 } } } #endregion #region 红外控制 else if (job1["cmdType"].ToString() == "4") { //手动聚焦_ManualFocus//自动聚焦_AutoFocus//直接聚焦位置_FocusPosSet/聚焦位置查询_FocusPosGet/色板设置_PaletteSet//数字变焦设置_DigZoomSet //数字变焦获取_DigZoomGet//调节模式_AdjustModeSet//手动调节_ManualAdjustSet//红外热图保存_SaveIRHotImg//存视频图_SaveVideoImg if ((job1["cmdAction"].ToString() == "ManualFocus") || (job1["cmdAction"].ToString() == "AutoFocus") || (job1["cmdAction"].ToString() == "FocusPosSet") || (job1["cmdAction"].ToString() == "FocusPosGet") || (job1["cmdAction"].ToString() == "PaletteSet") || (job1["cmdAction"].ToString() == "DigZoomSet") || (job1["cmdAction"].ToString() == "DigZoomGet") || (job1["cmdAction"].ToString() == "AdjustModeSet") || (job1["cmdAction"].ToString() == "ManualAdjustSet") || (job1["cmdAction"].ToString() == "SaveIRHotImg") || (job1["cmdAction"].ToString() == "SaveVideoImg")) { string strDizhi = job1["sender"].ToString(); string MoUser = job1["receiver"].ToString();//获取命令转发的用户名 for (int j = 0; j < frmMainMo.m_ClJsonCtrl.StrUserdizhi.Count; j++) { string strdi = frmMainMo.m_ClJsonCtrl.StrUserdizhi[j]; //获取监控地址 if (strdi == MoUser) //判断命令中的地址是否存在于在线的客户端 { lstintUserOut = 1; //1表示地址存在,0表示不存在 string strjson = JsonConvert.SerializeObject(job1); //获取命令 lststu_ReceiStrCmd.Add(strjson); frmMainMo.m_ClJsonCtrl.funreciCmdMonitor(MoUser); //转发 lststu_ReceiStrCmd = new List <string>(); //清空 } } if (lstintUserOut == 1) { lstintUserOut = 0; } else { string str = "你选择地址不在线!!!"; Cmd_IRCamPaletteOpt_OUT(str, strDizhi);//返回地址不存在命令 } } } #endregion #region 红外分析 else if (job1["cmdType"].ToString() == "5") { #region //辐射率设置EmissivitySet/辐射率读取EmissivityGet/反射温度设置RefTempSet/反射温度读取RefTempGet/空气温度设置AirTempSet/空气温度读取AirTempGet/空气湿度设置AirHumSet //空气湿度读取AirHumGet/距离设置DistanceSet/距离读取DistanceGet/窗口温度设置WinTempSet /窗口温度读取WinTempGet/窗口穿透率设置WinTrmRateSet/窗口穿透率读取WinTrmRateGet //查当前测温状态AnaStateGet/清除所有测温点AnaClearAll/点温位置设置AnaSpotPosSet/点温位置读取AnaSpotPosGet/点温参数设置AnaSpotParamSet/点温参数读取AnaSpotParamGet //点温度获取AnaSpotTempGet/线温位置设置AnaLinePosSet/线温位置读取AnaLinePosGet/线温参数设置AnaLineParamSet/线温参数读取AnaLineParamGet/线温获取AnaLineTempGet/矩形测温位置设置AnaAreaPosSet //矩形测温位置读取AnaAreaPosGet/矩形测温参数设置AnaAreaParamSet/矩形温参数获取AnaAreaParamGet/矩形测温温度获取AnaAreaTempGet/多边形温位置设置AnaPolyPosSet/多边形温位置读取AnaPolyPosGet //多边形温参数设置AnaPolyParamSet/多边形温参数获取AnaPolyParamGet/多边形测温温度获取AnaPolyTempGet/圆形温位置设置AnaCirclePosSet/读圆形温位置AnaCirclePosGet/圆形温参数AnaCircleParamSet //读圆形温参数AnaCircleParamGet/读圆形温AnaCircleTempGet #endregion if ((job1["cmdAction"].ToString() == "EmissivitySet") || (job1["cmdAction"].ToString() == "EmissivityGet") || (job1["cmdAction"].ToString() == "RefTempSet") || (job1["cmdAction"].ToString() == "RefTempGet") || (job1["cmdAction"].ToString() == "AirTempSet") || (job1["cmdAction"].ToString() == "AirTempGet") || (job1["cmdAction"].ToString() == "AirHumSet") || (job1["cmdAction"].ToString() == "AdjustModeSet") || (job1["cmdAction"].ToString() == "ManualAdjustSet") || (job1["cmdAction"].ToString() == "AirHumGet") || (job1["cmdAction"].ToString() == "DistanceSet") || (job1["cmdAction"].ToString() == "DistanceGet") || (job1["cmdAction"].ToString() == "WinTempSet") || (job1["cmdAction"].ToString() == "WinTempGet") || (job1["cmdAction"].ToString() == "WinTrmRateSet") || (job1["cmdAction"].ToString() == "WinTrmRateGet") || (job1["cmdAction"].ToString() == "AnaStateGet") || (job1["cmdAction"].ToString() == "AnaClearAll") || (job1["cmdAction"].ToString() == "AnaSpotPosSet") || (job1["cmdAction"].ToString() == "AnaSpotPosGet") || (job1["cmdAction"].ToString() == "AnaSpotParamSet") || (job1["cmdAction"].ToString() == "AnaSpotParamGet") || (job1["cmdAction"].ToString() == "AnaSpotTempGet") || (job1["cmdAction"].ToString() == "AnaLinePosSet") || (job1["cmdAction"].ToString() == "AnaLinePosGet") || (job1["cmdAction"].ToString() == "AnaLineParamSet") || (job1["cmdAction"].ToString() == "AnaLineTempGet") || (job1["cmdAction"].ToString() == "AnaLineParamGet") || (job1["cmdAction"].ToString() == "AnaAreaPosSet") || (job1["cmdAction"].ToString() == "AnaAreaPosGet") || (job1["cmdAction"].ToString() == "AnaAreaParamSet") || (job1["cmdAction"].ToString() == "AnaAreaParamGet") || (job1["cmdAction"].ToString() == "AnaAreaTempGet") || (job1["cmdAction"].ToString() == "AnaPolyPosSet") || (job1["cmdAction"].ToString() == "AnaPolyPosGet") || (job1["cmdAction"].ToString() == "AnaPolyParamSet") || (job1["cmdAction"].ToString() == "AnaPolyParamGet") || (job1["cmdAction"].ToString() == "AnaPolyTempGet") || (job1["cmdAction"].ToString() == "AnaCirclePosSet") || (job1["cmdAction"].ToString() == "AnaCirclePosGet") || (job1["cmdAction"].ToString() == "AnaCircleParamSet") || (job1["cmdAction"].ToString() == "AnaCircleParamGet") || (job1["cmdAction"].ToString() == "AnaCircleTempGet")) { string strDizhi = job1["sender"].ToString(); string MoUser = job1["receiver"].ToString();//获取命令转发的用户名 for (int j = 0; j < frmMainMo.m_ClJsonCtrl.StrUserdizhi.Count; j++) { string strdi = frmMainMo.m_ClJsonCtrl.StrUserdizhi[j]; //获取监控地址 if (strdi == MoUser) //判断命令中的地址是否存在于在线的客户端 { lstintUserOut = 1; //1表示地址存在,0表示不存在 string strjson = JsonConvert.SerializeObject(job1); //获取命令 lststu_ReceiStrCmd.Add(strjson); frmMainMo.m_ClJsonCtrl.funreciCmdMonitor(MoUser); //转发 lststu_ReceiStrCmd = new List <string>(); //清空 } } if (lstintUserOut == 1) { lstintUserOut = 0; } else { string str = "你选择地址不在线!!!"; Cmd_IRCamPaletteOpt_OUT(str, strDizhi);//返回地址不存在命令 } } } #endregion #region 温湿度 else if (job1["cmdType"].ToString() == "6") { if (job1["cmdAction"].ToString() == "TempHumGet") { string strDizhi = job1["sender"].ToString(); string MoUser = job1["receiver"].ToString();//获取命令转发的用户名 for (int j = 0; j < frmMainMo.m_ClJsonCtrl.StrUserdizhi.Count; j++) { string strdi = frmMainMo.m_ClJsonCtrl.StrUserdizhi[j]; //获取监控地址 if (strdi == MoUser) //判断命令中的地址是否存在于在线的客户端 { lstintUserOut = 1; //1表示地址存在,0表示不存在 string strjson = JsonConvert.SerializeObject(job1); //获取命令 lststu_ReceiStrCmd.Add(strjson); frmMainMo.m_ClJsonCtrl.funreciCmdMonitor(MoUser); //转发 lststu_ReceiStrCmd = new List <string>(); //清空 } } if (lstintUserOut == 1) { lstintUserOut = 0; } else { string str = "你选择地址不在线!!!"; Cmd_IRCamPaletteOpt_OUT(str, strDizhi);//返回地址不存在命令 } } } #endregion } } else { break; } } } catch (Exception ex) { } return; }