public static void HandleSelectRealm(WorldSession session, ClientSelectRealm selectRealm) { ServerInfo server = ServerManager.Servers.SingleOrDefault(s => s.Model.Id == selectRealm.RealmId); if (server == null) { throw new InvalidPacketValueException(); } // clicking back or selecting the current realm also triggers this packet, client crashes if we don't ignore it if (server.Model.Id == WorldServer.RealmId) { return; } byte[] sessionKey = RandomProvider.GetBytes(16u); session.EnqueueEvent(new TaskEvent(AuthDatabase.UpdateAccountSessionKey(session.Account, sessionKey), () => { session.EnqueueMessageEncrypted(new ServerNewRealm { SessionKey = sessionKey, GatewayData = new ServerNewRealm.Gateway { Address = server.Address, Port = server.Model.Port }, RealmName = server.Model.Name, Type = (RealmType)server.Model.Type }); })); }
public static void HandleSelectRealm(WorldSession session, ClientSelectRealm selectRealm) { ServerInfo server = ServerManager.Instance.Servers.SingleOrDefault(s => s.Model.Id == selectRealm.RealmId); if (server == null) { throw new InvalidPacketValueException(); } // clicking back or selecting the current realm also triggers this packet, client crashes if we don't ignore it if (server.Model.Id == WorldServer.RealmId) { return; } // TODO: Return proper error packet if server is not online if (!server.IsOnline) { session.EnqueueMessageEncrypted(new ServerForceKick()); return; } byte[] sessionKeyBytes = RandomProvider.GetBytes(16u); string sessionKeyString = BitConverter.ToString(sessionKeyBytes).Replace("-", ""); session.EnqueueEvent(new TaskEvent(DatabaseManager.Instance.AuthDatabase.UpdateAccountSessionKey(session.Account, sessionKeyString), () => { session.EnqueueMessageEncrypted(new ServerNewRealm { SessionKey = sessionKeyBytes, GatewayData = new ServerNewRealm.Gateway { Address = server.Address, Port = server.Model.Port }, RealmName = server.Model.Name, Type = (RealmType)server.Model.Type }); })); }