protected override void Process(Entities.Server s) { uint ErrorCode = GetuInt(0); if (ErrorCode == 1) { string globalKey = GetString(1); string serverName = GetString(2); string ipAddress = GetString(3); int port = GetInt(4); byte type = GetByte(5); Core.Enums.ServerTypes enumType = Core.Enums.ServerTypes.Normal; if (System.Enum.IsDefined(typeof(Core.Enums.ServerTypes), type)) { enumType = (Core.Enums.ServerTypes)type; } else { s.Disconnect(); return; } byte serverId = Managers.ServerManager.Instance.Add(s, serverName, ipAddress, port, enumType); if (serverId > 0) { s.Send(new Packets.Internal.Authorize(serverId)); ServerLogger.Instance.Append(ServerLogger.AlertLevel.Information, "Authorized a new server as " + serverId.ToString()); } else { s.Send(new Packets.Internal.Authorize(Core.Enums.Internal.AuthorizationErrorCodes.MaxServersReached)); s.Disconnect(); ServerLogger.Instance.Append(ServerLogger.AlertLevel.ServerError, "Rejecting Server " + s.Displayname + ". Limit reached"); } } else { s.Disconnect(); } }
protected override void Process(Entities.Server s) { uint ErrorCode = GetuInt(0); if (ErrorCode == Core.Networking.Constants.ERROR_OK) { string globalKey = GetString(1); string serverName = GetString(2); string ipAddress = GetString(3); int port = GetInt(4); byte type = GetByte(5); if (globalKey == Config.GAMESERVERKEY) //attempt to match server keys { Core.GameConstants.ServerTypes serverType; //check for an existing server type. if (System.Enum.IsDefined(typeof(Core.GameConstants.ServerTypes), type)) { serverType = (Core.GameConstants.ServerTypes)type; //check if name is already in use, reject server if affirmative foreach (Entities.Server authorizedServer in Managers.ServerManager.Instance.GetAllAuthorized()) { //Already authorized? if (authorizedServer.IP == ipAddress) { s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.EntityAlreadyAuthorized)); Log.Information("Rejected server " + serverName + " . Server already authorized"); s.Disconnect(); return; } if (authorizedServer.ServerName == serverName) { s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.ServerNameInUse)); Log.Information("Rejected server " + serverName + " . Name already in use"); s.Disconnect(); return; } } byte serverId = Managers.ServerManager.Instance.Add(s, serverName, ipAddress, port, serverType); if (serverId > 0) { s.Send(new Packets.Internal.Authorize(serverId)); Log.Information("New server registered as: " + serverName); } else { s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.ServerLimitReached)); s.Disconnect(); } } else { s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.InvalidServerType)); s.Disconnect(); } } else { s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.InvalidKeyOrSession)); Log.Information("Rejecting server " + serverName + ": invalid key"); s.Disconnect(); } } else { s.Disconnect(); } }