Пример #1
0
        /// <summary>
        /// Server Message
        /// </summary>
        /// <param name="message"></param>
        private static void MqttClient_ApplicationMessageReceived(string message)
        {
            MSG_MQTT_MessageStruct mSG = JsonConvert.DeserializeObject <MSG_MQTT_MessageStruct>(message);

            switch (mSG.ENUM_MqttMsgType)
            {
            case ENUM_MqttMsgType.Notice:
                Console.WriteLine("通知:" + mSG.Message);
                break;

            case ENUM_MqttMsgType.DownLine:
                Console.WriteLine("你的账户号在其他地方登录!");
                break;

            case ENUM_MqttMsgType.GroupMessage:
                Console.WriteLine("群消息:" + mSG.Message);
                break;

            case ENUM_MqttMsgType.Message:
                Console.WriteLine("{0} {1}:{2}",
                                  mSG.UserName, mSG.MessageDate,
                                  mSG.Message);
                break;
            }
        }
Пример #2
0
        private static void MqttServer_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e)
        {
            if (e.ClientId == null)
            {
                return;
            }
            string msg = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
            MSG_MQTT_MessageStruct mSG = JsonConvert.DeserializeObject <MSG_MQTT_MessageStruct>(msg);

            switch (mSG.ENUM_MqttMsgType)
            {
            case ENUM_MqttMsgType.Notice:
                PublishAsync(e.ClientId, msg);
                break;

            case ENUM_MqttMsgType.Message:
                PublishAsync(e.ClientId, msg);
                break;

            case ENUM_MqttMsgType.GroupMessage:
                foreach (var C in ClientInsTances)
                {
                    PublishAsync(C.ClientID, msg);
                }
                break;

            case ENUM_MqttMsgType.DownLine:
                PublishAsync(e.ClientId, msg);
                break;
            }
        }
Пример #3
0
        private static void ClientDisconnected(object sender, MqttClientDisconnectedEventArgs e)
        {
            var client = ClientInsTances.FirstOrDefault(t => t.ClientID.Equals(e.ClientId));

            if (client != null)
            {
                MSG_MQTT_MessageStruct mSG_MQTT_Message = new MSG_MQTT_MessageStruct()
                {
                    ENUM_MqttMsgType = ENUM_MqttMsgType.Notice,
                    Message          = string.Format("你的好友{0}下线了!", client.UserName),
                    MessageDate      = DateTime.Now
                };
                string json = JsonConvert.SerializeObject(mSG_MQTT_Message);
                ClientInsTances.Remove(client);
                Console.WriteLine(e.ClientId + " 断开");
                foreach (var C in ClientInsTances)
                {
                    PublishAsync(C.ClientID, json);
                }
            }
        }
