Ejemplo n.º 1
0
        private void btn_send_Click(object sender, EventArgs e)
        {
            if (this.mqttclient.IsConnected)
            {
                for (int i = 0; i < int.Parse(this.nud_sendNum.Value.ToString()); i++)
                {
                    MqttApplicationMessageBuilder builder = new MqttApplicationMessageBuilder();
                    builder.WithPayload(this.mtb_sendmsg.Text.Trim())
                    .WithTopic(this.mtb_sendTopic.Text.Trim());
                    switch (this.cb_sendQos.SelectedText)
                    {
                    case "0":
                        builder.WithAtMostOnceQoS();
                        break;

                    case "1":
                        builder.WithAtLeastOnceQoS();
                        break;

                    case "2":
                        builder.WithExactlyOnceQoS();
                        break;
                    }

                    if (this.nud_sendDelay.Value > 0)
                    {
                        Task.Delay(new TimeSpan(0, 0, 0, 0, int.Parse(this.nud_sendDelay.Value.ToString()))).Wait();
                    }


                    this.mqttclient.PublishAsync(builder.Build());
                    insertLog($"topic:{this.mtb_sendTopic.Text.Trim()},value:{this.mtb_sendmsg.Text.Trim()}");
                }
            }
            else
            {
                MessageBox.Show("当前连接已断开,请连接后重试", "系统提示");
            }
        }
Ejemplo n.º 2
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var factory = new  MqttFactory();
            var l       = factory.CreateMqttClient();
            var opt     = new MqttClientOptions();

            opt.ClientId       = "LocalTestClient";
            opt.ChannelOptions = new MqttClientTcpOptions
            {
                Port = 8883,
                // TlsOptions = new MqttClientTlsOptions
                // {
                //     AllowUntrustedCertificates = true,
                //     UseTls = true,
                // },
                Server = "localhost",
                // Server = "mqtt.qaybe.de",
            };
            opt.Credentials = new MqttClientCredentials
            {
                Username = "******",
                Password = Encoding.UTF8.GetBytes("Test")
            };

            var result = await l.ConnectAsync(opt, CancellationToken.None);

            var mssg = new MqttApplicationMessageBuilder();

            mssg.WithRetainFlag(true);
            var la = mssg.WithPayload("Hello from Client sowieso")
                     .WithTopic("test/nace/message")
                     .Build();
            var response = await l.PublishAsync(la, CancellationToken.None);

            Console.WriteLine(response.ReasonString);
        }
Ejemplo n.º 3
0
        // In class _Startup_ of the ASP.NET Core 2.0 project.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseMqttEndpoint();
            app.UseMqttServer(async server =>
            {
                var msg = new MqttApplicationMessageBuilder()
                          .WithPayload("Mqtt is awesome")
                          .WithTopic("message");

                while (true)
                {
                    server.PublishAsync(msg.Build()).Wait();
                    await Task.Delay(TimeSpan.FromSeconds(2));
                    msg.WithPayload("Mqtt is still awesome at " + DateTime.Now);
                }
            });

            app.Use((context, next) =>
            {
                if (context.Request.Path == "/")
                {
                    context.Request.Path = "/Index.html";
                }

                return(next());
            });

            app.UseStaticFiles();


            app.UseStaticFiles(new StaticFileOptions
            {
                RequestPath  = "/node_modules",
                FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "node_modules"))
            });
        }
