コード例 #1
0
        protected override void Load(ContainerBuilder builder)
        {
            // ITransportSettings
            builder.Register(c => new DefaultTransportSettings(this.scheme, HostName, this.port, this.tlsCertificate))
            .As <ITransportSettings>()
            .SingleInstance();

            // ITransportListenerProvider
            builder.Register(c => new AmqpTransportListenerProvider())
            .As <ITransportListenerProvider>()
            .SingleInstance();

            // ILinkHandlerProvider
            builder.Register(
                c =>
            {
                IMessageConverter <AmqpMessage> messageConverter             = new AmqpMessageConverter();
                IMessageConverter <AmqpMessage> twinMessageConverter         = new AmqpTwinMessageConverter();
                IMessageConverter <AmqpMessage> directMethodMessageConverter = new AmqpDirectMethodMessageConverter();
                var identityProvider = c.Resolve <IIdentityProvider>();
                ILinkHandlerProvider linkHandlerProvider = new LinkHandlerProvider(messageConverter, twinMessageConverter, directMethodMessageConverter, identityProvider);
                return(linkHandlerProvider);
            })
            .As <ILinkHandlerProvider>()
            .SingleInstance();

            // Task<AmqpProtocolHead>
            builder.Register(
                async c =>
            {
                var identityFactory                    = c.Resolve <IClientCredentialsFactory>();
                var transportSettings                  = c.Resolve <ITransportSettings>();
                var transportListenerProvider          = c.Resolve <ITransportListenerProvider>();
                var linkHandlerProvider                = c.Resolve <ILinkHandlerProvider>();
                var credentialsCacheTask               = c.Resolve <Task <ICredentialsCache> >();
                var authenticatorTask                  = c.Resolve <Task <IAuthenticator> >();
                var connectionProviderTask             = c.Resolve <Task <IConnectionProvider> >();
                ICredentialsCache credentialsCache     = await credentialsCacheTask;
                IAuthenticator authenticator           = await authenticatorTask;
                IConnectionProvider connectionProvider = await connectionProviderTask;
                var webSocketListenerRegistry          = c.Resolve <IWebSocketListenerRegistry>();
                AmqpSettings amqpSettings              = AmqpSettingsProvider.GetDefaultAmqpSettings(
                    this.iotHubHostName,
                    authenticator,
                    identityFactory,
                    linkHandlerProvider,
                    connectionProvider,
                    credentialsCache);

                return(new AmqpProtocolHead(
                           transportSettings,
                           amqpSettings,
                           transportListenerProvider,
                           webSocketListenerRegistry));
            })
            .As <Task <AmqpProtocolHead> >()
            .SingleInstance();

            base.Load(builder);
        }
コード例 #2
0
        public void FromMessageTest()
        {
            // Arrange
            string   inputName     = "poke";
            string   correlationId = Guid.NewGuid().ToString();
            var      data          = new byte[] { 0, 1, 2 };
            IMessage message       = new EdgeMessage.Builder(data)
                                     .SetSystemProperties(new Dictionary <string, string>
            {
                [SystemProperties.CorrelationId] = correlationId
            })
                                     .SetProperties(new Dictionary <string, string>
            {
                [Amqp.Constants.MessagePropertiesMethodNameKey] = inputName
            })
                                     .Build();
            IMessageConverter <AmqpMessage> messageConverter = new AmqpDirectMethodMessageConverter();

            // Act
            AmqpMessage amqpMessage = messageConverter.FromMessage(message);

            // Assert
            Assert.NotNull(amqpMessage);
            Assert.Equal(data, amqpMessage.GetPayloadBytes());
            Assert.Equal(correlationId, amqpMessage.Properties.CorrelationId.ToString());
            Assert.Equal(inputName, amqpMessage.ApplicationProperties.Map[Amqp.Constants.MessagePropertiesMethodNameKey]);
        }
コード例 #3
0
        public void ToMessageTest()
        {
            // Arrange
            string      correlationId = Guid.NewGuid().ToString();
            var         data          = new byte[] { 0, 1, 2 };
            AmqpMessage amqpMessage   = AmqpMessage.Create(new Data {
                Value = new ArraySegment <byte>(data)
            });

            amqpMessage.Properties.CorrelationId = correlationId;
            amqpMessage.ApplicationProperties.Map[Amqp.Constants.MessagePropertiesStatusKey] = 200;
            IMessageConverter <AmqpMessage> messageConverter = new AmqpDirectMethodMessageConverter();

            // Act
            IMessage message = messageConverter.ToMessage(amqpMessage);

            // Assert
            Assert.NotNull(message);
            Assert.Equal(data, message.Body);
            Assert.Equal(2, message.Properties.Count);
            Assert.Equal("200", message.Properties[SystemProperties.StatusCode]);
            Assert.Equal(correlationId, message.Properties[SystemProperties.CorrelationId]);
        }