Esempio n. 1
0
        public Task HandleEventsLoop()
        {
            isRunning = true;
            while (isRunning)
            {
                using ZFrame receivedFrame = socket.ReceiveFrame();
                byte[]         receivedRawData   = receivedFrame.Read();
                TEvent         engineActionEvent = EventsSerializer.DeserializeEvent <TEvent>(receivedRawData);
                TResponseEvent response          = onEventReceived(engineActionEvent);
                byte[]         responseRawData   = EventsSerializer.SerializeEvent <TResponseEvent>(response);
                socket.Send(new ZFrame(responseRawData));
            }

            return(Task.CompletedTask);
        }
Esempio n. 2
0
        /// <summary>
        ///     Sends an <see cref="TEvent"/> directly, this will not handle receiving events back!
        /// </summary>
        /// <param name="eventData"></param>
        public void SendEvent(TEvent eventData)
        {
            lock (requesterLock)
            {
                byte[] data = EventsSerializer.SerializeEvent <TEvent>(eventData);
                requester.Send(new ZFrame(data), out ZError error);

                if (error == null)
                {
                    return;
                }
                if (!error.Equals(ZError.None))
                {
                    //Error
                }
            }
        }
Esempio n. 3
0
        internal Task DispatchEventsThread()
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                if (EventQueueCount == 0)
                {
                    continue;
                }

                //Dequeue and send the event
                KeyValuePair <TEvent, Action <TResponseEvent> > eventToSend = DeQueueEvent();
                SendEvent(eventToSend.Key);

                //Wait to receive the event
                try
                {
                    ZFrame frame;
                    lock (requesterLock)
                    {
                        frame = requester.ReceiveFrame();
                    }

                    //Should we bother to put in the effort in deserializing the event
                    if (eventToSend.Value != null)
                    {
                        TResponseEvent responseEvent = EventsSerializer.DeserializeEvent <TResponseEvent>(frame.Read());
                        eventToSend.Value.Invoke(responseEvent);
                    }

                    frame.Dispose();
                }
                catch (ZException)
                {
                }
            }

            return(Task.CompletedTask);
        }