Esempio n. 1
0
        public byte Add(Entities.Server s, string name, string ip, int port, Core.Enums.ServerTypes type) {

            byte serverId = 0;

            for (byte i = 1; i <= MAX_SERVERS; i++) {
                if (!servers.ContainsKey(i)) {
                    serverId = i;
                    break;
                }
            }

            if (serverId > 0) {
                // Add server to the hashtable :p
                 s.OnAuthorize(serverId, name, ip, port, type);
                 servers.Add(serverId, s);
            }

            return serverId;
        }
        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();
            }
        }