public static RegackWrk ProcessRegister(byte[] regInput) { MessageInterface.RegisterWrk register = new RegisterWrk(regInput); //send appropriate response MessageInterface.RegackWrk regack = new RegackWrk(); regack.regack.topicId = register.register.topicId; regack.regack.messageId = register.register.messageId; if (Register.Insert(register.register, sqliteConnection) == 1) { regack.regack.ReturnCode = MessageInterface.ReturnCodes.Accepted; } else { regack.regack.ReturnCode = MessageInterface.ReturnCodes.Congestion; } return(regack); }
private static void RegisterResponse(byte[] input) { RegackWrk reg = new RegackWrk(input); Console.WriteLine("\t\t\t\t\t\t Regack: " + reg.regack.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); } }