Esempio n. 1
0
        private void ClientOnOnMessageReceived(RpcClient rpcClient1, RPCMessage rpcMessage)
        {
            switch (rpcMessage)
            {
            case RPCResponseMessage responseMessage:
                if (!_messageResponsesHandlers.TryRemove(responseMessage.RequestMessageId, out var value))
                {
                    return;
                }
                value.Message = responseMessage;
                value.Event.Set();
                break;

            case RPCEventMessage eventMessage:
                if (!_previousMessages.TryGetValue(eventMessage.MessageId, out _))
                {
                    _previousMessages.TryAdd(eventMessage.MessageId, null);
                    var edea = EventDataEventArgs.Retrieve(eventMessage.ServiceName, eventMessage.EventName, eventMessage.EventArgs);
                    OnEventReceived?.Invoke(this, edea);
                    EventDataEventArgs.Store(edea);
                }
                break;

            case RPCPushMessage pushMessage:
                if (!_previousMessages.TryGetValue(pushMessage.MessageId, out _))
                {
                    _previousMessages.TryAdd(pushMessage.MessageId, null);
                    var evArgs = ReferencePool <EventArgs <RPCPushMessage> > .Shared.New();

                    evArgs.Item1 = pushMessage;
                    OnPushMessageReceived?.Invoke(this, evArgs);
                    evArgs.Item1 = null;
                    ReferencePool <EventArgs <RPCPushMessage> > .Shared.Store(evArgs);
                }
                break;

            case RPCError errorMessage:
                var respMsg = RPCResponseMessage.Retrieve(errorMessage);
                foreach (var mHandler in _messageResponsesHandlers.ToArray())
                {
                    mHandler.Value.Message = respMsg;
                    mHandler.Value.Event.Set();
                    _messageResponsesHandlers.TryRemove(mHandler.Key, out _);
                }
                break;
            }
        }