public void MessageReceived(Message message) { var identifiedMsg = (IdentifiedMessage)message; if (identifiedMsg.resp) { if (_callbackDict.TryGetValue(identifiedMsg.guid, out Action<Message> callback)) { callback(identifiedMsg.innerMessage); _callbackDict.Remove(identifiedMsg.guid); } } else { Message resp = null; if (_reqHandlerDict.TryGetValue(identifiedMsg.InnerMsgType, out IRequestHandler handler)) { resp = handler.MakeResponse(identifiedMsg.innerMessage); } var respWrapper = new IdentifiedMessage() { innerMessage = resp, guid = identifiedMsg.guid, resp = true }; SendMessage(respWrapper); } }
public void Request(Message message, Action<Message> callback) { var identifiedMsg = new IdentifiedMessage(message); while (_callbackDict.ContainsKey(identifiedMsg.guid)) identifiedMsg.guid = Guid.NewGuid(); _callbackDict.Add(identifiedMsg.guid, callback); SendMessage(identifiedMsg); }