Example #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();
            }
        }
Example #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();
            }
        }
Example #3
0
        private async Task ReceiveRequestMessage(SenderReceiver senderReceiver)
        {
            if (senderReceiver.Receiver == null)
            {
                throw new ArgumentException("senderReceiver.Receiver must not be null");
            }
            if (senderReceiver.Sender == null)
            {
                throw new ArgumentException("senderReceiver.Writer must not be null");
            }

            var messageFrame = await senderReceiver.Receiver.ReceiveAsync(_disposeCancellationToken).ConfigureAwait(false);

            ReceiveRequestMessage(senderReceiver).ConfigureAwait(false);

            var requestMessage = _messageSerialization.Deserialize(messageFrame.MessageTypeId,
                                                                   messageFrame.RawMessage);

            var worker = _responderWorkerFactory.GetWorkerFor(requestMessage);

            _scheduler.AddWorker(worker, requestMessage, senderReceiver);
        }