Ejemplo n.º 4
0
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseStaticFiles();

            app.UseHttpsRedirection();

            app.UseAuthentication();

            app.UseRouting();//路由配置

            app.UseAuthorization();



            #region mqtt服务器启动

            app.UseMqttEndpoint();
            app.UseMqttServer(server =>
            {
                server.ApplicationMessageReceived += ServerOnApplicationMessageReceived;
                //服务启动事件
                server.Started += async(sender, args) =>
                {
                    var msg = new MqttApplicationMessageBuilder().WithPayload("welcome to mqtt").WithTopic("start");
                    while (true)
                    {
                        try
                        {
                            await server.PublishAsync(msg.Build());
                            msg.WithPayload("you are welcome to mqtt");
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }
                        finally
                        {
                            await Task.Delay(TimeSpan.FromSeconds(5));
                        }
                    }
                };
                //服务停止事件
                server.Stopped += (sender, args) =>
                {
                };

                //客户端连接事件
                server.ClientConnected += (sender, args) =>
                {
                    var clientId = args.ClientId;
                    Console.WriteLine($"有客户连接");
                };
                //客户端断开事件
                server.ClientDisconnected += (sender, args) =>
                {
                    var clientId = args.ClientId;
                };
            });
            #endregion

            #region swagger
            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "MqttServer");
            });

            #endregion

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
 //DONT TAKE FORWARD, just a helper for spike
 public static MqttApplicationMessageBuilder WithMessage <T>(this MqttApplicationMessageBuilder builder,
                                                             T message)
 {
     return(builder.WithPayload(JsonConvert.SerializeObject(message).ToByteArray()));
 }
Ejemplo n.º 6
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();


            app.UseConnections(c => c.MapConnectionHandler <MqttConnectionHandler>("/data", options =>
            {
                options.WebSockets.SubProtocolSelector = MQTTnet.AspNetCore.ApplicationBuilderExtensions.SelectSubProtocol;
            }));

            app.UseMqttEndpoint("/data");
            app.UseMqttServer(server =>
            {
                //服务启动事件
                server.Started += async(sender, args) =>
                {
                    var msg = new MqttApplicationMessageBuilder().WithPayload("welcome to mqtt").WithTopic("start");
                    while (true)
                    {
                        try
                        {
                            await server.PublishAsync(msg.Build());
                            msg.WithPayload("you are welcome to mqtt");
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }
                        finally
                        {
                            await Task.Delay(TimeSpan.FromSeconds(5));
                        }
                    }
                };
                //服务停止事件
                server.Stopped += (sender, args) =>
                {
                };

                //客户端连接事件
                server.ClientConnected += (sender, args) =>
                {
                    var clientId = args.ClientId;
                };
                //客户端断开事件
                server.ClientDisconnected += (sender, args) =>
                {
                    var clientId = args.ClientId;
                };
            });

            //app.Use((context, next) =>
            //{
            //    if (context.Request.Path == "/")
            //    {
            //        context.Request.Path = "/Index.html";
            //    }
            //    return next();
            //});

            //app.UseStaticFiles();

            //app.UseStaticFiles(new StaticFileOptions
            //{
            //    RequestPath="",
            //    FileProvider=new PhysicalFileProvider(System.IO.Path.Combine(env.ContentRootPath,"node_modules"))
            //});

            Controllers.ServiceLocator.Instance = app.ApplicationServices;
        }
