public void Start(CancellationToken cancellationToken) { using (_activeResponder = new ResponseSocket()) { // Bind _activeResponder.Bind(_activeEndPoint); _running = true; while (_running && !cancellationToken.IsCancellationRequested) { try { // Receive byte[] request = _activeResponder.ReceiveFrameBytes(); MessageFrame <THeader, TPayload> messageFrame = MessageSerializer.Deserialize <MessageFrame <THeader, TPayload> >(request); if (ReceiveMessage != null) { MessageFrame <THeader, TPayload> reply = ReceiveMessage(messageFrame.MessageType, messageFrame.Payload); // Do some work Thread.Sleep(1); // Send _activeResponder.SendFrame(MessageSerializer.ObjectToByteArray(reply), false); } } catch (Exception) { if (_running) { throw; } } } } _activeResponder = null; }
public MessageFrame <THeader, TPayload> SendRequest(MessageFrame <THeader, TPayload> requestMessage) { var endPoint = Binding + "://" + _ipAddress + ":" + _tcpPort.ToString(); using (var requester = new RequestSocket(endPoint)) { // Connect requester.Connect(endPoint); // Send requester.SendFrame(ObjectToByteArray(requestMessage), false); // Receive //TODO: Implement time-out byte[] response = requester.ReceiveFrameBytes(); requestMessage = Deserialize <MessageFrame <THeader, TPayload> >(response); requester.Disconnect(endPoint); } return(requestMessage); }