private void PacketHandler_0x10_ClientJoin(Client client, ClientPacket packet) { var seed = packet.ReadByte(); var keyLength = packet.ReadByte(); var key = packet.Read(keyLength); var name = packet.ReadString8(); var id = packet.ReadUInt32(); var redirect = ExpectedConnections[id]; if (redirect.Matches(name, key, seed)) { ((IDictionary)ExpectedConnections).Remove(id); client.EncryptionKey = key; client.EncryptionSeed = seed; if (redirect.Source is Lobby) { var x60 = new ServerPacket(0x60); x60.WriteByte(0x00); x60.WriteUInt32(Game.NotificationCrc); client.Enqueue(x60); } } }
private void PacketHandler_0x10_ClientJoin(Client client, ClientPacket packet) { var seed = packet.ReadByte(); var keyLength = packet.ReadByte(); var key = packet.Read(keyLength); var name = packet.ReadString8(); var id = packet.ReadUInt32(); var redirect = ExpectedConnections[id]; if (Game.World.WorldData.TryGetAuthInfo(name, out AuthInfo login)) { login.CurrentState = UserState.Login; login.Save(); } if (redirect.Matches(name, key, seed)) { ((IDictionary)ExpectedConnections).Remove(id); client.EncryptionKey = key; client.EncryptionSeed = seed; if (redirect.Source is Lobby || redirect.Source is World) { var x60 = new ServerPacket(0x60); x60.WriteByte(0x00); x60.WriteUInt32(Game.NotificationCrc); client.Enqueue(x60); } } }
private void PacketHandler_0x68_RequestHomepage(Client client, ClientPacket packet) { var x03 = new ServerPacket(0x66); x03.WriteByte(0x03); x03.WriteString8("http://www.hybrasyl.com"); client.Enqueue(x03); }
public virtual void AcceptConnection(IAsyncResult ar) { // TODO: @norrismiv async callbacks+inheritance? and/or can these callbacks suck less? AllDone.Set(); if (!Active) { return; } Socket handler; Socket clientSocket; try { clientSocket = (Socket)ar.AsyncState; handler = clientSocket.EndAccept(ar); } catch (ObjectDisposedException e) { GameLog.Error($"Disposed socket {e.Message}"); return; } Client client = new Client(handler, this); Clients.TryAdd(handler.Handle, client); GlobalConnectionManifest.RegisterClient(client); if (this is Lobby) { var x7E = new ServerPacket(0x7E); x7E.WriteByte(0x1B); x7E.WriteString("CONNECTED SERVER\n"); client.Enqueue(x7E); GameLog.DebugFormat("Lobby: AcceptConnection occuring"); GameLog.DebugFormat("Lobby: cid is {0}", client.ConnectionId); } else if (this is Login) { GameLog.DebugFormat("Login: AcceptConnection occuring"); GameLog.DebugFormat("Login: cid is {0}", client.ConnectionId); } else if (this is World) { GameLog.DebugFormat("World: AcceptConnection occuring"); GameLog.DebugFormat("World: cid is {0}", client.ConnectionId); } try { handler.BeginReceive(client.ClientState.Buffer, 0, client.ClientState.Buffer.Length, 0, new AsyncCallback(ReadCallback), client.ClientState); GameLog.DebugFormat("AcceptConnection returning"); clientSocket.BeginAccept(new AsyncCallback(AcceptConnection), clientSocket); } catch (SocketException e) { Game.ReportException(e); handler.Close(); } }
private void PacketHandler_0x4B_RequestNotification(Client client, ClientPacket packet) { var x60 = new ServerPacket(0x60); x60.WriteByte(0x01); x60.WriteUInt16((ushort)Game.Notification.Length); x60.Write(Game.Notification); client.Enqueue(x60); }
private void PacketHandler_0x00_ClientVersion(Client client, ClientPacket packet) { var x00 = new ServerPacket(0x00); x00.WriteByte(0x00); x00.WriteUInt32(Game.ServerTableCrc); x00.WriteByte(client.EncryptionSeed); x00.WriteByte((byte)client.EncryptionKey.Length); x00.Write(client.EncryptionKey); client.Enqueue(x00); }
public override void AcceptConnection() { if (TcpListener.Pending()) { var socket = TcpListener.AcceptSocket(); var client = new Client(socket, this); var x7E = new ServerPacket(0x7E); x7E.WriteByte(0x1B); x7E.WriteString("CONNECTED SERVER\n"); client.Enqueue(x7E); var thread = new Thread(client.ClientLoop); thread.Start(); } }
private void PacketHandler_0x57_ServerTable(Client client, ClientPacket packet) { var mismatch = packet.ReadByte(); if (mismatch == 1) { var x56 = new ServerPacket(0x56); x56.WriteUInt16((ushort)Game.ServerTable.Length); x56.Write(Game.ServerTable); client.Enqueue(x56); } else { var server = packet.ReadByte(); var redirect = new Redirect(client, this, Game.Login, "socket", client.EncryptionSeed, client.EncryptionKey); client.Redirect(redirect); } }
private void PacketHandler_0x57_ServerTable(Client client, ClientPacket packet) { var mismatch = packet.ReadByte(); if (mismatch == 1) { var x56 = new ServerPacket(0x56); x56.WriteUInt16((ushort)Game.ServerTable.Length); x56.Write(Game.ServerTable); Logger.InfoFormat("ServerTable: Sent: {0}", BitConverter.ToString(x56.ToArray())); client.Enqueue(x56); } else { var server = packet.ReadByte(); var redirect = new Redirect(client, this, Game.Login, "socket", client.EncryptionSeed, client.EncryptionKey); client.Redirect(redirect); } }