using System; using System.Collections.Generic; using System.Text; using System.Threading; using ICPDAS.SmartQ; /*WMQTT includ*/ namespace WCSSubExample { class Subscribe { static void Main(string[] args) { try { /* Initial Setting */ PSPARMS psparms = new PSPARMS(); long clienidMaxlength = MQTTDotNet.CLIENT_ID_MAXLENGTH; string idstr = "QP-8x1(2)_Sub"; if (idstr.Length < clienidMaxlength) { psparms.clientID = idstr; } else { throw new Exception("clientID is too long."); } psparms.pBroker = "192.168.100.58"; 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 = "QP-8x1(2)_Sub terminated."; psparms.timeout = 10; /* Output predefined info */ Console.WriteLine("QP-8x1(2) : " + psparms.clientID); 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("LWTData : " + psparms.lwtData); Console.WriteLine("LWTRetain : " + ((psparms.retain == 1) ? "true" : "false")); Console.WriteLine("******************************************************"); /* Connect to QP-500 */ int connect_rval = MQTTDotNet.ICPDAS_MQIsdpConnect(ref psparms); if (connect_rval != 0) { Console.WriteLine("Failed to connnect to QP-500"); 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 { 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); Console.ReadLine(); return; } catch (Exception ex) { Console.WriteLine("**********************EXCEPTION MESSAGE*************************"); Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); Console.Write(ex.ToString()); string str = Console.ReadLine(); return; } } } }