示例#1
0
        static bool ParseWorldServers(XmlNodeList worldServers)
        {
            if (worldServers.Count == 0)
            {
                Console.WriteLine("No worldservers in loginserver config.");
                return(false);
            }
            foreach (XmlNode node in worldServers)
            {
                if (node["Address"] == null)
                {
                    Console.WriteLine("WorldServer is missing Address element.");
                    return(false);
                }
                if (node["Worldmaps"] == null)
                {
                    Console.WriteLine("WorldServer is missing Worldmaps element.");
                    return(false);
                }
                string maps    = node["Worldmaps"].InnerText;
                string address = node["Address"].InnerText;
                uint[] mapIds;
                if (maps == "all")
                {
                    DataObject[] objs = DataServer.Database.SelectAllObjects(typeof(DBWorldMap));
                    if (objs.Length == 0)
                    {
                        Console.WriteLine("No world maps in database!");
                        return(false);
                    }
                    mapIds = new uint[objs.Length];
                    for (int i = 0; i < objs.Length; i++)
                    {
                        mapIds[i] = objs[i].ObjectId;
                    }
                }
                else
                {
                    string[] split = maps.Split(' ');
                    mapIds = new uint[split.Length];
                    for (int i = 0; i < split.Length; i++)
                    {
                        try
                        {
                            mapIds[i] = uint.Parse(split[i]);
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("Error parsing worldmap ids on worldserver: " + address);
                            return(false);
                        }
                    }
                }

                ClientBase client;
                if (address == "local")
                {
                    if (localWorldServerStarted == true)
                    {
                        Console.WriteLine("There can only be one local worldserver!");
                        return(false);
                    }

                    client = StartLocalWorldServer();
                    if (client == null)
                    {
                        Console.WriteLine("Failed to start local worldserver.");
                        return(false);
                    }
                }
                else
                {
                    IPEndPoint iep = GetIPEndPoint(address);
                    if (iep == null)
                    {
                        Console.WriteLine("Error parsing worldserver address " + address);
                        return(false);
                    }
                    Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    if (iep.Port == 0)
                    {
                        iep.Port = 9003;
                    }
                    Console.WriteLine("Connecting to worldserver " + iep.ToString());
                    try
                    {
                        sock.Connect(iep);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        return(false);
                    }
                    client = new ClientBase(sock);
                }

                try
                {
                    LoginServer.SetWorldServer(client, mapIds);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return(false);
                }
            }
            return(true);
        }