示例#1
0
        /// <summary>
        ///   Create a new world record and save it
        ///   directly in database.
        /// </summary>
        public WorldServer CreateWorld(WorldServerData worldServerData)
        {
            var record = new WorldServer
            {
                Id   = worldServerData.Id,
                Name = worldServerData.Name,
                RequireSubscription = worldServerData.RequireSubscription,
                RequiredRole        = worldServerData.RequiredRole,
                CharCapacity        = worldServerData.Capacity,
                ServerSelectable    = true,
                Address             = worldServerData.Address,
                Port = worldServerData.Port,
            };

            if (!m_realmlist.TryAdd(record.Id, record))
            {
                throw new Exception("Server already registered");
            }

            Database.Insert(record);

            logger.Info(string.Format("World {0} created", worldServerData.Name));

            return(record);
        }
示例#2
0
        public WorldServer RequestConnection(IPCClient client, WorldServerData world)
        {
            //check ip
            if (!IsIPAllowed(client.Address))
            {
                logger.Error("Server <Id : {0}> ({1}) Try to connect self on the authenfication server but its ip is not allowed (see WorldServerManager.AllowedServerIps)",
                             world.Id, client.Address);
                throw new Exception(string.Format("Ip {0} not allow by auth. server", client.Address));
            }

            WorldServer server;

            if (!m_realmlist.ContainsKey(world.Id))
            {
                server = CreateWorld(world);
            }
            else
            {
                server = m_realmlist[world.Id];
                UpdateWorld(server, world, false);
            }

            server.SetOnline(client);
            Database.Update(server);

            logger.Info("Registered World : \"{0}\" <Id : {1}> <{2}>", world.Name, world.Id, world.Address);

            OnServerAdded(server);
            return(server);
        }
示例#3
0
        public void RemoveWorld(WorldServerData world)
        {
            WorldServer serverById = this.GetServerById(world.Id);

            if (serverById != null && serverById.Connected)
            {
                serverById.SetOffline();
                base.Database.Update(serverById);
                this.OnServerRemoved(this.m_realmlist[world.Id]);
                WorldServerManager.logger.Info <string, int, string>("Unregistered \"{0}\" <Id : {1}> <{2}>", world.Name, world.Id, world.Address);
            }
        }
示例#4
0
        /// <summary>
        ///   Remove a given world from our list
        ///   and set it offline.
        /// </summary>
        /// <param name = "world"></param>
        public void RemoveWorld(WorldServerData world)
        {
            var server = GetServerById(world.Id);

            if (server != null && server.Connected)
            {
                server.SetOffline();
                Database.Update(server);

                OnServerRemoved(m_realmlist[world.Id]);

                logger.Info("Unregistered \"{0}\" <Id : {1}> <{2}>", world.Name, world.Id, world.Address);
            }
        }
示例#5
0
 public void UpdateWorld(WorldServer record, WorldServerData worldServerData, bool save = true)
 {
     if (record.Id != worldServerData.Id)
     {
         throw new Exception("Ids don't match");
     }
     record.Name                = worldServerData.Name;
     record.Address             = worldServerData.Address;
     record.Port                = worldServerData.Port;
     record.CharCapacity        = worldServerData.Capacity;
     record.RequiredRole        = worldServerData.RequiredRole;
     record.RequireSubscription = worldServerData.RequireSubscription;
     if (save)
     {
         base.Database.Update(record);
     }
 }
示例#6
0
        public WorldServer CreateWorld(WorldServerData worldServerData)
        {
            WorldServer worldServer = new WorldServer
            {
                Id   = worldServerData.Id,
                Name = worldServerData.Name,
                RequireSubscription = worldServerData.RequireSubscription,
                RequiredRole        = worldServerData.RequiredRole,
                CharCapacity        = worldServerData.Capacity,
                ServerSelectable    = true,
                Address             = worldServerData.Address,
                Port = worldServerData.Port
            };

            if (!this.m_realmlist.TryAdd(worldServer.Id, worldServer))
            {
                throw new Exception("Server already registered");
            }
            base.Database.Insert(worldServer);
            WorldServerManager.logger.Info(string.Format("World {0} created", worldServerData.Name));
            return(worldServer);
        }
示例#7
0
        public WorldServer RequestConnection(IPCClient client, WorldServerData world)
        {
            if (!this.IsIPAllowed(client.Address))
            {
                WorldServerManager.logger.Error <int, IPAddress>("Server <Id : {0}> ({1}) Try to connect self on the authenfication server but its ip is not allowed (see WorldServerManager.AllowedServerIps)", world.Id, client.Address);
                throw new Exception(string.Format("Ip {0} not allow by auth. server", client.Address));
            }
            WorldServer worldServer;

            if (!this.m_realmlist.ContainsKey(world.Id))
            {
                worldServer = this.CreateWorld(world);
            }
            else
            {
                worldServer = this.m_realmlist[world.Id];
                this.UpdateWorld(worldServer, world, false);
            }
            worldServer.SetOnline(client);
            base.Database.Update(worldServer);
            WorldServerManager.logger.Info <string, int, string>("Registered World : \"{0}\" <Id : {1}> <{2}>", world.Name, world.Id, world.Address);
            this.OnServerAdded(worldServer);
            return(worldServer);
        }
示例#8
0
 public HandshakeMessage(WorldServerData world)
 {
     World = world;
 }