/// <summary> /// Displayes a list of workds /// </summary> /// <param name="args">Arguments</param> static void ShowWorld(string[] args) { Console.WriteLine(""); Console.WriteLine("Worlds\tPlayers\tIp"); Console.WriteLine("================================================"); foreach (KeyValuePair <byte, ServerInfo2> pair in ServerManager2.Instance.server) { ServerInfo2 info = pair.Value; Console.WriteLine("{0}\t{1}\t{2}", info.name, info.Players, info.IP); } }
// 0x000B public void CM_RELEASESESSION(CMSG_RELEASESESSION cpkt) { Trace.TraceWarning(string.Format("Release session: {0}", cpkt.Session)); //Update the delay ServerInfo2 info = null; if (Singleton.Database.ReleaseSessionId(cpkt.Session) && ServerManager2.Instance.server.TryGetValue(WorldId, out info)) { info.Players = info.Players > 0 ? info.Players - 1 : 0; } }
// 0x000A public void CM_PONG(CMSG_PONG cpkt) { //Delay between ping and pong reply int delay = Environment.TickCount - PingTick; //Update the delay ServerInfo2 info = null; if (ServerManager2.Instance.server.TryGetValue(WorldId, out info)) { info.LastPing = delay; } }
static void SessionKill(string[] args) { if (args.Length != 3) { Console.WriteLine("Wrong argument count"); return; } LoginResult result; if (!Singleton.Database.Login(args[2], out result)) { Console.WriteLine("User does not exists"); return; } else { ServerInfo2 info = null; if (result.ative_session > 0) { //SERVER DOES NOT EXISTS if (!ServerManager2.Instance.server.TryGetValue((byte)result.last_server, out info)) { Console.WriteLine("Server does not exists"); } //CHECK IF SERVER IS ALIVE else if (info.client != null && info.client.IsConnected) { info.client.SM_KILLSESSION(result.ative_session); } else { Console.WriteLine("Server is not online"); } } } }
// 0x0001 public void CM_WORLDINSTANCE(CMSG_WORLDINSTANCE cpkt) { ServerInfo2 info = null; byte error = 0; byte WorldId = 0; try { //socket.RemoteEndPoint. IPEndPoint IPEndPoint = (IPEndPoint)socket.RemoteEndPoint; WorldId = cpkt.WorldId; //SERVER DOES NOT EXISTS if (!ServerManager2.Instance.server.TryGetValue(WorldId, out info)) { error = 3; } //IF PROOF IS VALID else if (info.proof != cpkt.Proof) { error = 1; } //CHECK IF SERVER IS ALIVE else if (info.client != null && info.client.IsConnected && cpkt.IsReconnected == 0) { error = 2; } //IF EVERYTHING IS OKAY else { this.WorldId = WorldId; info.GenerateKey(); info.client = this; info.MaxPlayers = cpkt.MaximumPlayers; info.Players = 0; info.InMaintainceMode = false; info.IP = IPEndPoint.Address; info.Port = cpkt.Port; info.RequiredAge = cpkt.RequiredAge; Console.WriteLine("world connection established"); if (cpkt.IsReconnected == 0) { Singleton.Database.ClearWorldSessions(this.WorldId); } SMSG_SETRATES spkt = new SMSG_SETRATES(); spkt.IsAdDisplayed = Managers.ConsoleCommands.ShowAdvertisment ? (byte)1 : (byte)0; this.Send((byte[])spkt); } } finally { Thread.Sleep(500); SMSG_WORLDINSTANCEACK spkt = new SMSG_WORLDINSTANCEACK(); spkt.Result = error; if (error == 0) { spkt.NextKey = info.KEY; } this.Send((byte[])spkt); } }