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; } }
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: _previousMessages.GetOrAdd(eventMessage.MessageId, mId => { OnEventReceived?.InvokeAsync(this, new EventDataEventArgs(eventMessage.ServiceName, eventMessage.EventName, eventMessage.EventArgs)); return(null); }); break; case RPCPushMessage pushMessage: _previousMessages.GetOrAdd(pushMessage.MessageId, mId => { OnPushMessageReceived?.InvokeAsync(this, new EventArgs <RPCPushMessage>(pushMessage)); return(null); }); break; case RPCError errorMessage: var respMsg = new RPCResponseMessage { Exception = errorMessage.Exception }; foreach (var mHandler in _messageResponsesHandlers.ToArray()) { mHandler.Value.Message = respMsg; mHandler.Value.Event.Set(); _messageResponsesHandlers.TryRemove(mHandler.Key, out var _); } break; } }