/// <summary> /// 监控平台加载器,轮询加载,直到成功 /// </summary> /// <param name="loginInfo"></param> private void LoginThread(Object loginInfoObj) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.LoginThread()."); try { IvsLoginInfo loginInfo = loginInfoObj as IvsLoginInfo; while (!loadResult) { if (loginInfo == null) { logEx.Error("loginInfoObj is Null."); return; } //等待ivs sdk事件回调结束,再调用sdk接口,否则调用失败 Thread.Sleep(1000); logEx.Trace("Call ivsSdkClient.Login({0},{1},{2},******).", loginInfo.Ip, loginInfo.Port, loginInfo.User); //登陆 int result = this.ivsSdkClient.Login(loginInfo.Ip, loginInfo.Port, loginInfo.User, loginInfo.Pwd); if (result != CgwConst.IVS_SDK_SUCCESS_TAG) { logEx.Error("Login to ivs monitor failed.Monitor id:{0}.ip:{1}, port:{2}, user:{3}.ivs sdk error code:{4}.", this.monitorId, loginInfo.Ip, loginInfo.Port, loginInfo.User, result); //登陆失败,等待1分钟后再次尝试登陆 Thread.Sleep(CgwConst.RELOAD_MONITOR_WAIT_TIME); loadResult = false; continue; } else { logEx.Info("Login to ivs monitor success.Monitor id:{0}.ip:{1}, port:{2}, user:{3}.", this.monitorId, loginInfo.Ip, loginInfo.Port, loginInfo.User); loadResult = true; } this.GetAllCamerasTimer(null, null); //启动定时器 this.updateCameraTimer.Start(); } } catch (System.Exception ex) { logEx.Error("Load IVS monitor failed. Exception message:{0}.", ex.Message); } }
/// <summary> /// sdk回调函数,用于重连 /// </summary> /// <param name="iEventType">事件类型</param> /// <param name="pEventBuf"> 数据</param> /// <param name="uiBufSize">buf长度</param> /// <param name="pUserData">用户数据,自定义,相应回调函数被调用时返回该参数</param> public void IvsEventCallBackFunc(int iEventType, IvsUserOfflineOff pEventBuf, UInt32 uiBufSize, string pUserData) { if (10019 == iEventType || 10301 == iEventType)//用户下线通知、客户端登录失败 { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); IvsLoginInfo loginInfo = new IvsLoginInfo(); loginInfo.Ip = ip; loginInfo.Port = int.Parse(port); loginInfo.User = user; //loginInfo.Pwd = password; loginInfo.Pwd = CommonFunction.DecryptByte2Str(pwdByte, CgwConst.PASSWORD_TAG); logEx.Info("IvsEventCallBackFunc.user ={0}.", user); //使用线程轮询加载监控平台 Thread loaderThread = new Thread(LoginThread); loaderThread.IsBackground = true; loaderThread.Start(loginInfo); } }
/// <summary> /// 初始化IVS监控平台 /// </summary> /// <param name="monitorConfigElement">监控平台配置节点</param> /// <returns></returns> public SmcErr Load(XmlElement monitorConfigElement) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Info("Enter: IvsVideoMonitor.Load()."); SmcErr err = new CgwError(); try { //解析xml节点,获取所需参数 this.monitorId = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.ID_TAG); ip = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.IP_TAG); port = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PORT_TAG); user = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.USER_TAG); //password = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PASSWORD_TAG); pwdByte = CommonFunction.EncryptStr2Byte(CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PASSWORD_TAG), CgwConst.PASSWORD_TAG); //从配置文件读取的参数要简单判断一下合法性 //初始化之前设置日志路径 logEx.Trace("Call SetLogPath:{0}", ivsLogPath); this.ivsSdkClient.SetLogPath(ivsLogPath); logEx.Trace("Call ivsSdkClient.Init()."); //初始化 int result = this.ivsSdkClient.Init(); if (result != CgwConst.IVS_SDK_SUCCESS_TAG) { //直接将IVS的错误码返回 err.SetErrorNo(CgwError.MONITOR_LOAD_FAILED); logEx.Error("Init ivs monitor failed.Monitor id:{0}.ivs sdk error code:{1}.", this.monitorId, result); return(err); } else { logEx.Info("Init ivs sdk success.Monitor id:{0}", this.monitorId); } //设置监控平台id this.ivsSdkClient.SetId(this.monitorId); this.sdkCallbackFunc = IvsRealPlayCallBackRaw; this.ivsSdkClient.SetRealPlayCBRawCallBackFunc(this.sdkCallbackFunc); //sdk事件回调 this.ivsEventCallBackFunc = IvsEventCallBackFunc; this.ivsSdkClient.SetEventCallBackFunc(this.ivsEventCallBackFunc); IvsLoginInfo loginInfo = new IvsLoginInfo(); loginInfo.Ip = ip; loginInfo.Port = int.Parse(port); loginInfo.User = user; //loginInfo.Pwd = password; loginInfo.Pwd = CommonFunction.DecryptByte2Str(pwdByte, CgwConst.PASSWORD_TAG); loadResult = false; //使用线程轮询加载监控平台 Thread loaderThread = new Thread(LoginThread); loaderThread.IsBackground = true; loaderThread.Start(loginInfo); } catch (Exception e) { err.SetErrorNo(CgwError.MONITOR_CONFIG_FILE_INVALID); logEx.Error("Load ivs monitor failed.Execption message:{0}.", e.Message); return(err); } logEx.Info("Load video monitor success.Monitor id:{0}.", this.monitorId); return(err); }