예제 #1
0
        protected void SendRequestCommand(INetworkCommandAsync command)
        {
            if (_connection == null)
            {
                return;
            }

            _sendCommandQueue.Enqueue(command);
            _sendEvent.Set();
        }
예제 #2
0
        protected void HandleCommandResponse(INetworkCommandAsync response)
        {
            int dummyValue;
            var matchingRequest = _activeRequests.Keys.FirstOrDefault(request => request.MatchingResponse(response));

            // shouldn't happen that it is not present
            if (matchingRequest != null)
            {
                _activeRequests.TryRemove(matchingRequest, out dummyValue);
                matchingRequest.SetResponse(response);
                matchingRequest.Dispose();
            }
        }
예제 #3
0
 void INetworkCommandAsync.SetResponse(INetworkCommandAsync response)
 {
     _response = response;
     _signal.Set();
 }
예제 #4
0
        public bool MatchingResponse(INetworkCommandAsync commandResponse)
        {
            var command = commandResponse as OpenReader;

            return(command != null && command.Type == Type && command.Config == Config);
        }
예제 #5
0
 void INetworkCommandAsync.SetResponse(INetworkCommandAsync response)
 {
     _response = response;
 }
예제 #6
0
        public bool MatchingResponse(INetworkCommandAsync commandResponse)
        {
            var command = commandResponse as CloseReader;

            return(command != null && command.Type == Type);
        }
예제 #7
0
 public Task <INetworkCommandAsync> SendCommandAsync(INetworkCommandAsync command)
 {
     SendRequestCommand(command);
     return(command.AwaitResponseAsync());
 }