public VideoFrame GetFrame(Guid deviceId, Guid vsid)
        {
            ServerConnectionParameters connectionParameters = this._videoServerCache.GetVideoServerConnectionParameters(vsid);

            if (connectionParameters == null)
            {
                return((VideoFrame)null);
            }
            this._log.Debug((object)string.Format("Request to VideoServer DevId={0}", (object)deviceId));
            return(this.GetOrCreateVideoServerClient(vsid, connectionParameters).GetDetectorFrame(deviceId));
        }
        private VideoServerClient GetOrCreateVideoServerClient(Guid vsId, ServerConnectionParameters cp)
        {
            VideoServerClient videoServerClient = this._clients.GetOrAdd(vsId, (Func <Guid, VideoServerClient>)(guid => VideoServerInteraction.CreateAndOpen(cp.Ip, cp.Port)));

            if ((videoServerClient.State == CommunicationState.Faulted || videoServerClient.Endpoint.Address.Uri.Host != cp.Ip || videoServerClient.Endpoint.Address.Uri.Port != cp.Port) && this._clients.TryRemove(vsId, out videoServerClient))
            {
                this.TryCloseClient((ICommunicationObject)videoServerClient);
                videoServerClient = VideoServerInteraction.CreateAndOpen(cp.Ip, cp.Port);
                this._clients.TryAdd(vsId, videoServerClient);
            }
            return(videoServerClient);
        }
        public ServerConnectionParameters GetVideoServerConnectionParameters(Guid vsid)
        {
            string key = vsid.ToString();
            ServerConnectionParameters connectionParameters1 = this._videoServersCache.Get(key, (string)null) as ServerConnectionParameters;

            if (connectionParameters1 != null)
            {
                return(connectionParameters1);
            }
            BcVideoServer bcVideoServer = this.TryLoadVideServer(vsid);

            if (bcVideoServer == null)
            {
                return((ServerConnectionParameters)null);
            }
            ServerConnectionParameters connectionParameters2 = new ServerConnectionParameters(bcVideoServer.Ip, bcVideoServer.Port);

            this._videoServersCache.Set(key, (object)connectionParameters2, (DateTimeOffset)DateTime.Now.AddSeconds(10.0), (string)null);
            return(connectionParameters2);
        }