コード例 #1
0
        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;
        }
コード例 #2
0
        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);
        }