/// <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; } }
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; } }
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); } } }
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); } }
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(); }