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