LoginServer.Systems.LoadServers C# (CSharp) Method

LoadServers() public static method

public static LoadServers ( string serverFile, UInt16 defaultPort ) : int
serverFile string
defaultPort System.UInt16
return int
        public static int LoadServers(string serverFile, UInt16 defaultPort)
        {
            try
            {
                if (File.Exists(Environment.CurrentDirectory + @"\Settings\" + serverFile))
                {
                    Systems.Ini ini = new Systems.Ini(Environment.CurrentDirectory + @"\Settings\" + serverFile);
                    string[] sList = null;
                    sList = ini.GetEntryNames("SERVERS");
                    if (sList!=null && sList.Length > 0)
                    {
                        foreach (string sectname in sList)
                        {
                            string sName = ini.GetValue("SERVERS", sectname, "");
                            Systems.SRX_Serverinfo SServerInfo = new Systems.SRX_Serverinfo();
                            SServerInfo.id = Convert.ToUInt16(ini.GetValue(sName, "id", 0));
                            SServerInfo.ip = ini.GetValue(sName, "ip", "127.0.0.1");
                            SServerInfo.wan = ini.GetValue(sName, "wan", "127.0.0.1");
                            SServerInfo.name = ini.GetValue(sName, "name", sName);
                            SServerInfo.port = Convert.ToUInt16(ini.GetValue(sName, "port", defaultPort));
                            SServerInfo.ipcport = Convert.ToUInt16(ini.GetValue(sName, "ipcport", "15791"));
                            SServerInfo.code = ini.GetValue(sName, "code", "t");
                            SServerInfo.lan_wan = ini.GetValue(sName, "lan_wan", "0") == "1" ? true : false;
                            SServerInfo.Version = Convert.ToInt32(ini.GetValue(sName, "version", 0));
                            if (SServerInfo.ip == "" || SServerInfo.port == 0 || SServerInfo.id == 0 || SServerInfo.ipcport == 0 || GSList.ContainsKey(SServerInfo.id))
                            {
                                Console.WriteLine("IPC: Error on Server "+ sName +" in "+ serverFile +": field missing or id already in use!");
                                SServerInfo = null;
                            }
                            else
                            {
                                GSList.Add(SServerInfo.id, SServerInfo);
                            }
                        }
                    }
                    if (GSList.Count() > 0)
                    {
                        string servers = "Server";
                        if (GSList.Count > 1) servers = "Servers";
                        Console.WriteLine("[INFO] Loaded " + GSList.Count() + " " + servers + " from server settings");
                    }
                    else
                    {
                        Systems.SRX_Serverinfo GServer = new Systems.SRX_Serverinfo();
                        GServer.id = 1;
                        GServer.ip = "127.0.0.1";
                        if (Global.Network.multihomed)
                        {
                            //Multihomed
                        }
                        else
                        {
                            GServer.extip = Global.Network.LocalIP;
                        }
                        GServer.name = "[DARKEMU] Default";
                        GServer.port = defaultPort;
                        GServer.ipcport = 15791;
                        GServer.code = "t";
                        GSList.Add(GServer.id, GServer);
                    }
                    sList = null;
                    ini = null;
                    return GSList.Count();
                }
                else
                {
                    Systems.SRX_Serverinfo GServer = new Systems.SRX_Serverinfo();
                    GServer.id = 1;
                    GServer.ip = "127.0.0.1";
                    if (Global.Network.multihomed)
                    {
                        //Multihomed
                    }
                    else
                    {
                        //No servers
                        GServer.extip = Global.Network.LocalIP;
                    }
                    GServer.name = "[DARKEMU "+ Global.Versions.appVersion +"]";
                    GServer.port = defaultPort;
                    GServer.ipcport = 15791;
                    GServer.code = "";
                    GSList.Add(GServer.id, GServer);
                    return -1;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error loading GameServer settings "+ ex +"");
                return -2;
            }
        }

Usage Example

コード例 #1
0
ファイル: Maincs.cs プロジェクト: uvbs/DarkEmu
        //Run
        #region run
        public Maincs()
        {
            //Set default settings
            #region Default Settings
            int    LSPort  = 15779;
            int    IPCPort = 15779;
            string LSIP    = "";
            string IPCIP   = "0.0.0.0";
            Systems.DownloadServer = "";
            #endregion

            //Initialize main
            InitializeComponent();
            //Set ini
            LoginServer.Systems.Ini ini = null;
            //Load settings
            #region Load Settings
            try
            {
                if (File.Exists(Environment.CurrentDirectory + @"\Settings\Settings.ini"))
                {
                    ini     = new LoginServer.Systems.Ini(Environment.CurrentDirectory + @"\Settings\Settings.ini");
                    LSPort  = Convert.ToInt32(ini.GetValue("Server", "port", 15779));
                    LSIP    = ini.GetValue("Server", "ip", "").ToString();
                    IPCPort = Convert.ToInt32(ini.GetValue("IPC", "port", 15779));
                    IPCIP   = ini.GetValue("IPC", "ip", "").ToString();
                    Systems.DownloadServer = ini.GetValue("Patch_Server", "ip", "");
                    Systems.DownloadPort   = Convert.ToInt16(ini.GetValue("Patch_Server", "port", ""));
                    ini = null;
                    Activity("[INFO] Loaded your ip settings successfully");
                }
                else
                {
                    Activity("Could not find your settings.ini using defaults.");
                }
            }
            catch (Exception)
            {
                return;
            }
            #endregion

            #region get local ip

            Network.multihomed = false;
            if (Network.LocalIP == "")
            {
                IPAddress[] lIpList = Dns.GetHostAddresses(Dns.GetHostName());
                foreach (IPAddress aIP in lIpList)
                {
                    if (aIP.AddressFamily.Equals(AddressFamily.InterNetwork))
                    {
                        if (!aIP.Equals(IPAddress.Loopback))
                        {
                            if (Network.LocalIP != "")
                            {
                                Network.multihomed = true;
                            }
                            else
                            {
                                Network.LocalIP = aIP.ToString();
                            }
                        }
                    }
                }
            }
            #endregion

            Systems.Server net = new Systems.Server();

            net.OnConnect += new Systems.Server.dConnect(_OnClientConnect);
            net.OnError   += new Systems.Server.dError(_ServerError);

            Systems.Client.OnReceiveData += new Systems.Client.dReceive(_OnReceiveData);
            Systems.Client.OnDisconnect  += new Systems.Client.dDisconnect(_OnClientDisconnect);
            //Content.Patches.LoadPatches(this);
            Systems.Load_NewsList(this, newsform);

            try
            {
                net.Start(LSIP, LSPort);
            }
            catch (Exception ex)
            {
                Activity("Starting Server error " + ex + "");
            }

            #region Load GameServers
            Systems.LoadServers("GameServers.ini", 15780, this, servers);
            #endregion

            #region IPC Listener
            IPCServer            = new Servers.IPCServer();
            IPCServer.OnReceive += new Servers.IPCServer.dOnReceive(OnIPC);
            try
            {
                IPCServer.Start(IPCIP, IPCPort);
                foreach (KeyValuePair <int, Systems.SRX_Serverinfo> GS in Systems.GSList)
                {
                    byte[] rqPacket = IPCServer.PacketRequestServerInfo(IPCPort);
                    Servers.IPCenCode(ref rqPacket, GS.Value.code);
                    IPCServer.Send(GS.Value.ip, GS.Value.ipcport, rqPacket);
                    rqPacket = null;
                }
            }
            catch (Exception ex)
            {
                Activity("IPC start error " + ex + "");
            }
            #endregion
            Activity("[NET] Listening for gameserver connection...");
            this.ShowDialog();
            while (true)
            {
                Thread.Sleep(100);
                foreach (KeyValuePair <int, Systems.SRX_Serverinfo> SSI in Systems.GSList)
                {
                    if (SSI.Value.status != 0 && SSI.Value.lastPing.AddMinutes(5) < DateTime.Now) // server unavailable
                    {
                        SSI.Value.status = 0;
                        Activity("[ERROR] Server " + SSI.Value.name + " has timed out");
                    }
                }
            }
        }
All Usage Examples Of LoginServer.Systems::LoadServers