Exemplo n.º 1
0
        public async Task Error_Callback_Should_Be_Executed_When_Serializer_Throws_An_Exception()
        {
            var serverErrorEvent = new AutoResetEvent(false);

            var server = new TcpBinding(new IPEndPoint(IPAddress.Any, 1801), new ExceptionSerializer());

            server.IoCompleted += (sender, e) => Debug.WriteLine(e.LastOperation);
            server.Error       += (sender, e) =>
            {
                serverErrorEvent.Set();
            };

            var result = server.ListenAsync();

            Assert.IsTrue(result);

            var client = new TcpBinding(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1801), new TestSerializer());

            client.IoCompleted += (sender, e) => Debug.WriteLine(e.LastOperation);

            await client.ConnectAsync();

            await client.SendAsync(new TestPacket());

            Assert.IsTrue(serverErrorEvent.WaitOne(TimeSpan.FromSeconds(3)));
        }
Exemplo n.º 2
0
        public async Task Client_Should_Receive_Package_When_Server_Responds()
        {
            var serverReceivedEvent = new AutoResetEvent(false);
            var clientReceivedEvent = new AutoResetEvent(false);

            var server = new TcpBinding(new IPEndPoint(IPAddress.Any, 1800), new TestSerializer());

            server.IoCompleted    += (sender, e) => Debug.WriteLine(e.LastOperation);
            server.PacketReceived += async(sender, e) =>
            {
                serverReceivedEvent.Set();

                await e.Binding.SendAsync(e.Packet);
            };

            var result = server.ListenAsync();

            Assert.IsTrue(result);

            var client = new TcpBinding(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1800), new TestSerializer());

            client.IoCompleted    += (sender, e) => Debug.WriteLine(e.LastOperation);
            client.PacketReceived += (sender, e) => clientReceivedEvent.Set();

            await client.ConnectAsync();

            await client.SendAsync(new TestPacket());

            Assert.IsTrue(serverReceivedEvent.WaitOne(TimeSpan.FromSeconds(3)));

            Assert.IsTrue(clientReceivedEvent.WaitOne(TimeSpan.FromSeconds(3)));
        }
        public async Task Meter_Should_Have_The_Address_Changed_When_Meter_Address_Is_Reconfigured()
        {
            var binding = new TcpBinding(new IPEndPoint(IPAddress.Parse(COLLECTOR_IP_ADDRESS), COLLECTOR_PORT), new MeterbusFrameSerializer());

            var master = new MBusMaster(binding);

            await master.SetMeterAddress(0x0a, 0x09);
        }
        public async Task Meter_Telemetry_Should_Be_Retrieved_When_Querying_The_Collector()
        {
            var binding = new TcpBinding(new IPEndPoint(IPAddress.Parse(COLLECTOR_IP_ADDRESS), COLLECTOR_PORT), new MeterbusFrameSerializer());

            var master = new MBusMaster(binding);

            var response = await master.RequestData(0x0a, TimeSpan.FromSeconds(TIMEOUT_IN_SECONDS)) as VariableDataPacket;

            Assert.IsNotNull(response);
        }
        public async Task Meter_Scanner_Should_Find_Meter_When_Meter_Is_Connected_To_Collector()
        {
            var binding = new TcpBinding(new IPEndPoint(IPAddress.Parse(COLLECTOR_IP_ADDRESS), COLLECTOR_PORT), new MeterbusFrameSerializer());

            var master = new MBusMaster(binding);

            master.Meter += (sender, e) => Debug.WriteLine($"Found meter on address {e.Address.ToString("x2")}.");

            await master.Scan(new byte[] { 0x0a }, TimeSpan.FromSeconds(100));
        }
        public async Task Meter_Should_Respond_When_Pinging_The_Meter()
        {
            var binding = new TcpBinding(new IPEndPoint(IPAddress.Parse(COLLECTOR_IP_ADDRESS), COLLECTOR_PORT), new MeterbusFrameSerializer());

            var master = new MBusMaster(binding);

            var result = await master.Ping(0x0a, TimeSpan.FromSeconds(TIMEOUT_IN_SECONDS));

            Assert.IsTrue(result);
        }
