} //FOLD00 // Разпознание колонок входного файла public bool Preview() //fold00 { int Choice = 0; const int MAX_COL = 100; // Максимальное кол-во столбцов в файле string[] Lines = new string[HEIGHT]; int[] Sizes = new int[MAX_COL]; if (!Reader.Open(FileName, CharSet)) { Reader.Close(); return(false); } TotalLines = Reader.Count; int I, LineNum = 0; for (I = 0; I < MAX_COL; I++) { Sizes[I] = 0; } for (I = 0; I < HEIGHT; I++) { Lines[I] = CAbc.EMPTY; } while (Reader.Read()) { if (++LineNum > HEIGHT - 2) { break; } for (I = 1; (I < MAX_COL) && (I <= Reader.FieldCount); I++) { Sizes[I] = (Reader[I].Trim().Length > Sizes[I]) ? Reader[I].Trim().Length : Sizes[I]; Lines[LineNum - 1] += ( (I > 1) ? TAB.ToString() : CAbc.EMPTY ) + __.FixUkrI(Reader[I].Trim()); } } Reader.Close(); if (LineNum == 0) { return(false); } string Line; string[] Columns; CConsole.Clear(); TotalColumns = 0; for (I = 0; I < LineNum; I++) { if (Lines[I] == null) { break; } if (Lines[I] == CAbc.EMPTY) { break; } Columns = Lines[I].Split(TAB); if (Columns == null) { continue; } if (Columns.Length == 0) { continue; } Line = " "; int J = 0; foreach (string Column in Columns) { Line += ( (J > 0) ? " | " : CAbc.EMPTY ) + __.Left(Column, Sizes[J + 1]); J++; } TotalColumns = (J > TotalColumns) ? J : TotalColumns; __.Print(__.Left(Line, WIDTH - 1)); } if (TotalColumns == 0) { return(false); } __.Print(__.Replicate("_", WIDTH - 1), "Для продолжения нажмите ENTER.Для выхода - ESC."); if (!CConsole.WaitForEscOrEnter()) { return(false); } for (int J = 0; J < TotalColumns; J++) { CConsole.Clear(); for (I = 0; (I < LineNum) && (I < HEIGHT - 1); I++) { Columns = Lines[I].Split(TAB); if (Columns == null) { continue; } if (Columns.Length <= J) { continue; } __.Print(__.Left(Columns[J], WIDTH - 1)); } int MenuCount = 1; if (FieldFromFile[FLD_SUMA] == 0) { MenuCount++; } if (FieldFromFile[FLD_CREDITACC] == 0) { MenuCount++; } if (FieldFromFile[FLD_CREDITNAME] == 0) { MenuCount++; } if (FieldFromFile[FLD_CREDITSTATE] == 0) { MenuCount++; } string[] MenuItems = new string[MenuCount]; int[] MenuKinds = new int[MenuCount]; I = 0; MenuItems[I] = " ( пропустить ) "; MenuKinds[I] = 0; if (FieldFromFile[FLD_SUMA] == 0) { I++; MenuItems[I] = " сумма"; MenuKinds[I] = FLD_SUMA; } if (FieldFromFile[FLD_CREDITACC] == 0) { I++; MenuItems[I] = " кредит-счет"; MenuKinds[I] = FLD_CREDITACC; } if (FieldFromFile[FLD_CREDITNAME] == 0) { I++; MenuItems[I] = " название кт.счета"; MenuKinds[I] = FLD_CREDITNAME; } if (FieldFromFile[FLD_CREDITSTATE] == 0) { I++; MenuItems[I] = "идент код. кт.счета"; MenuKinds[I] = FLD_CREDITSTATE; } Choice = CConsole.GetMenuChoice(MenuItems); if (Choice == 0) { break; } if (Choice > 1) { FieldFromFile[MenuKinds[Choice - 1]] = J + 1; } } return(true); } //FOLD00
} //FOLD00 // Проверка всех строк входного файла public string CheckAll(CCommand Command, string BankCode) //fold00 { string Result = CAbc.EMPTY , CmdText = CAbc.EMPTY , SavedCode = CAbc.EMPTY , AboutError = CAbc.EMPTY , DebitIBAN = CAbc.EMPTY , CreditIBAN = CAbc.EMPTY , DebitMoniker = CAbc.EMPTY , CreditMoniker = CAbc.EMPTY; bool HaveError = false; int LineNum = 0; FieldValues[FLD_DEBITMFO] = BankCode; FieldValues[FLD_CREDITMFO] = BankCode; if (!Reader.Open(FileName, CharSet)) { Reader.Close(); return("Ошибка чтения исходного файла !"); } SavedCode = FieldValues[FLD_CODE]; while (Reader.Read()) { LineNum++; PrepareFields(); DebitMoniker = FieldValues[FLD_DEBITACC].Replace("'", "`").Trim(); CreditMoniker = FieldValues[FLD_CREDITACC].Replace("'", "`").Trim(); if (DebitMoniker[0] > '9') { DebitIBAN = DebitMoniker; DebitMoniker = CAbc.EMPTY; } if (CreditMoniker[0] > '9') { CreditIBAN = CreditMoniker; CreditMoniker = CAbc.EMPTY; } CConsole.ShowBox(CAbc.EMPTY, " Проверяется строка" + __.StrI(LineNum, 5) + " ", CAbc.EMPTY); CmdText = "exec dbo.pMega_OpenGate_CheckPalvis " + " @Code = '" + FieldValues[FLD_CODE].Replace("'", "`").Trim() + "'" + ",@Ctrls = ''" + ",@SourceCode = '" + FieldValues[FLD_DEBITMFO].Replace("'", "`").Trim() + "'" + ",@DebitMoniker = '" + DebitMoniker + "'" + ",@DebitState = '" + FieldValues[FLD_DEBITSTATE].Replace("'", "`").Trim() + "'" + ",@DebitIBAN = '" + DebitIBAN + "'" + ",@TargetCode = '" + FieldValues[FLD_CREDITMFO].Replace("'", "`").Trim() + "'" + ",@CreditMoniker= '" + CreditMoniker + "'" + ",@CreditState = '" + FieldValues[FLD_CREDITSTATE].Replace("'", "`").Trim() + "'" + ",@CreditIBAN = '" + CreditIBAN + "'" + ",@CrncyAmount = " + FieldValues[FLD_SUMA].Replace(" ", CAbc.EMPTY).Trim() + ",@CurrencyId = " + FieldValues[FLD_CURRENCY].Replace("'", "`").Trim() + ",@UserName = '******'" ; AboutError = (string)__.IsNull(Command.GetScalar(CmdText), CAbc.EMPTY); if (__.IsEmpty(FieldValues[FLD_PURPOSE].Trim())) { AboutError += " Не заполнено назначение платежа ;"; } if (__.IsEmpty(FieldValues[FLD_DEBITNAME].Trim())) { AboutError += " Не заполнено название дб. счета ;"; } if (__.IsEmpty(FieldValues[FLD_CREDITNAME].Trim())) { AboutError += " Не заполнено название кт. счета ;"; } if (AboutError != null) { if ((AboutError.Trim() != "")) { HaveError = true; Result += " Ошибка в строке " + LineNum.ToString() + " : " + AboutError.Trim() + CAbc.CRLF; } } } FieldValues[FLD_CODE] = SavedCode; CConsole.Clear(); byte SavedColor = CConsole.BoxColor; if ((( int )__.IsNull(Command.GetScalar("exec dbo.pMega_OpenGate_CheckPalvis;2 @TaskCode='" + TASK_CODE + "',@FileName='" + CleanFileName + "'"), (int)0)) > 0) { CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; CConsole.GetBoxChoice("Внимание ! Файл " + CleanFileName + " сегодня уже загружался !", "", "Для выхода нажмите ENTER."); CConsole.BoxColor = SavedColor; Result += "Файл " + CleanFileName + " сегодня уже загружался !" + CAbc.CRLF; } CConsole.BoxColor = SavedColor; Reader.Close(); return(Result); } //FOLD00
static void Main() //FOLD00 { const bool DEBUG = false; bool UseErcRobot = false; // подключаться ли к серверу под логином ErcRobot const string ROBOT_LOGIN = "******"; const string ROBOT_PWD = "35162987"; const string TASK_CODE = "OpenGate"; CPayRoll PayRoll; CCommand Command; CConnection Connection; COpengateConfig OgConfig; CScrooge2Config Scrooge2Config; byte SavedColor; int ErcDate = 0 , SeanceNum = 0; string TmpDir = CAbc.EMPTY , StatDir = CAbc.EMPTY , BankCode = "351629" , FileName = CAbc.EMPTY , TodayDir = CAbc.EMPTY , InputDir = CAbc.EMPTY , DataBase = CAbc.EMPTY , ScroogeDir = CAbc.EMPTY , SettingsDir = CAbc.EMPTY , ServerName = CAbc.EMPTY , AboutError = CAbc.EMPTY , LogFileName = CAbc.EMPTY , TmpFileName = CAbc.EMPTY , CleanFileName = CAbc.EMPTY , ConnectionString = CAbc.EMPTY; CConsole.Clear(); __.Print(CAbc.EMPTY, " Загрузка зарплатных ведомостей в `Скрудж`. Версия 2.01 от 21.08.2019г.", CAbc.EMPTY); System.Console.Title = "Загрузка в `Скрудж` зарплатных ведомостей"; __.DeleteOldTempDirs("??????", __.Today() - 1); if (DEBUG) { FileName = "D:\\WorkShop\\zkm.dif"; Err.LogTo("D:\\WorkShop\\zkm.log"); } else if (__.ParamCount() > 1) { for (int i = 1; i < __.ParamCount(); i++) { if (CAbc.ParamStr[i].Trim().ToUpper() == "/R") { UseErcRobot = true; System.Console.Title = System.Console.Title + " * "; } else { FileName = CAbc.ParamStr[i].Trim(); } } } if (__.IsEmpty(FileName)) { __.Print(" Не указано имя файла для обработки ! "); __.Print(" Формат запуска : PayrollImporter.exe <FileName> [/R]"); __.Print(" Пример : PayrollImporter.exe * "); return; } // ----------------------------------------------------- // Вычитываем настройки "Скрудж-2" Scrooge2Config = new CScrooge2Config(); if (!Scrooge2Config.IsValid) { __.Print(Scrooge2Config.ErrInfo); return; } ScroogeDir = (string)Scrooge2Config["Root"]; SettingsDir = (string)Scrooge2Config["Common"]; ServerName = (string)Scrooge2Config["Server"]; DataBase = (string)Scrooge2Config["DataBase"]; if (ScroogeDir == null) { __.Print(" Не найдена переменная `Root` в настройках `Скрудж-2` "); return; } if (ServerName == null) { __.Print(" Не найдена переменная `Server` в настройках `Скрудж-2` "); return; } if (DataBase == null) { __.Print(" Не найдена переменная `Database` в настройках `Скрудж-2` "); return; } ScroogeDir = ScroogeDir.Trim(); if (SettingsDir != null) { SettingsDir = ScroogeDir + "\\" + SettingsDir; } ServerName = ServerName.Trim(); DataBase = DataBase.Trim(); if (DEBUG) { __.Print(" Беру настройки `Скрудж-2` здесь : " + ScroogeDir); } if (FileName == "*") { FileName = SelectFileNameGUI(SettingsDir); } if (FileName == null) { return; } if (__.IsEmpty(FileName)) { return; } if (!__.FileExists(FileName)) { __.Print(" Не найден указанный файл ! ", "", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } CleanFileName = __.GetFileName(FileName); PayRoll = new CPayRoll(); if (!PayRoll.Open(FileName)) { __.Print("Ошибка открытия исходного файла !", "", "Для выхода нажмите ENTER."); PayRoll.Close(); CConsole.WaitForEscOrEnter(); return; } if (!PayRoll.Preview()) { PayRoll.Close(); return; } // ----------------------------------------------------- // Подключаемся к базе данных ConnectionString = "Server=" + ServerName + ";Database=" + DataBase; if (UseErcRobot) { ConnectionString += ";UID=" + ROBOT_LOGIN + ";PWD=" + ROBOT_PWD + ";"; } else { ConnectionString += ";Integrated Security=TRUE;"; } Connection = new CConnection(ConnectionString); if (Connection.IsOpen()) { if (DEBUG) { __.Print(" Сервер : " + ServerName); } } else { __.Print("", " Ошибка подключения к серверу !"); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } Command = new CCommand(Connection); if (Command.IsOpen()) { if (DEBUG) { __.Print(" База данных : " + DataBase); } } else { __.Print("", " Ошибка подключения к базе данных !"); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } System.Console.Title = System.Console.Title + " | " + ServerName + "." + DataBase; // ----------------------------------------------------- // Вычитываем из БД информацию про МФО и дебет-счет BankCode = ( string )__.IsNull(Command.GetScalar(" select Code from dbo.vMega_Common_MyBankInfo with ( NoLock ) "), CAbc.EMPTY); if (BankCode == null) { BankCode = "351629"; } else if (__.IsEmpty(BankCode)) { BankCode = "351629"; } if (!PayRoll.GetDebitInfo(Command)) { Command.Close(); Connection.Close(); PayRoll.Close(); return; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // считываем настройки шлюза в ЕРЦ ErcDate = ( int )__.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;7 "), (int)0); if (ErcDate < 1) { __.Print(" Ошибка определения даты текущего рабочего дня. "); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } OgConfig = new COpengateConfig(); OgConfig.Open(ErcDate); if (!OgConfig.IsValid()) { __.Print(" Ошибка чтения настроек программы из " + OgConfig.Config_FileName()); __.Print(OgConfig.ErrInfo()); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } SeanceNum = ( int )__.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4 @TaskCode='" + TASK_CODE + "',@ParamCode='NumSeance' "), (int)0); if (SeanceNum < 1) { __.Print(" Ошибка определения номера сеанса "); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } TodayDir = (string)OgConfig.TodayDir(); TmpDir = (string)OgConfig.TmpDir(); StatDir = (string)OgConfig.StatDir(); if ((TodayDir == null) || (InputDir == null)) { __.Print(" Ошибка чтения настроек программы из " + OgConfig.Config_FileName()); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } TodayDir = TodayDir.Trim(); StatDir = StatDir.Trim(); TmpDir = TmpDir.Trim(); if (!__.DirExists(TodayDir)) { __.MkDir(TodayDir); } if (!__.DirExists(StatDir)) { __.MkDir(StatDir); } if (!__.DirExists(TmpDir)) { __.MkDir(TmpDir); } if (!__.SaveText(StatDir + "\\" + "test.dat", "test.dat", CAbc.CHARSET_DOS)) { __.Print(" Ошибка записи в каталог " + StatDir); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } __.DeleteFile(StatDir + "\\" + "test.dat"); LogFileName = OgConfig.LogDir() + "\\SEANS" + SeanceNum.ToString("000") + ".TXT"; Err.LogTo(LogFileName); __.AppendText(LogFileName, __.Now() + " " + __.Upper(__.GetUserName()) + " загружает файл " + CleanFileName + CAbc.CRLF, CAbc.CHARSET_WINDOWS); TmpFileName = TodayDir + CAbc.SLASH + CleanFileName; if (!__.FileExists(TmpFileName)) { __.CopyFile(FileName, TmpFileName); } if (!__.FileExists(TmpFileName)) { __.Print(" Ошибка записи файла " + TmpFileName); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } TmpFileName = TmpDir + CAbc.SLASH + __.Right("0" + __.Hour(__.Clock()).ToString(), 2) + __.Right("0" + __.Minute(__.Clock()).ToString(), 2) + __.Right("0" + __.Second(__.Clock()).ToString(), 2); if (!__.DirExists(TmpFileName)) { __.MkDir(TmpFileName); } PayRoll.CopyTempFile(TmpFileName); TmpFileName = TmpFileName + CAbc.SLASH + CleanFileName; PayRoll.CopyTempFile(TmpFileName); if (__.FileExists(TmpFileName)) { __.DeleteFile(TmpFileName); } if (__.FileExists(TmpFileName)) { __.Print("Ошибка удаления файла ", TmpFileName); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } __.CopyFile(FileName, TmpFileName); if (DEBUG) { __.Print(" Беру настройки шлюза здесь : " + OgConfig.Config_FileName()); } // ----------------------------------------------------- // Проверяем пачку AboutError = PayRoll.CheckAll(Command, BankCode); if (AboutError != CAbc.EMPTY) { __.Print(AboutError); __.AppendText(LogFileName, CAbc.CRLF + AboutError + CAbc.CRLF, CAbc.CHARSET_WINDOWS); SavedColor = CConsole.BoxColor; CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; if (!CConsole.GetBoxChoice(" При проверке файла обнаружены ошибки !" , " Для отмены загрузки нажмите ESC . " , " Для продолжения - ENTER ." ) ) { __.AppendText(LogFileName, CAbc.CRLF + __.Now() + " загрузка отменена. " + CAbc.CRLF, CAbc.CHARSET_WINDOWS); CConsole.BoxColor = SavedColor; Command.Close(); Connection.Close(); PayRoll.Close(); return; } CConsole.BoxColor = SavedColor; } else { if (!CConsole.GetBoxChoice(" При проверке файла ошибок не найдено." , " Для загрузки нажмите ENTER . " , " Для выхода - ESC." ) ) { __.AppendText(LogFileName, CAbc.CRLF + __.Now() + " загрузка отменена. " + CAbc.CRLF, CAbc.CHARSET_WINDOWS); Command.Close(); Connection.Close(); PayRoll.Close(); return; } } // ----------------------------------------------------- // Загружаем пачку if (!PayRoll.InsertAll(Command, BankCode)) { SavedColor = CConsole.BoxColor; CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; CConsole.GetBoxChoice(CAbc.EMPTY, " При загрузке файла были ошибки !", CAbc.EMPTY); CConsole.BoxColor = SavedColor; } // ----------------------------------------------------- Command.Close(); Connection.Close(); PayRoll.Close(); __.AppendText(LogFileName, CAbc.CRLF + __.Now() + " загрузка завершена. " + CAbc.CRLF, CAbc.CHARSET_WINDOWS); } //FOLD00
} //FOLD00 // Вставка строк входного файла в БД public bool InsertAll(CCommand Command, string BankCode) //fold00 { string CmdText = CAbc.EMPTY , DebitIBAN = CAbc.EMPTY , CreditIBAN = CAbc.EMPTY , DebitMoniker = CAbc.EMPTY , CreditMoniker = CAbc.EMPTY; int LineNum = 0; bool Result = true; FieldValues[FLD_DEBITMFO] = BankCode; FieldValues[FLD_CREDITMFO] = BankCode; if (!Reader.Open(FileName, CharSet)) { Reader.Close(); return(false); } while (Reader.Read()) { LineNum++; PrepareFields(); DebitMoniker = FieldValues[FLD_DEBITACC].Replace("'", "`").Trim(); CreditMoniker = FieldValues[FLD_CREDITACC].Replace("'", "`").Trim(); if (DebitMoniker[0] > '9') { DebitIBAN = DebitMoniker; DebitMoniker = CAbc.EMPTY; } if (CreditMoniker[0] > '9') { CreditIBAN = CreditMoniker; CreditMoniker = CAbc.EMPTY; } CConsole.ShowBox(CAbc.EMPTY, " Загружается строка" + __.StrI(LineNum, 5) + " ", CAbc.EMPTY); CmdText = "exec dbo.pMega_OpenGate_AddPalvis " + " @TaskCode = '" + TASK_CODE + "'" + ",@DayDate = "+ DayDate.ToString() + ",@BranchCode = ''" + ",@FileName = '" + CleanFileName + "'" + ",@LineNum = " + LineNum.ToString() + ",@SourceCode = '" + FieldValues[FLD_DEBITMFO].Replace("'", "`").Trim() + "'" + ",@DebitMoniker = '" + DebitMoniker + "'" + ",@DebitState = '" + FieldValues[FLD_DEBITSTATE].Replace("'", "`").Trim() + "'" + ",@DebitIBAN = '" + DebitIBAN + "'" + ",@DebitName = '" + FieldValues[FLD_DEBITNAME].Replace("'", "`").Trim() + "'" + ",@TargetCode = '" + FieldValues[FLD_CREDITMFO].Replace("'", "`").Trim() + "'" + ",@CreditMoniker= '" + CreditMoniker + "'" + ",@CreditState = '" + FieldValues[FLD_CREDITSTATE].Replace("'", "`").Trim() + "'" + ",@CreditIBAN = '" + CreditIBAN + "'" + ",@CreditName = '" + FieldValues[FLD_CREDITNAME].Replace("'", "`").Trim() + "'" + ",@CrncyAmount = " + FieldValues[FLD_SUMA].Replace(" ", CAbc.EMPTY).Trim() + ",@CurrencyId = " + FieldValues[FLD_CURRENCY].Replace("'", "`").Trim() + ",@Purpose = '" + FieldValues[FLD_PURPOSE].Replace("'", "`").Replace("?", "i").Trim() + "'" + ",@Code = '" + FieldValues[FLD_CODE].Replace("'", "`").Trim() + "'" + ",@Ctrls = ''" + ",@UserName = '******'" ; if (!Command.Execute(CmdText)) { Result = false; } } CConsole.Clear(); CConsole.ShowBox(CAbc.EMPTY, " Подождите...", CAbc.EMPTY); Command.Execute(" exec pMega_OpenGate_PayRoll;2 " + " @FileName='" + CleanFileName + "'" + ", @DayDate=" + DayDate.ToString() ); CConsole.Clear(); Reader.Close(); return(Result); } //FOLD00
public static void Main(string[] args) { #if !DEBUG AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); #endif AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); try { mThread = Thread.CurrentThread; mProcess = Process.GetCurrentProcess(); mAssembly = Assembly.GetEntryAssembly(); if (mThread != null) { mThread.Name = "Core Thread"; } Timer.TimerThread ttObj = new Timer.TimerThread(); mTimerThread = new Thread(new ThreadStart(ttObj.TimerMain)); mTimerThread.Name = "Timer Thread"; int width = Math.Min(100, Console.LargestWindowWidth - 2); Console.CursorVisible = false; Console.Clear(); Console.WindowLeft = Console.WindowTop = 0; if (Console.WindowWidth < width) { Console.WindowWidth = width; } LogoPrinter.PrefixColor = EConsoleColor.Blue; LogoPrinter.SufixColor = EConsoleColor.Blue; LogoPrinter.TextColor = EConsoleColor.Gray; LogoPrinter.PrintLogo(); Version ver = mAssembly.GetName().Version; CConsole.StatusLine("Shaiya.Extended Server - Version {0}.{1}, Build {2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision); mConsoleEventHandler = new ConsoleEventHandler(OnConsoleEvent); SetConsoleCtrlHandler(mConsoleEventHandler, true); mAppConf = new ApplicationSettings(); mAppConf.ReadAll(); Stopwatch watch = Stopwatch.StartNew(); CConsole.Info("Connecting to SQL Server {0}...", mAppConf.Network["DB Server"]); mDatabase = new MySqlWrapper(mAppConf.Network["DB Server"], int.Parse(mAppConf.Network["DB Port"]), mAppConf.Network["DB User"], mAppConf.Network["DB Password"], mAppConf.Network["DB Database"]); MysqlError conRes = mDatabase.Prepare(); if (conRes != MysqlError.None) { CConsole.WriteLine(EConsoleColor.Error, " failed!"); throw new Exception("Failed to open Database Connection! Type: " + conRes.ToString()); } watch.Stop(); CConsole.WriteLine(EConsoleColor.Status, " done! Needed {0:F2} sec", watch.Elapsed.TotalSeconds); watch = null; ScriptDatabase.Initialize(@"Scripts\ScriptList.xml"); ScriptCompiler.Compile(AppDomain.CurrentDomain.BaseDirectory + Path.Combine(Settings.Default.MainConfDir, Settings.Default.ScriptAssemblies), true, true); World.Load(); // testing CallMethod ScriptCompiler.CallMethod("Initialize"); SocketPool.Create(); mSocketConnector = new SocketConnector(mAppConf.Network["Server IP"], mAppConf.Network.GetInt("Server Port")); PacketHandlers.Initialize(); // start Timer Thread mTimerThread.Start(); NetState.Initialize(); // finished Loading Events.InvokeServerStarted(); DateTime now, last = DateTime.Now; const int sampleInterval = 100; const float ticksPerSecond = (float)(TimeSpan.TicksPerSecond * sampleInterval); int sample = 0; while (mSignal.WaitOne()) { Timer.Slice(); mSocketConnector.Slice(); NetState.FlushAll(); NetState.ProcessDisposedQueue(); if (Slice != null) { Slice(); } // just for Diagnostics if ((++sample % sampleInterval) == 0) { now = DateTime.Now; mCyclesPerSecond[mCycleIndex++ % mCyclesPerSecond.Length] = ticksPerSecond / (now.Ticks - last.Ticks); last = now; } } } catch (Exception e) { CurrentDomain_UnhandledException(null, new UnhandledExceptionEventArgs(e, true)); } }