/// <summary> /// Takes the configuration info, and begins the threading /// model to take care of all the Server objects created. /// </summary> private void StartServerThreads() { //Make sure the file system environment is set up for the servers: if ( !Directory.Exists( "userdb" ) ) Directory.CreateDirectory( "userdb" ); if ( !Directory.Exists( "logs" ) ) Directory.CreateDirectory( "logs" ); if ( !Directory.Exists( "modules" ) ) Directory.CreateDirectory( "modules" ); Configuration.ServerConfig[] list = config.Servers; WriteLogFunction wlf = new WriteLogFunction( WriteLog ); bool allServersReady = true; //Loads & Initializes all servers. for ( int i = 0; i < list.Length; i++ ) { Server s = new Server( list[i], wlf ); Thread t = new Thread( s.Connect ); servers[i] = new ServerThread( s, t ); servers[i].LoadModules = s.Init(); allServersReady = allServersReady && servers[i].LoadModules; } //Load all modules. WriteLog( "Loading Modules..." ); LoadModules( config.Modules ); //Activate all the modules. for ( int m = 0; m < MaxModules; m++ ) { if ( modules[m] == null ) continue; WriteLog( " Module Loaded: " + modules[m].ModuleConfig.FullName ); for ( int s = 0; s < MaxServers; s++ ) { if ( servers[s] == null || !servers[s].LoadModules || !modules[m].ModuleConfig.QueryServerList( servers[s].Server.Config.Name ) ) continue; modules[m].Activate( s ); WriteLog( " Activated Link: " + servers[s].Server.Config.Name + "." + modules[m].ModuleConfig.FullName ); } if ( allServersReady ) { WriteLog( " Activation Completed: " + modules[m].ModuleConfig.FullName ); modules[m].ActivationComplete(); } } foreach ( ServerThread st in servers ) if ( st == null ) continue; else st.Thread.Start(); }