private IPassiveMessage ProducePassiveMessageCore(XDocument rawXml, HubContext context, IDictionary <string, string> payloads) { var typeIdentity = _typeDetector.Detecting(rawXml); var typePicker = new TypePicker(context.GetMessageTypes()); var targetType = typePicker.Picking(typeIdentity); if (targetType == null) { Log.Logger.Debug("unrecognized message type. system doesn't register this type: {0}"); return(new AsyncPassiveMessage()); } var message = (WechatPushingMessage)_xmlSerializer.Deserialize(rawXml, targetType); var handlerPicker = new HandlerPicker(context.GetMessageHandlers()); var handler = handlerPicker.Picking(message); if (handler == null) { Log.Logger.Debug("cannot find proper message handler."); return(new AsyncPassiveMessage()); } var messageContext = BuideMessageContext(context, typeIdentity, rawXml, message); var safeHandler = new SafeMessageHandler(handler); return(safeHandler.HandleMessage(message, messageContext)); }
internal PushingHub(HubContext hubContext) { if (hubContext == null) { throw new ArgumentNullException(nameof(hubContext)); } _hubContext = hubContext; MessageTypes = _hubContext.GetMessageTypes(); MessageHandlers = _hubContext.GetMessageHandlers(); Resolver = _hubContext.Resolver; Channel = _hubContext.Channel; }