public void MessageReceived(Message message) { var identifiedMsg = (IdentifiedMessage)message; if (identifiedMsg.resp) { Action <Message> callback; if (_callbackDict.TryGetValue(identifiedMsg.guid, out callback)) { callback(identifiedMsg.innerMessage); _callbackDict.Remove(identifiedMsg.guid); } } else { Message resp = null; IRequestHandler handler; if (_reqHandlerDict.TryGetValue(identifiedMsg.InnerMsgType, out 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); }