Пример #4
0
        static void Main(string[] args)
        {
            try
            {
                //127.0.0.1
                mqttClient = new MqttClient.MqttClient("39.108.11.3", 1883);
                mqttClient.ApplicationMessageReceived += MqttClient_ApplicationMessageReceived;
                mqttClient.ConnectServer("admin" + new Random().Next(1, 9999), "123456");//暂时不做账号密码校验
                while (true)
                {
                    Thread.Sleep(500);
                    Console.WriteLine("(连接成功/-结束)测试服务器通讯:" +
                                      "1.测试群发消息" +
                                      "2.测试独立消息" +
                                      "3.测试账号下线" +
                                      "4.测试通知消息(管理员)" +
                                      ",请输入测试编号:");
                    string Message = Console.ReadLine();
                    if (Message.Equals("-"))
                    {
                        break;
                    }
                    MSG_MQTT_MessageStruct mSG_MQTT_Message = null;
                    switch (Message)
                    {
                    case "1":
                        mSG_MQTT_Message = new MSG_MQTT_MessageStruct()
                        {
                            ENUM_MqttMsgType = ENUM_MqttMsgType.GroupMessage,
                            ClientId         = Computer.Instance().MacAddress,
                            UserName         = "******",
                            Message          = "测试群发",
                            MessageDate      = DateTime.Now
                        };
                        break;

                    case "2":
                        mSG_MQTT_Message = new MSG_MQTT_MessageStruct()
                        {
                            ENUM_MqttMsgType = ENUM_MqttMsgType.Message,
                            ClientId         = Computer.Instance().MacAddress,
                            UserName         = "******",
                            Message          = "独立消息",
                            MessageDate      = DateTime.Now
                        };
                        break;

                    case "3":
                        mSG_MQTT_Message = new MSG_MQTT_MessageStruct()
                        {
                            ENUM_MqttMsgType = ENUM_MqttMsgType.DownLine,
                            ClientId         = Computer.Instance().MacAddress,
                            UserName         = "******",
                            Message          = "账号下线",
                            MessageDate      = DateTime.Now
                        };
                        break;

                    case "4":
                        mSG_MQTT_Message = new MSG_MQTT_MessageStruct()
                        {
                            ENUM_MqttMsgType = ENUM_MqttMsgType.Notice,
                            ClientId         = Computer.Instance().MacAddress,
                            UserName         = "******",
                            Message          = "通知消息",
                            MessageDate      = DateTime.Now
                        };
                        break;

                    default:
                        Console.WriteLine("输入有误,请重新输入!");
                        break;
                    }
                    if (mSG_MQTT_Message != null)
                    {
                        string json = JsonConvert.SerializeObject(mSG_MQTT_Message);
                        mqttClient.SendMessage(json);
                    }
                }
                Console.ReadKey();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Пример #5
0
        static void Main(string[] args)
        {
            mqttServer = new MqttFactory().CreateMqttServer();
            var options = new MqttServerOptions();

            options.ConnectionValidator = c =>
            {
                try
                {
                    Console.WriteLine(string.Format("用户尝试登录:用户ID:{0}\t用户信息:{1}\t用户密码:{2}", c.ClientId, c.Username, c.Password));
                    if (!string.IsNullOrEmpty(c.Username) && !string.IsNullOrEmpty(c.Password))
                    {
                        var user = ClientInsTances.FirstOrDefault(t => t.UserName.Equals(c.Username));
                        if (user == null)
                        {
                            ClientInsTances.Add(new ClientInstance()
                            {
                                ClientID = c.ClientId,
                                UserName = c.Username,
                                PassWord = c.Password
                            });
                            c.ReturnCode = MqttConnectReturnCode.ConnectionAccepted;
                            Console.WriteLine(c.ClientId + " 登录成功");
                            return;
                        }
                        else
                        {
                            c.ReturnCode = MqttConnectReturnCode.ConnectionAccepted;
                            return;
                        }
                    }
                    else
                    {
                        c.ReturnCode = MqttConnectReturnCode.ConnectionRefusedBadUsernameOrPassword;
                        return;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("登录失败:" + ex.Message);
                    c.ReturnCode = MqttConnectReturnCode.ConnectionRefusedIdentifierRejected;
                    return;
                }
            };
            options.SubscriptionInterceptor = context =>
            {
                try
                {
                    Console.WriteLine(string.Format("用户{0}订阅", context.ClientId));
                    var client = ClientInsTances.FirstOrDefault(t => t.ClientID.Equals(context.ClientId));

                    if (client != null)
                    {
                        MSG_MQTT_MessageStruct mSG_MQTT_Message = new MSG_MQTT_MessageStruct()
                        {
                            ENUM_MqttMsgType = ENUM_MqttMsgType.Notice,
                            Message          = string.Format("你的好友{0}上线了!", client.UserName),
                            MessageDate      = DateTime.Now
                        };
                        string json = JsonConvert.SerializeObject(mSG_MQTT_Message);

                        foreach (var C in ClientInsTances)
                        {
                            if (C.ClientID == context.ClientId)
                            {
                                continue;
                            }
                            PublishAsync(C.ClientID, json);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("订阅失败:" + ex.Message);
                    context.AcceptSubscription = false;
                }
            };
            mqttServer.ClientDisconnected         += ClientDisconnected;
            mqttServer.ClientConnected            += MqttServer_ClientConnected;
            mqttServer.ApplicationMessageReceived += MqttServer_ApplicationMessageReceived;
            mqttServer.Started += MqttServer_Started;
            mqttServer.StartAsync(options);
            Console.ReadKey();
        }