コード例 #1
0
        public static PubackWrk ProcessPublish(byte[] pubInput)
        {
            MessageInterface.PublishWrk publish = new PublishWrk(pubInput);
            //send appropriate response
            MessageInterface.PubackWrk puback = new PubackWrk();
            puback.puback.topicId   = publish.publish.topicId;
            puback.puback.messageId = publish.publish.messageId;


            if (Publisher.Insert(publish.publish, sqliteConnection) == 1)
            {
                puback.puback.ReturnCode = MessageInterface.ReturnCodes.Accepted;
            }
            else
            {
                puback.puback.ReturnCode = MessageInterface.ReturnCodes.Congestion;
            }

            return(puback);
        }
コード例 #2
0
        private static void ReceiveMessage()
        {
            byte[] header = new byte[2];
            byte[] messageBody;
            int    length = 0;

            while (!clientSocket.Poll(1000, SelectMode.SelectRead))
            {
                Thread.Sleep(100);
            }
            while (true)
            {
                int received = clientSocket.Receive(header, SocketFlags.None);

                MsgTyp type = GetMsgType(header, ref length);
                if (length == 0)
                {
                    continue;
                }
                messageBody = new byte[length - 2];
                clientSocket.Receive(messageBody, SocketFlags.None);

                // Create the full message
                byte[] messageFull = new byte[length];
                System.Buffer.BlockCopy(header, 0, messageFull, 0, 2);
                System.Buffer.BlockCopy(messageBody, 0, messageFull, 2, length - 2);

                switch (type)
                {
                case MsgTyp.Suback:
                    SubscribeResponse(messageFull);
                    break;

                case MsgTyp.Puback:
                    PublishResponse(messageFull);
                    break;

                case MsgTyp.Regack:
                    RegisterResponse(messageFull);
                    break;

                case MsgTyp.Connack:
                    ReceiveResponse(messageFull);
                    break;

                case MsgTyp.Publish:

                    MessageInterface.PublishWrk publ = new PublishWrk(messageFull);

                    MessageInterface.PubackWrk pubAck = new PubackWrk();
                    pubAck.puback.topicId   = publ.publish.topicId;
                    pubAck.puback.messageId = publ.publish.messageId;

                    clientSocket.Send(pubAck.Serialized, 0, pubAck.puback.length, SocketFlags.None);

                    Console.WriteLine("REceived a message published by the server");
                    Console.WriteLine("TopicID: " + ASCIIEncoding.ASCII.GetString(publ.publish.topicId));
                    Console.WriteLine("MsgId: " + ASCIIEncoding.ASCII.GetString(publ.publish.messageId));
                    Console.WriteLine("Message from the server: " + ASCIIEncoding.ASCII.GetString(publ.publish.data));
                    Console.WriteLine("Continue ?");
                    Console.ReadLine();

                    Console.Clear();
                    break;
                }
                Thread.Sleep(100);
            }
        }