예제 #1
0
        /// <summary>
        /// Convert message off the wire from byte[] into a concrete implementation of IIntegrationMessage
        /// delegates to custom extractors and defaults to Json deserialization
        /// </summary>
        private IIntegrationMessage _extractMessage(byte[] messageData, MessageTypeProperties props)
        {
            IIntegrationMessage message;

            if (props.HasCustomExtractor)
            {
                IMessageExtractor extractor = null;
                if (_messageExtractorCache.ContainsKey(props.MessageTypeIdentifier))
                {
                    extractor = _messageExtractorCache[props.MessageTypeIdentifier];
                }
                else
                {
                    extractor = (IMessageExtractor)Activator.CreateInstance(props.Type, true);
                    _messageExtractorCache.Add(props.MessageTypeIdentifier, extractor);
                }
                message = extractor.Extract(messageData);
            }
            else
            {
                //by default the message is json and will be deserialized to the type with a matching MessageTypeIdentifier property:"MessageType"
                var json = Encoding.UTF8.GetString(messageData);
                message = (IIntegrationMessage)JsonConvert.DeserializeObject(json, props.Type, _serializerSettings);
            }
            return(message);
        }
예제 #2
0
 public MessageContext(MessageMetaData meta, IEndpoint endpoint, MessagingService messagingService, MessageTypeProperties props = null)
 {
     MetaData         = meta;
     Endpoint         = endpoint;
     MessagingService = messagingService;
     Props            = props;
 }
예제 #3
0
 public IntegrationMessageFilterContext(IIntegrationMessage message, MessageMetaData meta, IEndpoint endpoint, FilterDirection direction, MessageTypeProperties props)
 {
     Message         = message;
     MessageMetaData = meta;
     Endpoint        = endpoint;
     Direction       = direction;
     Props           = props;
 }
예제 #4
0
        public static void AddMessageType(MessageTypeProperties props)
        {
            var handlingSaga = _sagaTypePropMap.SingleOrDefault(x => x.Value.MessageTypes.Contains(props.Type));

            if (handlingSaga.Key != null)
            {
                props.SagaType = handlingSaga.Key;
            }

            _messageTypeIdentifierPropMap.TryAdd(props.MessageTypeIdentifier, props);
            _messageTypePropMap.TryAdd(props.Type, props);
        }
예제 #5
0
        public static MessageTypeProperties AddMessageType(Type type)
        {
            if (_messageTypePropMap.ContainsKey(type))
            {
                throw new InvalidOperationException($"Duplicate Message Type registered.  MessageType: {type}");
            }

            var message = (IIntegrationMessage)Activator.CreateInstance(type, true);
            var props   = new MessageTypeProperties(type, message.MessageType, _extractorInterface.IsAssignableFrom(type));

            AddMessageType(props);
            return(props);
        }