Ejemplo n.º 7
0
        public static async Task ReqRepTest(int LoopNum)
        {
            string requestTopic = "mytopic/A/request";
            var    sw           = new System.Diagnostics.Stopwatch();

            sw.Start();
            using (var cts = new CancellationTokenSource())
                using (var startedev = new ManualResetEventSlim())
                    using (var connectedev = new ManualResetEventSlim())
                        using (var recvev = new ManualResetEventSlim())
                        {
                            var fac = new MqttFactory();
                            await Task.WhenAll(
                                Task.Run(async() =>
                            {
                                var svr        = fac.CreateMqttServer();
                                var msgbuilder = new MqttApplicationMessageBuilder().WithPayload("req");
                                svr.ApplicationMessageReceived += async(sender, ev) =>
                                {
                                    if (ev.ApplicationMessage.Topic.Equals(requestTopic, StringComparison.Ordinal))
                                    {
                                        var reqmsg = MessagePackSerializer.Deserialize <ReqMsg>(ev.ApplicationMessage.Payload);
                                        var msg    = msgbuilder.WithTopic(reqmsg.ReplyTopic).Build();
                                        await svr.PublishAsync(msg);
                                    }
                                };
                                svr.Started += (sender, ev) =>
                                {
                                    startedev.Set();
                                };
                                var opt = new MqttServerOptionsBuilder()
                                          .WithDefaultEndpoint()
                                          .WithDefaultEndpointBoundIPAddress(IPAddress.Loopback)
                                          .WithDefaultEndpointPort(10012)
                                          .Build();
                                await svr.StartAsync(opt).ConfigureAwait(false);
                                cts.Token.WaitHandle.WaitOne();
                                await svr.StopAsync().ConfigureAwait(false);
                            })
                                ,
                                Task.Run(async() =>
                            {
                                var client = fac.CreateMqttClient();
                                string replyTopic = "mytopic/A/reply";
                                var queue = new ConcurrentQueue <TaskCompletionSource <byte[]> >();
                                client.ApplicationMessageReceived += (sender, ev) =>
                                {
                                    if (queue.TryDequeue(out var tcs))
                                    {
                                        tcs.TrySetResult(ev.ApplicationMessage.Payload);
                                    }
                                };
                                client.Connected += (sender, ev) =>
                                {
                                    connectedev.Set();
                                };
                                var clientopt = new MqttClientOptionsBuilder()
                                                .WithClientId("clid")
                                                .WithTcpServer("localhost", 10012)
                                                .Build()
                                ;
                                await client.ConnectAsync(clientopt).ConfigureAwait(false);
                                connectedev.Wait();
                                var topicFilter = new TopicFilterBuilder()
                                                  .WithTopic(replyTopic)
                                                  .WithAtLeastOnceQoS()
                                                  .Build()
                                ;
                                await client.SubscribeAsync(topicFilter).ConfigureAwait(false);
                                Console.WriteLine($"client task loop started:{sw.Elapsed}");
                                var beginTime = sw.Elapsed;
                                var msgbuilder = new MqttApplicationMessageBuilder().WithTopic(requestTopic);
                                for (int i = 0; i < LoopNum; i++)
                                {
                                    var reqpayload = MessagePackSerializer.Serialize(new ReqMsg(replyTopic, "hoge"));
                                    var msg = msgbuilder
                                              .WithPayload(reqpayload)
                                              .Build();
                                    ;
                                    var reqtcs = new TaskCompletionSource <byte[]>();
                                    queue.Enqueue(reqtcs);
                                    await client.PublishAsync(msg).ConfigureAwait(false);
                                    await reqtcs.Task;
                                }
                                var endTime = sw.Elapsed;
                                Console.WriteLine($"elapsed(mqtt):{sw.Elapsed},rps={LoopNum/(endTime.Subtract(beginTime).TotalSeconds)}");
                            }).ContinueWith(t =>
                            {
                                Console.WriteLine($"all client task done:{sw.Elapsed}");
                                cts.Cancel();
                                if (t.IsCanceled)
                                {
                                    throw new TaskCanceledException("server task cancelled", t.Exception);
                                }
                                else if (t.IsFaulted)
                                {
                                    throw new AggregateException(t.Exception);
                                }
                            })
                                ).ConfigureAwait(false);
                        }
        }