Exemplo n.º 7
0
        protected virtual async Task <IMqttClient> GetClientAsync()
        {
            var binding     = new TcpBinding();
            var initializer = new MqttClientFactory(IPAddress.Loopback.ToString(), binding);

            if (Configuration == null)
            {
                LoadConfiguration();
            }

            return(await initializer.CreateClientAsync(Configuration));
        }
        public async Task Meter_Should_Respond_With_Ack_When_Sending_SND_NKE()
        {
            var resetEvent = new AutoResetEvent(false);

            var endpoint = new TcpBinding(new IPEndPoint(IPAddress.Parse(COLLECTOR_IP_ADDRESS), COLLECTOR_PORT), new MeterbusFrameSerializer());

            endpoint.PacketReceived += (sender, e) => resetEvent.Set();

            await endpoint.ConnectAsync();

            await endpoint.SendAsync(new ShortFrame((byte)ControlMask.SND_NKE, 0x0a));

            Assert.IsTrue(resetEvent.WaitOne(TimeSpan.FromSeconds(TIMEOUT_IN_SECONDS)));

            await endpoint.DisconnectAsync();
        }
Exemplo n.º 9
0
        public async Task when_initializing_client_then_succeeds()
        {
            var port     = new Random().Next(IPEndPoint.MinPort, IPEndPoint.MaxPort);
            var listener = new TcpListener(IPAddress.Loopback, port);

            listener.Start();

            var configuration = new MqttConfiguration {
                BufferSize = 131072,
                Port       = port
            };
            var binding     = new TcpBinding();
            var initializer = new MqttClientFactory(IPAddress.Loopback.ToString(), binding);
            var client      = await initializer.CreateClientAsync(configuration);

            Assert.NotNull(client);

            listener.Stop();
        }
Exemplo n.º 10
0
        public I CreateChannel <I>()
        {
            ChannelFactory <I> channelfactory = null;
            string             prefix         = string.Empty;
            Binding            binding        = null;
            bool useSSL = SecurityMode == ServiceSecurityMode.BasicSSL;

            switch (Type)
            {
            case ServiceType.HTTP:
                prefix = useSSL ? "https" : "http";
                if (useSSL)
                {
                    binding = new HttpBinding
                    {
                        Security =
                        {
                            Mode      = BasicHttpSecurityMode.Transport,
                            Transport =
                            {
                                ClientCredentialType = HttpClientCredentialType.None,
                                Realm                = string.Empty,
                                ProxyCredentialType  = HttpProxyCredentialType.None
                            }
                        }
                    };
                }
                else
                {
                    binding = new HttpBinding();
                }
                break;

            case ServiceType.WSHTTP:
                prefix = useSSL ? "https" : "http";
                if (useSSL)
                {
                    binding = new WsHttpBinding
                    {
                        Security =
                        {
                            Mode      = System.ServiceModel.SecurityMode.Transport,
                            Transport =
                            {
                                ClientCredentialType = HttpClientCredentialType.None,
                                Realm                = string.Empty,
                                ProxyCredentialType  = HttpProxyCredentialType.None
                            }
                        }
                    };
                }
                else
                {
                    binding = new WsHttpBinding();
                }
                break;

            case ServiceType.TCP:
                binding = new TcpBinding();
                prefix  = "net.tcp";
                break;

            case ServiceType.REST:
                if (useSSL)
                {
                    binding = new RestBinding
                    {
                        Security =
                        {
                            Mode      = WebHttpSecurityMode.Transport,
                            Transport =
                            {
                                ClientCredentialType = HttpClientCredentialType.None,
                                Realm                = string.Empty,
                                ProxyCredentialType  = HttpProxyCredentialType.None
                            }
                        }
                    };
                }
                else
                {
                    binding = new RestBinding();
                }
                prefix = useSSL ? "https" : "http";
                break;
            }

            if (binding == null)
            {
                throw new NullReferenceException("No appropriate binding found for type:" + Type);
            }
            _address = String.Format(UriFormat, prefix, ServerName, Port, ServiceName);


            CurrentContext.Default.Log.SvcInfo(String.Format("Creating WCF Client at {0}", _address));

            channelfactory = new ChannelFactory <I>(binding, new EndpointAddress(_address));

            if (binding is RestBinding)
            {
                channelfactory.Endpoint.Behaviors.Add(new WebHttpBehavior());
            }

            var channel = channelfactory.CreateChannel();

            channelfactory.Endpoint.AttachDataResolver();

            return(channel);
        }