public static void Load() { #region Folder Check if ( !File.Exists(Environment.CurrentDirectory + @"\Config\LoginServer.ini") && !File.Exists(Environment.CurrentDirectory + @"\Config\IPCServer.ini") && !File.Exists(Environment.CurrentDirectory + @"\Config\GameServer.ini") && !File.Exists(Environment.CurrentDirectory + @"\News") ) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Could not find System Files:\n{0} OR \n{1} OR \n{2} OR \nNews Folder", @"\Config\LoginServer.ini", @"\Config\IPCServer.ini", @"\Config\GameServer.ini"); System.Threading.Thread.Sleep(5000); Environment.Exit(0); } else { Ini settings; #endregion #region Login Server settings = new Ini(Environment.CurrentDirectory + @"\Config\LoginServer.ini"); Serverdef.Loginserver_PORT = Convert.ToInt32(settings.GetValue("LS_Information", "Port", 15779)); Serverdef.Loginserver_IP = settings.GetValue("LS_Information", "Ipadress", "").ToString(); Serverdef.SilkroadClientVersion = settings.GetValue("LS_Information", "Version", 0); Serverdef.SilkroadClientLocale = (byte)settings.GetValue("LS_Information", "Locale", 0); settings = null; #endregion #region IPC Server settings = new Ini(Environment.CurrentDirectory + @"\Config\IPCServer.ini"); Serverdef.IPCPort = Convert.ToUInt16(settings.GetValue("IPC_Information", "Port", 15779)); Serverdef.IPCIP = settings.GetValue("IPC_Information", "Ipadress", "").ToString(); settings = null; #endregion #region Game Server settings = new Ini(Environment.CurrentDirectory + @"\Config\GameServer.ini"); string[] server_list = null; server_list = settings.GetEntryNames("SERVERS"); if (server_list != null && server_list.Length > 0) { foreach (string sectname in server_list) { string selectedserver = settings.GetValue("SERVERS", sectname, ""); Serverdef.ServerDetails Serverinformation = new Serverdef.ServerDetails(); Serverinformation.id = Convert.ToUInt16(settings.GetValue(selectedserver, "id", 0)); Serverinformation.ip = settings.GetValue(selectedserver, "ip", ""); Serverinformation.name = settings.GetValue(selectedserver, "name", selectedserver); Serverinformation.port = Convert.ToUInt16(settings.GetValue(selectedserver, "port", 15780)); Serverinformation.ipcport = Convert.ToUInt16(settings.GetValue(selectedserver, "ipcport", 15780)); Serverinformation.code = settings.GetValue(selectedserver, "code", ""); if (Serverinformation.ip == "" || Serverinformation.port == 0 || Serverinformation.id == 0 || Serverinformation.ipcport == 0 || Serverdef.Serverlist.ContainsKey(Serverinformation.id)) { Console.WriteLine("Error " + selectedserver + " in " + @"\Config\GameServer.ini" + ": field missing or id already in use!"); Serverinformation = null; } else { Console.WriteLine("Added {0} To the serverlist", Serverinformation.name); } Serverdef.Serverlist.Add(Serverinformation.id, Serverinformation); } } server_list = null; settings = null; Console.WriteLine(Serverdef.TextDivider); #endregion #region NEWS int news_count = 0; string[] fileEntries = Directory.GetFiles(Environment.CurrentDirectory + @"\News", @"????-??-??.*"); if (fileEntries.Length > 0) { Array.Sort(fileEntries); Array.Reverse(fileEntries); foreach (string fName in fileEntries) { if (news_count < 10) { DateTime aDate; if (DateTime.TryParse(Path.GetFileNameWithoutExtension(fName), out aDate)) { using (StreamReader aFile = new StreamReader(fName)) { string line = aFile.ReadLine(); if (line != null) { string line2 = aFile.ReadToEnd(); if (line2 != null) { Serverdef.NewsList Item = new Serverdef.NewsList(); Item.Title = line; Item.Article = line2; Item.Day = (short)aDate.Day; Item.Month = (short)aDate.Month; Item.Year = (short)aDate.Year; Serverdef.News_List.Add(Item); news_count++; } } } } } else { Console.WriteLine("Please remove old news, only 10 are loaded!"); } Console.WriteLine("Loaded {0} News Articles\n", news_count); Console.WriteLine(Serverdef.TextDivider); } } else { Console.WriteLine("There is no news to be loaded\n"); } #endregion } }
public static void OnIPC(System.Net.Sockets.Socket aSocket, EndPoint ep, byte[] data) { //Wrap our code inside a try to catch bad exception errors try { //Make sure the data lenght is equal to six or higher if (data.Length >= 6) { //If so we continue and Set pServer information ushort pServer = (ushort)(data[0] + (data[1] << 8)); Serverdef.ServerDetails remoteGameServer = Serverdef.GetServerByEndPoint(((IPEndPoint)ep).Address.ToString(), pServer); if (remoteGameServer != null) { //Decode checksum data CLFramework.Servers.IPCdeCode(ref data, remoteGameServer.code); //Command data byte pCmd = data[3]; //Data lenght int dLen = (data[4] + (data[5] << 8)); //Checksum byte byte crc = CLFramework.Servers.BCRC(data, data.Length - 1); //If the checksum codes dont match up if (data[data.Length - 1] != crc) // wrong CRC { //Write the error information to console Console.WriteLine("Error Code for: " + remoteGameServer.name + " are not the same"); //Return back return; } //If checksum is ok if (data.Length >= (dLen + 6)) { if (pCmd == (byte)IPCCommand.IPC_INFO_SERVER) { if (data.Length >= 11) { remoteGameServer.maxSlots = (ushort)(data[7] + (data[8] << 8)); remoteGameServer.usedSlots = (ushort)(data[9] + (data[10] << 8)); remoteGameServer.lastPing = DateTime.Now; //Console.WriteLine("[SERVER] Server: " + remoteGameServer.name + ": players online " + remoteGameServer.usedSlots + "/" + remoteGameServer.maxSlots + ""); if (remoteGameServer.status == 0 && data[6] != 0) { Console.WriteLine("[SERVER] Server: " + remoteGameServer.name + " is now online"); } if (remoteGameServer.status != 0 && data[6] == 0) { Console.WriteLine("[SERVER] Server: " + remoteGameServer.name + " is now in check state"); } remoteGameServer.status = data[6]; } else { } } else if (pCmd == (byte)IPCCommand.IPC_INFO_LOGIN) { if (dLen >= 4) { ushort IPCid = (ushort)(data[6] + (data[7] << 8)); ushort IPCResult = (ushort)(data[8] + (data[9] << 8)); byte sLen = data[10]; lock (Serverdef.IPCResultList) { if (Serverdef.IPCResultList.ContainsKey(IPCid)) { Serverdef.IPCResultList[IPCid].ResultCode = IPCResult; if (sLen > 0) { Serverdef.IPCResultList[IPCid].BanReason = ASCIIEncoding.ASCII.GetString(data, 11, sLen); } } else { Console.WriteLine("Error ResultList mismatch"); } } } } else { Console.WriteLine("Error unknown command recevied"); } } else { Console.WriteLine("Error data to short"); } } else { Console.WriteLine("Error can't find the GameServer " + ((IPEndPoint)ep).Address.ToString() + ""); } } else { Console.WriteLine("Error packet to short from " + ep.ToString() + ""); } } catch (Exception ex) { CLFramework.Log.Exception(ex); } }