Esempio n. 1
0
        /// <summary>
        /// Called by <see cref="NetMQPoller"/> when there is an incoming message
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnRequestReceived(object sender, NetMQSocketEventArgs e)
        {
            NetMQMessage requestMessage = null;

            if (!socket.TryReceiveMultipartMessage(ref requestMessage, 5))
            {
                return;
            }

            // Move handling request off NetMQPoller thread and onto TaskPool as soon as possible
            Task.Run(() =>
            {
                if (!messageFactory.IsValidRequestMessage(requestMessage))
                {
                    return;
                }

                var(request, address, requestId, serializerName) = messageFactory.ExtractRequest(requestMessage);

                void SendResponse(object response)
                {
                    var message = messageFactory.CreateResponseMessage(response, address, requestId, serializerName);
                    socket.SendMultipartMessage(message);
                }

                var requestTask = new RequestTask(this, request, SendResponse, SendResponse);

                requestDispatcher.Handle(ref requestTask);
            });
        }
Esempio n. 2
0
 /// <inheritdoc />
 public async Task Raise(CancellationToken cancellationToken = default)
 {
     foreach (var @event in _events)
     {
         await _dispatcher.Handle(@event, cancellationToken);
     }
     _events.Clear();
 }