using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Security.Cryptography.X509Certificates; using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages; using System.Net.Security; using Newtonsoft.Json; using System.IO; namespace FangYar.FYMQTT { public class MQTT2 { MqttClient client; string brokerHostName = "8.142.30.104"; int brokerPort = 1883; public string clientId = null; string username = "smartcamp"; string password = "smartcamp"; byte[] qosLevels = { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }; public MQTT2() { clientId = Guid.NewGuid().ToString(); connect(); } public MQTT2(string cid) { clientId = cid; //connect(); } #region MQTT /// /// 连接MQTT /// public void connect() { try { //创建客户端实例 if (client == null) { client = new MqttClient(brokerHostName, brokerPort, false, // 开启TLS MqttSslProtocols.TLSv1_0, // TLS版本 null, null ); //消息接受 //client.MqttMsgPublishReceived += messageReceive; //消息发送完成 //client.MqttMsgPublished += messagePublished; //连接Broker client.Connect(clientId, username, password, false, 60); } else if (!client.IsConnected) { client.Connect(clientId, username, password, false, 60); } } catch (Exception ex) { } } /// /// 订阅主题 /// public void Subscribe(string[] Subscribe) { try { //创建客户端实例 client.Subscribe(Subscribe, qosLevels); } catch (Exception ex) { } } /// /// 断开连接 /// public void disconnect() { if (client != null && client.IsConnected) { client.Disconnect(); } } private void messageReceive(object sender, MqttMsgPublishEventArgs e) { byte[] cv = Encoding.Convert(Encoding.UTF8, Encoding.UTF8, e.Message); string msg = System.Text.Encoding.UTF8.GetString(cv); } public void messagePublished(string jsonstr, string Topic) { if (client == null || !client.IsConnected) { connect(); } try { byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(jsonstr); client.Publish(Topic, byteArray, MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); } catch { } } public void messagePublished2(string title, string content, string uid) { var jsonstr = "{\"Title\":\"" + title + "\",\"Type\":\"APPROVAL\",\"Content\":\"" + content + "\"}"; FangYar.OracleDAL.TBL.SysEmpDAL dal = new OracleDAL.TBL.SysEmpDAL(); FangYar.Model.TBL.TBL_SYS_EMP_Model model = dal.GetModelByUID(uid); string Topic = "XJYQ"+ model.ORG_ID + "/" + uid + "/APP/APPROVAL"; if (client == null || !client.IsConnected) { connect(); } try { byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(jsonstr); client.Publish(Topic, byteArray, MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); } catch { } } public void messagePublished(string type, string jsonstr, string Topic) { if (client == null || !client.IsConnected) { connect(); } try { string str = "{\"ID\":\"" + Guid.NewGuid().ToString() + "\",\"type\":\"" + type + "\",\"data\":" + jsonstr + "}"; byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(str); //ushort fg = client.Publish(Topic, byteArray); ushort fg = client.Publish(Topic, byteArray, MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); WriteLog(str + "MQTT:" + fg); //client.Disconnect(); } catch (Exception ex) { //WriteLog(ex.Message); throw (ex); } } #endregion #region 记录日志 /// /// 记录日志 /// /// private void WriteLog(string msg) { //string path = @"C:\log.txt"; //该日志文件会存在windows服务程序目录下 string path = AppDomain.CurrentDomain.BaseDirectory + "log\\" + DateTime.Now.ToString("yyyyMMdd") + "log.txt"; FileInfo file = new FileInfo(path); if (!file.Exists) { FileStream fs; fs = File.Create(path); fs.Close(); } using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs)) { sw.WriteLine(DateTime.Now.ToString() + " " + msg); } } } private void WriteData(string msg) { //string path = @"C:\log.txt"; //该日志文件会存在windows服务程序目录下 string path = AppDomain.CurrentDomain.BaseDirectory + "log\\" + DateTime.Now.ToString("yyyyMMdd") + "Data.txt"; FileInfo file = new FileInfo(path); if (!file.Exists) { FileStream fs; fs = File.Create(path); fs.Close(); } using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs)) { sw.WriteLine(msg); } } } #endregion } }