void ProcessMessage(ref Header header, Connection conn, byte[] payload, int len) { switch (header.Channel) { case MessageTypes.Ping: // Ping Test rawServer.Send(conn, payload.SubArray(0, len)); conn.FTT = Ping.Desserialize(payload, len).LastKnownFTT; break; // ======== Encypted Message =============== case MessageTypes.RSARegistration: RSARegistration rsaMessage = RSARegistration.Desserialize(payload, len); RSARegistration rsaReply; switch (rsaMessage.step) { case RSARegistration.Step.InitalRequest: rsaReply = new RSARegistration(RSARegistration.Step.ServerKey, RSAServerKeys.PublicBytes); Send(conn, ref rsaReply); break; case RSARegistration.Step.ClientResponse: rsaMessage.Decrypt(RSAServerKeys); byte[] clientRSAKey = rsaMessage.Data; // RSAPublicKeys[conn] = clientRSAKey; AESKeys[conn] = "Some Generated Key"; // TODO: Generate this AESKey rsaReply = new RSARegistration(RSARegistration.Step.AESKey, System.Text.Encoding.Unicode.GetBytes(AESKeys[conn])); rsaReply.Encrypt(new RSAEncryption.RSAKeys(_public: clientRSAKey)); Send(conn, ref rsaReply); break; } break; // ========= End Encrpted Message ================== default: for (int i = 0; i < Handlers.Count; ++i) { Handler h = Handlers[i]; if (h.channel == header.Channel) { if (header.IsAsync) { h.Call(conn, payload, len); } else { SyncMessagesToProcess.Enqueue(new ServerSyncMessageCall(h, payload, len, conn)); } } } break; } }
void ProcessMessage(ref Header header, byte[] payload, int len) { switch (header.Channel) { case MessageTypes.MessagePartConfirmation: MessagePartConfirmation part = MessagePartConfirmation.Desserialize(payload, len); if (ActiveMessageParts.TryGetValue(part.MessageID, out ClientMessagePartsActive activeMessage)) { activeMessage.RecievedPart(part.PartNumber); } break; // ======== Encypted Message =============== case MessageTypes.RSARegistration: RSARegistration rsaMessage = RSARegistration.Desserialize(payload, len); RSARegistration rsaReply; switch (rsaMessage.step) { case RSARegistration.Step.ServerKey: ServerPublicRSAKey = new RSAEncryption.RSAKeys(_public: rsaMessage.Data); rsaReply = new RSARegistration(RSARegistration.Step.ClientResponse, RSAKeys.PublicBytes); rsaReply.Encrypt(ServerPublicRSAKey); Send(ref rsaReply); break; case RSARegistration.Step.AESKey: rsaMessage.Decrypt(RSAKeys); AESKey = System.Text.Encoding.Unicode.GetString(rsaMessage.Data); break; } break; // ========= End Encrpted Message ================== default: for (int i = 0; i < Handlers.Count; ++i) { Handler h = Handlers[i]; if (h.channel == header.Channel) { if (header.IsAsync) { h.Call(payload, len); } else { SyncMessagesToProcess.Enqueue(new ClientSyncMessageCall(h, payload, len)); } } } for (int i = DynamicMessagesInProgresses.Count - 1; i >= 0; --i) { Handler dh = DynamicMessagesInProgresses[i]; if (dh.MessageID == header.ID) { if (header.IsAsync) { dh.Call(payload, len); } else { SyncMessagesToProcess.Enqueue(new ClientSyncMessageCall(dh, payload, len)); } DynamicMessagesInProgresses.RemoveAt(i); } } break; } }