using System; using System.Collections.Generic; using System.Text; using System.Threading; using ICPDAS.SmartQ; /*WMQTT includ*/ namespace CSSubExample { class Subscribe { static void Main(string[] args) { try { /* Initial Setting */ PSPARMS psparms = new PSPARMS(); long clienidMaxlength = MQTTDotNet.CLIENT_ID_MAXLENGTH; string idstr = "Client_Sub_PC"; if (idstr.Length < clienidMaxlength) { psparms.clientID = idstr; } else { throw new Exception("clientID is too long."); } psparms.pBroker = "127.0.0.1"; psparms.port = 1883; psparms.Topic = "MyTopic"; psparms.keepAliveTime = 32000; psparms.qos = 1; psparms.retain = 0; psparms.lwtTopic = "MyTopic"; psparms.lwtQos = 1; psparms.lwtRetain = 0; psparms.lwtData = "Client_Sub terminated."; psparms.persistDir = "C:\\temp\\wmqtt"; psparms.timeout = 10000; /* Output predefined info */ Console.WriteLine("ClientID : " + psparms.clientID.ToString()); Console.WriteLine("QP-500 : " + psparms.pBroker); Console.WriteLine("Port : " + psparms.port); Console.WriteLine("Topic : " + psparms.Topic); Console.WriteLine("QoS : " + psparms.qos); Console.WriteLine("Timeout : " + psparms.timeout); Console.WriteLine("LWTTopic : " + psparms.lwtTopic); Console.WriteLine("LWTQos : " + psparms.lwtQos); Console.WriteLine("LWTRetain : " + ((psparms.retain == 1) ? "true" : "false")); Console.WriteLine("******************************************************"); /* Connect to QP-500 */ if (MQTTDotNet.ICPDAS_MQIsdpConnect(ref psparms) != 0) { Console.WriteLine("Failed to connnect to QP-500\n"); string s = Console.ReadLine(); return; } Console.WriteLine("Connect to QP-500 Successfully."); /* Subscribe to the specified topic */ MQTTDotNet.ICPDAS_MQIsdpSubscribe(ref psparms); Console.WriteLine("The subscribed topic: {0}", psparms.Topic); Thread.Sleep(500); /* Receive data which is subscribed */ int buffersize = 1024; bool flag = true; byte[] topicBytes; byte[] dataBytes; Encoding strencoding = Encoding.UTF8; while (flag) { topicBytes = new byte[buffersize]; dataBytes = new byte[buffersize]; MQISDP rc = (MQISDP)MQTTDotNet.ICPDAS_MQIsdpReceive(ref psparms, topicBytes, dataBytes); if (rc == MQISDP.ConnectionBroken) break; else if ((rc == MQISDP.PubsAvailable) || (rc == MQISDP.Ok)) { if (dataBytes[0] != strencoding.GetBytes("\0")[0]) { string rcvData = strencoding.GetString(dataBytes, 0, dataBytes.Length).TrimEnd('\0'); string rcvTopic = strencoding.GetString(topicBytes, 0, topicBytes.Length).TrimEnd('\0'); Console.WriteLine("The received message: TOPIC: " + rcvTopic + ", DATA: " + rcvData); } else // empty string for exit { flag = false; } } } /* Unsubscribe */ MQTTDotNet.ICPDAS_MQIsdpUnsubscribe(ref psparms); /* Disconnect the protocol*/ MQTTDotNet.ICPDAS_MQIsdpDisconnect(ref psparms); Console.WriteLine("Disconnect to QP-500."); /* Terminate and Release memory */ MQTTDotNet.ICPDAS_MQIsdpTerminate(ref psparms); /* Wait for ending */ Console.Write("\nWait a second to exit...\n"); Thread.Sleep(1000); return; } catch (Exception ex) { Console.WriteLine("****************************EXCEPION MESSAGE**************************"); Console.WriteLine(ex.Message); Console.WriteLine(ex.Data); Console.WriteLine(ex.Source); Console.WriteLine(ex.StackTrace); Console.WriteLine(ex.TargetSite); string str = Console.ReadLine(); return; } } } }