示例#1
0
        public IMessage Request(IMessage requestMessage)
        {
            var sendMessageFrame = _messageFrameCreator.CreateFromMessage(requestMessage);

            _semaphoreRequest.Wait(_cts.Token);
            try
            {
                _messageFrameWriter.WriteMessageFrame(sendMessageFrame);

                var messageFrame    = _messageFrameReceiver.Receive();
                var responseMessage = _messageSerialization.Deserialize(messageFrame.MessageTypeId, messageFrame.RawMessage);
                return(responseMessage);
            }
            finally
            {
                _semaphoreRequest.Release();
            }
        }
示例#2
0
        private void ReceiveLoop(CancellationToken cancellationToken)
        {
            _stopped.Reset();
            _started.SetResult(true);

            try
            {
                while (!cancellationToken.IsCancellationRequested)
                {
                    var messageFrame = _messageFrameReceiver.Receive();

                    IMessage message = null;
                    try
                    {
                        message = _messageSerialization.Deserialize(
                            messageFrame.MessageTypeId,
                            messageFrame.RawMessage);
                    }
                    catch (RedFoxBaseException ex)
                    {
                        Debug.WriteLine(ex);

                        _socketExceptionDelegate(_socket, ex);
                    }

                    FireMessageReceivedEvent(message);
                }
            }
            catch (OperationCanceledException)
            {
            }
            catch (ObjectDisposedException)
            {
            }
            catch (IOException ex)
            {
                _socketExceptionDelegate(_socket, ex);
            }
            finally
            {
                _stopped.Set();
            }
        }