Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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;
        }