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(); } }
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(); } }