Ejemplo n.º 8
0
        public static async Task TestMany(int loopNum, int taskNum)
        {
            var fac = new MqttFactory();

            using (var cts = new CancellationTokenSource())
            {
                var sw = new System.Diagnostics.Stopwatch();
                sw.Start();
                await Task.WhenAll(
                    Task.Run(async() =>
                {
                    var svr      = fac.CreateMqttServer();
                    svr.Started += (sender, ev) =>
                    {
                        Console.WriteLine($"{sw.Elapsed} svr started");
                    };
                    svr.ClientConnected += (sender, ev) =>
                    {
                        Console.WriteLine($"{sw.Elapsed} client connected(S): {ev.Client.ClientId}");
                    };
                    svr.ClientDisconnected += (sender, ev) =>
                    {
                        Console.WriteLine($"{sw.Elapsed} client disconnected(S): {ev.Client.ClientId}");
                    };
                    var opt = new MqttServerOptionsBuilder()
                              .WithDefaultEndpoint()
                              .WithDefaultEndpointBoundIPAddress(IPAddress.Loopback)
                              .WithDefaultEndpointPort(10012)
                              .Build();
                    await svr.StartAsync(opt).ConfigureAwait(false);
                    cts.Token.WaitHandle.WaitOne();
                    await svr.StopAsync().ConfigureAwait(false);
                })
                    ,
                    Task.Run(async() =>
                {
                    await Task.Delay(100).ConfigureAwait(false);
                    var client = fac.CreateMqttClient();
                    var clientopt = new MqttClientOptionsBuilder()
                                    .WithClientId("clid")
                                    .WithTcpServer("localhost", 10012)
                                    .Build()
                    ;
                    // var opt = new ManagedMqttClientOptionsBuilder()
                    //     .WithClientOptions(clientopt)
                    //     .WithAutoReconnectDelay(TimeSpan.FromMilliseconds(100))
                    //     .Build();
                    using (var connectedEvent = new ManualResetEventSlim(false))
                    {
                        client.ApplicationMessageReceived += (sender, ev) =>
                        {
                            Console.WriteLine($"{sw.Elapsed} recv {ev.ApplicationMessage.Topic},{ev.ApplicationMessage.Payload[0]}");
                        };
                        client.Connected += (sender, ev) =>
                        {
                            Console.WriteLine($"{sw.Elapsed} client connected");
                            connectedEvent.Set();
                        };
                        client.Disconnected += (sender, ev) =>
                        {
                            Console.WriteLine($"{sw.Elapsed} client disconnected");
                        };
                        var topicFilter = new TopicFilterBuilder()
                                          .WithTopic("mytopic/A").WithAtLeastOnceQoS().Build();
                        Console.WriteLine($"{sw.Elapsed} begin connection");
                        await client.ConnectAsync(clientopt).ConfigureAwait(false);
                        // await client.StartAsync(opt).ConfigureAwait(false);
                        connectedEvent.Wait();
                        if (!client.IsConnected)
                        {
                            Console.WriteLine($"not connected");
                        }
                        else
                        {
                            Console.WriteLine($"{sw.Elapsed} connection established");
                        }
                        await client.SubscribeAsync(new[] { topicFilter }).ConfigureAwait(false);
                        Console.WriteLine($"{sw.Elapsed} subscribing done");
                        var msgbuilder = new MqttApplicationMessageBuilder();
                        msgbuilder = msgbuilder.WithTopic("mytopic/A").WithAtLeastOnceQoS();
                        var dat = new byte[1];
                        for (int i = 0; i < 100; i++)
                        {
                            await Task.Yield();
                            dat[0] = (byte)(i % 255);
                            var msg = msgbuilder.WithPayload(dat).Build();
                            await client.PublishAsync(msg).ConfigureAwait(false);
                            Console.WriteLine($"{sw.Elapsed}: publish{i}");
                        }
                        await client.UnsubscribeAsync(new[] { topicFilter.Topic }).ConfigureAwait(false);
                        await client.DisconnectAsync().ConfigureAwait(false);
                        // await client.StopAsync().ConfigureAwait(false);
                        // cts.Cancel();
                    }

                    // var opt = new MqttClientOptionsBuilder()
                    //     .Build();
                    // await client.ConnectAsync(opt).ConfigureAwait(false);
                    // var topicFilter = new TopicFilterBuilder()
                    //     .WithTopic("topic")
                    //     .Build();
                    // var subresults = await client.SubscribeAsync(new TopicFilter[] {topicFilter}).ConfigureAwait(false);
                    // foreach(var subresult in subresults)
                    // {
                    // }
                }).ContinueWith(t =>
                {
                    cts.Cancel();
                })
                    );

                sw.Stop();
            }
        }