protected bool SendToLobbyConnection(uint connection, PayloadPrefix message) { NetworkProcessor processor = Program.GetLobbyProcessor(connection); if (processor == null) { return(false); } MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); PayloadWriter payloadWriter = new PayloadWriter(writer); message.Serialize(payloadWriter); Program.LogDebug($" --- Payload sending to {connection}: {(Payloads.Types)message.Type2} ---"); message.Serialize(Logger); processor.SendReply(MessageContainer.Types.ApplicationMessage, stream); writer.Close(); stream.Close(); return(false); }
protected void SendReply(PayloadWriter writer, PayloadPrefix payload) { payload.Serialize(writer); SendReply(MessageContainer.Types.ApplicationMessage, writer.BaseStream); Program.LogDebug($" --- Payload sending: {(Payloads.Types)payload.Type2} ---"); payload.Serialize(Logger); }
protected virtual bool HandlePayloadType(Payloads.Types payloadType, PayloadPrefix payload, PayloadWriter writer) { Program.LogDebug($" --- Payload received: {payloadType} ---"); payload.Serialize(Logger); switch (payloadType) { case Payloads.Types.VersionCheck: HandleVersionCheck((VersionCheck)payload, writer); return(true); case Payloads.Types.Login: HandleLogin((Login)payload, writer); return(true); case Payloads.Types.RegisterUser: HandleRegisterUser((RegisterUser)payload, writer); return(true); case Payloads.Types.LoginUser: HandleLoginUser((LoginUser)payload, writer); return(true); case Payloads.Types.LoginServer: HandleLoginServer((LoginServer)payload, writer); return(true); default: return(false); } }
protected sealed override void HandleMessage(BinaryReader reader, BinaryWriter writer) { reader.BaseStream.Seek(0, SeekOrigin.Begin); PayloadReader payloadReader = new PayloadReader(reader); PayloadWriter payloadWriter = new PayloadWriter(writer); PayloadPrefix prefix = new PayloadPrefix(); prefix.Serialize(payloadReader); if (prefix.Magic == PayloadPrefix.PayloadMagic) { if (prefix.Type1 != prefix.Type2) { Program.Log($" Corrupt payload type, first is {prefix.Type1:X04} but second is {prefix.Type2:X04}"); } Payloads.Types payloadType = (Payloads.Types)prefix.Type2; PayloadPrefix payload = Payloads.CreatePayload(payloadType); reader.BaseStream.Seek(0, SeekOrigin.Begin); payload.Serialize(payloadReader); HandlePayloadType(payloadType, payload, payloadWriter); } else if (prefix.Magic == ChatPayloadPrefix.PayloadMagic) { if (prefix.Type1 != 0) { Program.Log($" Corrupt payload chatTypes, is {prefix.Type1:X04} but expected 0"); } ChatPayloads.ChatTypes chatPayloadType = (ChatPayloads.ChatTypes)prefix.Type2; ChatPayloadPrefix chatPayload = ChatPayloads.CreateChatPayload(chatPayloadType); reader.BaseStream.Seek(0, SeekOrigin.Begin); chatPayload.Serialize(payloadReader); HandleChatPayloadType(chatPayloadType, chatPayload, payloadWriter); } else { Program.Log($" Incorrect payload magic, is {prefix.Magic:X04} but should be {PayloadPrefix.PayloadMagic:X04}"); } }