Example #1
0
        /// <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);
            }
        }
Example #2
0
        /// <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);
            }
        }
Example #3
0
        /// <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);
        }