public static PubackWrk ProcessPuback(byte[] input, byte[] clientId, SqliteConnection sConnect) { MessageInterface.PubackWrk puback = new PubackWrk(input); if (puback.puback.ReturnCode == ReturnCodes.Accepted) { Publisher.DeleteEntry(puback.puback.topicId, clientId, sConnect); } return(puback); }
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); } }
private static void PublishResponse(byte[] input) { PubackWrk pub = new PubackWrk(input); Console.WriteLine("\t\t\t\t\t\t Puback: " + pub.puback.ReturnCode); }
private static void SocketLoop(Object sObj) { Socket socket = (Socket)sObj; byte[] header = new byte[2]; byte[] messageBody; socket.Listen(0); Socket handler = socket.Accept(); byte[] clientId = new byte[4]; int length = 0; while (true) { try { handler.Receive(header, 2, SocketFlags.None); } catch (Exception ex) { Console.WriteLine("Exception occured in thread. Closing. " + ex.Message); handler = socket.Accept(); handler.Receive(header, 2, SocketFlags.None); } MsgTyp type = GetMsgType(header, ref length); messageBody = new byte[length - 2]; try { handler.Receive(messageBody); } catch (Exception ex) { Console.WriteLine("Exception occured in thread. Closing. " + ex.Message); return; } // 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.Connect: ConnackWrk cObj = ProcessConnect(messageFull, ref clientId); handler.Send(cObj.Serialized, 0, cObj.connack.length, SocketFlags.None); break; case MsgTyp.Register: RegackWrk rObj = ProcessRegister(messageFull); handler.Send(rObj.Serialized, 0, rObj.regack.length, SocketFlags.None); break; case MsgTyp.Publish: PubackWrk pObj = ProcessPublish(messageFull); handler.Send(pObj.Serialized, 0, pObj.puback.length, SocketFlags.None); break; case MsgTyp.Subscribe: SubackWrk skObj = ProcessSubscribe(messageFull, clientId); handler.Send(skObj.Serialized, 0, skObj.suback.length, SocketFlags.None); break; case MsgTyp.Puback: PubackWrk pkObj = ProcessPuback(messageFull, clientId, sqliteConnection); handler.Send(pkObj.Serialized, 0, pkObj.puback.length, SocketFlags.None); break; } // Send out message to be published to this client PublishClients(clientId, handler); } }