private void OnReceive(BufferData data) { switch (State) { case QueueState.Authenticating: var keyPacket = new ClientKeyPacket(); keyPacket.Read(data.GetReader()); if (keyPacket.PublicKey != Manager.Config.PublicKey) { Close(); return; } Socket.Send(new ClientKeyOkPacket()); State = QueueState.Authenticated; break; case QueueState.Authenticated: if (data[data.Offset++] != 7) { throw new Exception("Invalid opcode???"); } var loginPacket = new QueueLoginPacket(); loginPacket.Read(data.GetReader()); UserId = loginPacket.UserId; OneTimeKey = loginPacket.OneTimeKey; State = QueueState.InQueue; Manager.Enqueue(this); EnqueueTime = DateTime.Now; break; default: throw new Exception("Received packet in a invalid queue state!"); } }
private void OnReceive(BufferData data) { var packet = new ClientKeyPacket(); packet.Read(data.GetReader()); DHKeyExchange.GenerateServerK(PrivateKey, packet.B, K); var key = new byte[64]; K.WriteToBigEndian(key, 0, key.Length); GameCryptManager.Initialize(Data, key); Socket.Send(new ClientKeyOkPacket()); Cleanup(); Manager.ExchangeDone(this); }