public Packet Receive(Stream processingStream) { var packetReader = new StreamPacketReader(processingStream, receiveBuffer); int packetId = packetReader.ReadByte(); if ((packetId < 0) || (packetId > 255)) { throw new EndOfStreamException(); } diagnosticPullStream.StartPacket(); var packetDefinition = packetRegistry.Find(packetId); var packetSize = packetDefinition.GetSize(packetReader); packetReader.ReadBytes(packetSize - packetReader.Position); var payload = new byte[packetSize]; Array.Copy(receiveBuffer, 0, payload, 0, packetSize); var packet = new Packet(packetId, payload); if (packetId == PacketDefinitions.ConnectToGameServer.Id) { Status = ServerConnectionStatus.PreGame; } diagnosticPullStream.FinishPacket(packet); return(packet); }
public ServerConnection(ServerConnectionStatus status, IDiagnosticPullStream diagnosticPullStream, IDiagnosticPushStream diagnosticPushStream, byte[] newGameKey, uint loginSeed, LoginEncryptionKey loginKey) : this(status, diagnosticPullStream, diagnosticPushStream, PacketDefinitionRegistryFactory.CreateClassicClient(), EncryptionSetup.Autodetect) { InitNewGameEncryption(newGameKey); this.loginStream = new LoginPushStream(loginSeed, loginKey); }
public void Send(Packet packet, Stream outputStream) { diagnosticPushStream.DumpPacket(packet); switch (Status) { case ServerConnectionStatus.Initial: diagnosticPushStream.BaseStream = new StreamToPushStreamAdapter(outputStream); diagnosticPushStream.Write(packet.Payload, 0, packet.Length); Status = ServerConnectionStatus.PreLogin; break; case ServerConnectionStatus.PreLogin: diagnosticPushStream.BaseStream = new StreamToPushStreamAdapter(outputStream); loginStream.BaseStream = diagnosticPushStream; loginStream.Write(packet.Payload, 0, packet.Length); break; case ServerConnectionStatus.PreGame: diagnosticPushStream.BaseStream = new StreamToPushStreamAdapter(outputStream); diagnosticPushStream.Write(packet.Payload, 0, packet.Length); Status = ServerConnectionStatus.Game; break; case ServerConnectionStatus.Game: diagnosticPushStream.BaseStream = new StreamToPushStreamAdapter(outputStream); sendNewGameStream.BaseStream = diagnosticPushStream; sendNewGameStream.Write(packet.Payload, 0, packet.Length); break; } diagnosticPushStream.Finish(); }
public void Send(Packet packet, Stream outputStream) { diagnosticPushStream.DumpPacket(packet); switch (Status) { case ServerConnectionStatus.Initial: diagnosticPushStream.BaseStream = new StreamToPushStreamAdapter(outputStream); // TODO: use seed sent by client diagnosticPushStream.Write(new byte[] { 0xA9, 0xFE, 0x50, 0x50 }, 0, 4); Status = ServerConnectionStatus.PreLogin; break; case ServerConnectionStatus.PreLogin: diagnosticPushStream.BaseStream = new StreamToPushStreamAdapter(outputStream); loginStream.BaseStream = new PushStreamToStreamAdapter(diagnosticPushStream); loginStream.Write(packet.Payload, 0, packet.Length); break; case ServerConnectionStatus.PreGame: diagnosticPushStream.BaseStream = new StreamToPushStreamAdapter(outputStream); diagnosticPushStream.Write(packet.Payload, 0, packet.Length); Status = ServerConnectionStatus.Game; break; case ServerConnectionStatus.Game: diagnosticPushStream.BaseStream = new StreamToPushStreamAdapter(outputStream); sendNewGameStream.BasePushStream = new PushStreamToStreamAdapter(diagnosticPushStream); sendNewGameStream.Write(packet.Payload, 0, packet.Length); break; } diagnosticPushStream.Finish(); }
private ServerConnection CreateEncryptedConnection(ServerConnectionStatus status, IDiagnosticPullStream diagnosticPullStream, IDiagnosticPushStream diagnosticPushStream) { return(new ServerConnection(status, diagnosticPullStream, diagnosticPushStream, newGameKey: new byte[] { 127, 0, 0, 1 }, loginSeed: 0xA9FE5050, loginKey: new LoginEncryptionKey(0x2cc3ed9d, 0xa374227f, 0))); }
public ServerConnection(ServerConnectionStatus status, IDiagnosticPullStream diagnosticPullStream, IDiagnosticPushStream diagnosticPushStream) { this.Status = status; this.diagnosticPullStream = diagnosticPullStream; this.diagnosticPushStream = diagnosticPushStream; huffmanStream = new HuffmanStream(receiveNewGameStream); preLoginStream = new PullStreamToStreamAdapter(diagnosticPullStream); }
public ServerConnection(ServerConnectionStatus status, IDiagnosticPullStream diagnosticPullStream, IDiagnosticPushStream diagnosticPushStream, PacketDefinitionRegistry packetRegistry, EncryptionSetup encryptionSetup) { this.Status = status; this.diagnosticPullStream = diagnosticPullStream; this.diagnosticPushStream = diagnosticPushStream; this.packetRegistry = packetRegistry; this.encryptionSetup = encryptionSetup; this.loginStream = new LoginPushStream(); this.receiveNewGameStream = new ServerNewGamePullStream(); this.sendNewGameStream = new ServerNewGamePushStream(); huffmanStream = new HuffmanStream(new PullStreamToStreamAdapter(receiveNewGameStream)); preLoginStream = new PullStreamToStreamAdapter(diagnosticPullStream); }
private void client_Disconnected(DisconnectedEventArgs e) { _isAuth = false; _connectionStatus = ServerConnectionStatus.Disconnected; mre.Set(); IsAuth = false; ConnectionStatus = ServerConnectionStatus.Disconnected; }
private void client_ConnectFailed(ConnectFailedEventArgs e) { _isAuth = false; _connectionStatus = ServerConnectionStatus.Disconnected; ConnectError = string.Format("Connection to server failed: {0}:{1}", Server, Port); mre.Set(); IsAuth = false; ConnectionStatus = ServerConnectionStatus.Disconnected; }
private void client_Connected(ConnectedEventArgs e) { _connectionStatus = ServerConnectionStatus.Connected; mre.Set(); ConnectionStatus = ServerConnectionStatus.Connected; }
public ServerConnection(ServerConnectionStatus status, IDiagnosticPullStream diagnosticPullStream, IDiagnosticPushStream diagnosticPushStream) : this(status, diagnosticPullStream, diagnosticPushStream, PacketDefinitionRegistryFactory.CreateClassicClient(), EncryptionSetup.Autodetect) { }
public ServerConnection(ServerConnectionStatus status) : this(status, NullDiagnosticPullStream.Instance, NullDiagnosticPushStream.Instance) { }
void SetConnectionStatus(ServerConnectionStatus status) { SafeInvoke(() => { switch (status) { case ServerConnectionStatus.None: tsConnectedStatus.Text = string.Empty; tsConnectedStatus.Image = null; break; case ServerConnectionStatus.Connecting: tsConnectedStatus.Text = "Connecting"; tsConnectedStatus.Image = Resources.free_connecting_16; break; case ServerConnectionStatus.Disconnected: pingTimer.Enabled = false; tsConnectedStatus.Text = "No connection"; tsConnectedStatus.Image = Resources.free_disconnect_16; ConnectClosed(); SetEnabledButton(true); break; case ServerConnectionStatus.Connected: pingTimer.Enabled = true; tsConnectedStatus.Text = "Connected"; tsConnectedStatus.Image = Resources.free_connect_16; ConnectOpened(); break; } }); }
void Instance_ConnectStatusChanged(ServerConnectionStatus status) { SetConnectionStatus(status); if (status == ServerConnectionStatus.Disconnected && cbRestoreConnect.Checked) { RestoreConnect(); } }
private ServerConnection CreateEncryptedConnection(ServerConnectionStatus status, TextDiagnosticPushStream diagnosticStream) => CreateEncryptedConnection(status, NullDiagnosticPullStream.Instance, diagnosticStream);