Exemple #1
0
		bool Daemon_Singleton::start()
		{
			// initialize log			
			if (isLogging)
			{
				if (isDaemon)
				{
					std::string logfile_path = IsService () ? "/var/log" : i2p::util::filesystem::GetDataDir().string();
	#ifndef _WIN32
					logfile_path.append("/i2pd.log");
	#else
					logfile_path.append("\\i2pd.log");
	#endif
					StartLog (logfile_path);
				}
				else
					StartLog (""); // write to stdout
			}

			d.httpServer = new i2p::util::HTTPServer(i2p::util::config::GetArg("-httpport", 7070));
			d.httpServer->Start();
			LogPrint("HTTP Server started");
			i2p::data::netdb.Start();
			LogPrint("NetDB started");
			i2p::transport::transports.Start();
			LogPrint("Transports started");
			i2p::tunnel::tunnels.Start();
			LogPrint("Tunnels started");
			i2p::client::context.Start ();
			LogPrint("Client started");
			
			return true;
		}
Exemple #2
0
	void StartI2P (std::ostream * logStream)
	{
		if (logStream)
			StartLog (logStream);
		else
			StartLog (i2p::util::filesystem::GetFullPath (i2p::util::filesystem::GetAppName () + ".log"));
		LogPrint(eLogInfo, "API: starting NetDB");
		i2p::data::netdb.Start();
		LogPrint(eLogInfo, "API: starting Transports");
		i2p::transport::transports.Start();
		LogPrint(eLogInfo, "API: starting Tunnels");
		i2p::tunnel::tunnels.Start();
	}
Exemple #3
0
	void StartI2P (std::ostream * logStream)
	{
		if (logStream)
			StartLog (logStream);
		else
			StartLog (i2p::util::filesystem::GetAppName () + ".log");
		i2p::data::netdb.Start();
		LogPrint("NetDB started");
		i2p::transport::transports.Start();
		LogPrint("Transports started");
		i2p::tunnel::tunnels.Start();
		LogPrint("Tunnels started");
	}
Exemple #4
0
		bool Daemon_Singleton::start()
		{
			// initialize log			
			if (isLogging)
			{
				if (isDaemon)
				{
					std::string logfile_path = i2p::util::filesystem::GetDataDir().string();
	#ifndef _WIN32
					logfile_path.append("/debug.log");
	#else
					logfile_path.append("\\debug.log");
	#endif
					StartLog (logfile_path);
				}
				else
					StartLog (""); // write to stdout
			}

			d.httpServer = new i2p::util::HTTPServer(i2p::util::config::GetArg("-httpport", 7070));
			d.httpServer->Start();
			LogPrint("HTTP Server started");

			i2p::data::netdb.Start();
			LogPrint("NetDB started");
			i2p::transports.Start();
			LogPrint("Transports started");
			i2p::tunnel::tunnels.Start();
			LogPrint("Tunnels started");
			i2p::garlic::routing.Start();
			LogPrint("Routing started");
			i2p::stream::StartStreaming();
			LogPrint("Streaming started");

			d.httpProxy = new i2p::proxy::HTTPProxy(i2p::util::config::GetArg("-httpproxyport", 4446));
			d.httpProxy->Start();
			LogPrint("HTTP Proxy started");
			d.socksProxy = new i2p::proxy::SOCKSProxy(i2p::util::config::GetArg("-socksproxyport", 4447));
			d.socksProxy->Start();
			LogPrint("SOCKS Proxy Started");
			std::string ircDestination = i2p::util::config::GetArg("-ircdest", "");
			if (ircDestination.length () > 0) // ircdest is presented
			{
				d.ircTunnel = new i2p::stream::I2PClientTunnel (d.socksProxy->GetService (), ircDestination,
					i2p::util::config::GetArg("-ircport", 6668));
				d.ircTunnel->Start ();
				LogPrint("IRC tunnel started");
			}	
			return true;
		}
Exemple #5
0
CWriteLogThread::CWriteLogThread()
{
    m_hLogThreadEndEvt = NULL;
    m_hLogThread = NULL;
    m_dwLogThreadID = 0;
    m_bStartFlag = FALSE;
    
    m_nLogLevel = FOR_DEBUG;
    
    m_nLogFileIndex = 0;
    m_bLogListFull = FALSE;
    m_nLogListCount = 0;
    m_uBytesWritten = 0;
    
    m_uMaxFileSize = 1024 * 1024 * 64; //日志文件大小最大值 64M
    m_strCurrData = CTime::GetCurrentTime().Format("%Y:%m:%d");
    m_strLastCleanupLogFileDate = m_strCurrData;
    m_nLogFileCleanupDate = 0;
    
    memset(m_strAppLogDir,0,_MAX_PATH);
    
    //创建保存日志文件的目录
    CreateCurrAppLogDir();
    
    UpDataLogFileName();
    
    StartLog();
    
}
Exemple #6
0
int process_addr_discover_reply(Header *header, ChordPacketArgs *args,
								AddrDiscoverReply *msg, Node *from)
{
	ChordServer *srv = args->srv;
	LOG_PROCESS(&from->id, &from->addr, from->port);

	if (!verify_ticket(srv->ticket_salt, srv->ticket_salt_len,
					   srv->ticket_hash_len, msg->ticket.data, msg->ticket.len,
					   "c6s", CHORD_ADDR_DISCOVER, &from->addr, from->port))
		return CHORD_INVALID_TICKET;

	if (IN6_IS_ADDR_UNSPECIFIED(&srv->node.addr)) {
		v6_addr_set(&srv->node.addr, msg->addr.data);
		get_address_id(&srv->node.id, &srv->node.addr, srv->node.port);
		chord_update_range(srv, &srv->node.id, &srv->node.id);

		StartLog(INFO);
		PartialLog("address: [%s]:%d, ", v6addr_to_str(&srv->node.addr), srv->node.port);
		PartialLog("node id: ");
		print_chordID(clog_file_logger()->fp, &srv->node.id);
		EndLog();
		
		Info("Stabilizing every %u.%u seconds", STABILIZE_PERIOD / 1000000UL, STABILIZE_PERIOD % 1000000UL);

		event_del(srv->discover_addr_event);
		
		struct timeval timeout;
		timeout.tv_sec = STABILIZE_PERIOD / 1000000UL;
		timeout.tv_usec = STABILIZE_PERIOD % 1000000UL;
		event_add(srv->stab_event, &timeout);
	}
	return CHORD_NO_ERROR;
}
void XaLibControllerFrontEnd::OnStart(const string& ConfFile) {

    try {

        LoadXmlConfFile(ConfFile);
        StartLog();

        LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"########################### STARTING FRONT END ACTION LOG ############################");

        //StartDb();
        StartHttp();

        //GetServerInfo();
        //GetClientInfo();
        SESSION.FrontEndIp=HTTP.GetServerIpAddress();
        SESSION.ClientIp=HTTP.GetClientIpAddress();
        GetLayout();

        LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"IP Address Client-> "+SESSION.ClientIp);
        LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Ip Address Front End Server -> "+SESSION.FrontEndIp);
        LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Read HttpString -> " + REQUEST.HeadersString);
        LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Request Language -> "+REQUEST.Language);
//		LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Request Device -> "+REQUEST.Device);

        //RESPONSE.ResponseType=REQUEST.ResponseType;

    } catch (int e) {

        throw;
    }
};
Exemple #8
0
BOOL WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	BOOL ret;
	MSG msg;

	hWndMain = CreateDialogParam(hInstance, MAKEINTRESOURCE(IDD_DIALOGBAR), 0, MainDlgProc, 0);

	ShowWindow(hWndMain, nCmdShow);
	
	StartLog();

	BASE_InitializeServerList();


	while((ret = GetMessage(&msg, 0, 0, 0)) != 0) 
	{
		if(ret == -1) /* error found */
			return -1;

		if(!IsDialogMessage(hWndMain, &msg)) 
		{
			TranslateMessage(&msg); /* translate virtual-key messages */
			DispatchMessage(&msg); /* send it to dialog procedure */
		}
	}
	return TRUE;
}
	void LogPrecache( char const *soundname )
	{
		if ( !m_bLogPrecache )
			return;

		// Make sure we only show the message once
		if ( UTL_INVAL_SYMBOL != m_PrecachedScriptSounds.Find( soundname ) )
			return;

		if (m_hPrecacheLogFile == FILESYSTEM_INVALID_HANDLE)
		{
			StartLog();
		}

		m_PrecachedScriptSounds.AddString( soundname );

		if (m_hPrecacheLogFile != FILESYSTEM_INVALID_HANDLE)
		{
			filesystem->Write("\"", 1, m_hPrecacheLogFile);
			filesystem->Write(soundname, Q_strlen(soundname), m_hPrecacheLogFile);
			filesystem->Write("\"\n", 2, m_hPrecacheLogFile);
		}
		else
		{
			Warning( "Disabling precache logging due to file i/o problem!!!\n" );
			m_bLogPrecache = false;
		}
	}
	// Precache all wave files referenced in wave or rndwave keys
	virtual void LevelInitPreEntity()
	{
		char mapname[ 256 ];
#if !defined( CLIENT_DLL )
		StartLog();
		Q_snprintf( mapname, sizeof( mapname ), "maps/%s", STRING( gpGlobals->mapname ) );
#else
		Q_strncpy( mapname, engine->GetLevelName(), sizeof( mapname ) );
#endif

		Q_FixSlashes( mapname );
		Q_strlower( mapname );

		// Load in any map specific overrides
		char scriptfile[ 512 ];
		Q_StripExtension( mapname, scriptfile, sizeof( scriptfile ) );
		Q_strncat( scriptfile, "_level_sounds.txt", sizeof( scriptfile ), COPY_ALL_CHARACTERS );

		if ( filesystem->FileExists( scriptfile, "GAME" ) )
		{
			soundemitterbase->AddSoundOverrides( scriptfile );
		}

#if !defined( CLIENT_DLL )
		for ( int i=soundemitterbase->First(); i != soundemitterbase->InvalidIndex(); i=soundemitterbase->Next( i ) )
		{
			CSoundParametersInternal *pParams = soundemitterbase->InternalGetParametersForSound( i );
			if ( pParams->ShouldPreload() )
			{
				InternalPrecacheWaves( i );
			}
		}
#endif
	}
Exemple #11
0
int process_data(Header *header, ChordPacketArgs *args, Data *msg, Node *from)
{
	ChordServer *srv = args->srv;
	chordID id;
	memcpy(id.x, msg->id.data, CHORD_ID_BYTES);

	if (IN6_IS_ADDR_UNSPECIFIED(&srv->node.addr))
		return CHORD_ADDR_UNDISCOVERED;

	LOG_PROCESS(&id, &from->addr, from->port);

	if (--msg->ttl == 0) {
		StartLog(WARN);
		print_two_chordIDs(clog_file_logger()->fp, "TTL expired: data packet ", &id,
						   " dropped at node ", &srv->node.id, "");
		EndLog();
		return CHORD_TTL_EXPIRED;
	}

	/* handle request locally? */
	if (chord_id_is_local(srv, &id)) {
		/* Upcall goes here... */
		Debug("id is local");
		//chord_deliver(len, data, from);
	}
	else {
		int next_is_last;
		Node *np = next_route_node(srv, &id, msg->last, &next_is_last);
		send_data(srv, next_is_last, msg->ttl, np, &id, msg->data.len,
				  msg->data.data);
	}
	return CHORD_NO_ERROR;
}
Exemple #12
0
		bool Daemon_Singleton::start()
		{
			// initialize log			
			if (isLogging)
			{
				if (isDaemon)
				{
					std::string logfile_path = i2p::util::filesystem::GetDataDir().string();
	#ifndef _WIN32
					logfile_path.append("/debug.log");
	#else
					logfile_path.append("\\debug.log");
	#endif
					StartLog (logfile_path);
				}
				else
					StartLog (""); // write to stdout
			}

			d.httpServer = new i2p::util::HTTPServer(i2p::util::config::GetArg("-httpport", 7070));
			d.httpServer->Start();
			LogPrint("HTTP Server started");

			i2p::data::netdb.Start();
			LogPrint("NetDB started");
			i2p::transports.Start();
			LogPrint("Transports started");
			i2p::tunnel::tunnels.Start();
			LogPrint("Tunnels started");
			i2p::garlic::routing.Start();
			LogPrint("Routing started");
			i2p::stream::StartStreaming();
			LogPrint("Streaming started");

			d.httpProxy = new i2p::proxy::HTTPProxy(i2p::util::config::GetArg("-httpproxyport", 4446));
			d.httpProxy->Start();
			LogPrint("HTTP Proxy started");
			d.socksProxy = new i2p::proxy::SOCKSProxy(i2p::util::config::GetArg("-socksproxyport", 4447));
			d.socksProxy->Start();
			LogPrint("SOCKS Proxy Started");
			return true;
		}
Exemple #13
0
int InitLog(SeisSlave *node, char * name)
{
	int	INFO;

	node -> fp_log   = 0;
	node -> DEBUG    = 0;
	node -> apl_name = name;
	node -> machine  = 0;
	INFO = StartLog(node);
	return(INFO);

} /* End of InitLog */
Exemple #14
0
int process_fs(Header *header, ChordPacketArgs *args, FindSuccessor *msg,
			   Node *from)
{
	ChordServer *srv = args->srv;
	Node *succ, *np;
	chordID reply_id;
	in6_addr reply_addr;
	ushort reply_port = msg->port;

	if (IN6_IS_ADDR_UNSPECIFIED(&srv->node.addr))
		return CHORD_ADDR_UNDISCOVERED;

	v6_addr_set(&reply_addr, msg->addr.data);
	get_address_id(&reply_id, &reply_addr, reply_port);

	LOG_PROCESS(&reply_id, &reply_addr, reply_port);

	if (--msg->ttl == 0) {
		StartLog(WARN);
		print_two_chordIDs(clog_file_logger()->fp, "TTL expired: fix_finger packet ", &reply_id,
						   " dropped at node ", &srv->node.id, "");
		EndLog();
		return CHORD_TTL_EXPIRED;
	}

	if (v6_addr_equals(&srv->node.addr, &reply_addr)
		&& srv->node.port == reply_port)
		return CHORD_NO_ERROR;

	if (succ_finger(srv) == NULL) {
		send_fs_reply(srv, msg->ticket.data, msg->ticket.len, &reply_addr, reply_port,
					  &srv->node.addr, srv->node.port);
		return CHORD_NO_ERROR;
	}
	succ = &succ_finger(srv)->node;

	if (id_is_between(&reply_id, &srv->node.id, &succ->id) || id_equals(&reply_id,
																  &succ->id)) {
		send_fs_reply(srv, msg->ticket.data, msg->ticket.len, &reply_addr, reply_port,
					  &succ->addr, succ->port);
	}
	else {
		np = closest_preceding_node(srv, &reply_id, 0);
		send_fs_forward(srv, msg->ticket.data, msg->ticket.len, msg->ttl, &np->addr, np->port,
						&reply_addr, reply_port);
	}
	return CHORD_NO_ERROR;
}
Exemple #15
0
//------------------------------------------------------------------
//
//	Initialise(..)
//
//	Params:
//	fileDir		-	Location of the text file to write to
//
//	Initialisation of the debugger tool
//
//------------------------------------------------------------------
bool CDebugLog::Initialise(const std::string& fileDir)
{
	if (!m_bInit) {
		// Attempt to open/create file.
		// If existing, clear all contents
		m_fileStream.open(fileDir.c_str(), std::fstream::out | std::fstream::trunc);

		if (!m_fileStream.is_open())
			return false;

		m_bInit = true;
		StartLog();
	}
	else
		WriteTimeStampEntry("Initialisation attempt on DebugLog made when already initialised!");

	return true;
}
void XaLibControllerBackEnd::OnStart(const string& ConfFile) {

	try {

		LoadXmlConfFile(ConfFile);
		StartLog();

		LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"########################### STARTING BACK END ACTION LOG ############################");

		StartDb();
		StartHttp();

		SESSION.BackEndIp=HTTP.GetServerIpAddress();
		SESSION.FrontEndIp=HTTP.GetClientIpAddress();

		LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"IP Address Back End Server -> "+SESSION.BackEndIp);
		LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"IP Address Front End Server -> "+SESSION.FrontEndIp);
		LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Read HttpString -> " + REQUEST.HeadersString);

	} catch (int e) {

		throw;
	}
};
bool MythXDisplay::CreateGC(Window win)
{
    StartLog();
    XLOCK(this, m_gc = XCreateGC(m_disp, win, 0, NULL));
    return StopLog();
}
Exemple #18
0
int main(){ // the argument list is not used
  // but there is provision for it.

  printf("Welcome to the FIREBALL Guider. Please wait while we configure\n");

    fflush(NULL);

  StartLog();
  GtoM_StartCount(); 
  GtoT_StartCount();
  ResetReceivedMessageCounters();

  trackpointEL = CHIPHEIGHT/2;
  trackpointCE = CHIPWIDTH/2;

  QCamera camera; // open the camera.

  //  UniversalTime();
  //  printf("The Local Sidereal Time is: %lf\n",LST(31.761, -95.63));

  /*
  double ra1, ra2;
  double dec1, dec2;
  double alt1, alt2;
  double az1, az2;
  double del, dce;
  double lat, lon;
  */ 

  GtoT_CameraError(0);

  SetLatLon(31.761,-95.64);

  /*  lat = 31.761;
  lon = -95.64;
  ra1 = 0.50;
  ra2 = 0.51;
  dec1 = 0.41;
  dec2 = 0.41;
  RADEC_to_ALTAZ(ra1,dec1, lat,lon, &alt1,&az1);
  printf("the first alt-az I have found: %lf %lf\n",alt1,az1);
  RADEC_to_ALTAZ(ra2,dec2, lat,lon, &alt2,&az2);
  printf("the second alt-az I have found: %lf %lf\n",alt2,az2);
  ALTAZ_to_ELCE(alt1,az1,alt2,az2,&del,&dce); 
  printf("The difference I have found is: %lf %lf\n",del,dce);
  */
  InitDAC(); // prepare the dac.

  InitializeLEDs(); // turn off the Lamp.

  if(!ComSetup()) GtoT_TextError("COM working");


  //  RunSillyProg();

  StartDisplay(); // begin the display.

  turnOnGps();
  

  // starts some of the statistic quantities. Defaulting to 100 frames -- 10s in full chip mode, 3s in ROI mode. 





  InitMode.setCallback(InitModeCallback);
  AutocollimationMode.setCallback(AutocollimationModeCallback);
  AlignmentMode.setCallback(AlignmentModeCallback);
  AlignmentSubMode.setCallback(AlignmentModeCallback);
  SlewingMode.setCallback(SlewPointModeCallback);
  PointingMode.setCallback(SlewPointModeCallback);
  PointingModeRoi.setCallback(SlewPointModeCallback);
 
  camera.prepSettings(InitMode,0,0);
  if(camera.LoadQCamState()){
    switch(camera.nextMode.getModeID()){
    case INITMODE:{
      camera.nextMode.setCallback(InitModeCallback);
      break;
    };
    case ALIGNMENTMODE:{
      camera.nextMode.setCallback(AlignmentModeCallback);
      alignmentMD.winx = camera.getWinX();
      alignmentMD.winy = camera.getWinY();
      alignmentMD.wind = camera.getWinDX();
      WriteToLog("Stuff","%d %d %d",alignmentMD.winx,alignmentMD.winy,alignmentMD.wind);
      break;
    };
    case SLEWINGMODE:{
      camera.nextMode.setCallback(SlewPointModeCallback);
      break;
    };
    case POINTINGMODE:{
      camera.nextMode.setCallback(SlewPointModeCallback);
      break;
    };
    case AUTOCOLLIMATIONMODE:{
      camera.nextMode.setCallback(AutocollimationModeCallback);
      break;
    };  
    default:
      break;
    };
  };
  //  camera.prepSettings(SlewingMode,0,0);
  //  camera.prepSettings(PointingMode,0,0);
  //  camera.nowMode.setEqual(AlignmentMode);
 
  //    HomeCamera();
  
    //MoveStage(30000);

  // periodicmessages.h/c contains the variables and calls needed to 
  // set up periodic messages that have to be sent to the MPF and the 
  // ground in various modes. 
#include "periodicmessages.h"
  
  // processmessages.h/c contains the variables and calls needed to 
  // process the messages from the MPF and the ground.
#include "processmessages.h"


  //for every change of mode there will be a goto mainloop command
  //to exit a program there will be a goto loopexit command. 

  FillRSquared();
  //  if(camera.getActiveSensor() == GUIDERSENSOR){
  //    GtoM_SwitchingGuiderRequest();
  //  };
  //  HelloDither.DitherPattern1(10);
 MainLoop:
  
  camera.stopStreaming();  // stop camera streaming


  camera.changeSettings(); // adjust camera parameters, including 
                           // the trigger time.

  modeID = camera.getModeID();

  camera.startStreaming(); // restart camera streaming. 


  //  WriteToLog("Got Here! B ");
  loopcounter = 0;

  if(camera.getModeID() == POINTINGMODE || (camera.getModeID()==ALIGNMENTMODE && camera.getSubModeID()==ALIGNTRACKROI)){
    ClearScreen();
    FontOverwrite();
  } else {
    FontMask();
  };
  
  //  WriteToLog("Got Here A !");

  if(camera.getModeID()==ALIGNMENTMODE && (camera.getSubModeID() == ALIGNTRACKROI || camera.getSubModeID() == ALIGNTRACKFULLCHIP || camera.getSubModeID() == ALIGNDRAGFULLCHIP)){
    //    GtoM_SwitchingGuiderRequest();
    //    camera.setActiveSensor(GUIDERSENSOR);
  } else {
    //    GtoM_SwitchingDTURequest();
    //    camera.setActiveSensor(OTHERSENSOR);
  }

  //    WriteToLog("Got Here!");
  //    WriteToLog("FLOOD","%d %d %d" ,camera.getRoiX(), camera.getRoiY(),camera.getRoiDX());
  do{

    #include "periodicmessages.cpp"
    #include "processmessages.cpp"

    camera.queueFrame();
    


  } while(1);
  

  camera.~QCamera();
  CloseLog();

  return 0;
};
Exemple #19
0
CWriteLogThread::~CWriteLogThread()
{
    StartLog();
    m_LogList.RemoveAll();
}
Exemple #20
0
void ProcessSecTimer()
{
	CReadFiles::ImportUser();
	CReadFiles::UpdateUser();

	SecCounter++;

	if(SecCounter % 30 == 0) 
	{
		CReadFiles::ImportItem(); // Once every two minutes
		CReadFiles::ImportDonate();
	}

	DrawConfig();

	if(SecCounter % 30 == 0)
	{
		CReadFiles::UpdateConnection();

		MinCounter++;

		if(MinCounter % 30 == 0)
		{
			CReadFiles::UpdateConnectionData();
			HourCounter++;
		}
	}

	if (SecCounter % 600 == 0)
	{
#pragma region Gerador de Ranking
		CReadFiles::WriteRanking();
#pragma endregion
	}
	struct tm when;
	time_t now;
	time(&now);
	when = *localtime(&now);

	if (when.tm_mday != LastLogDay)
		StartLog("A");

	if (when.tm_mday != LastDayLogDay)
	{
		DayLog_ItemLog();
		DayLog_ExpLog();
		LastDayLogDay = when.tm_mday;
	}
	if(when.tm_hour == 0 && when.tm_wday == 0 && when.tm_min == 0 && when.tm_sec == 0)
	{
		for(int i = 0; i < 65536;i++)
		{
			if(GuildInfo[i].Fame)
			{
				GuildInfo[i].Fame = 0;

				for(int j = 0; j < MAX_SERVER; j++)
				{
					if(pUser[j].cSock.Sock == 0)
						continue;

					if(pUser[j].Mode == 0)
						continue;

					cFileDB.SendGuildInfo(j, i);
				}
			}
		}

		CReadFiles::WriteGuildInfo();
	}
}
Exemple #21
0
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) // Last Updated 19/01/2013
{
	MSG msg;

	UNREFERENCED_PARAMETER(lpCmdLine);

	hInst = hInstance;

	if(!hPrevInstance)
		if(!InitApplication(hInstance)) 
			return FALSE;      

	if(!InitInstance(hInstance, nCmdShow)) 
		return FALSE;


	BASE_InitModuleDir();
    BASE_InitializeBaseDef();

#pragma region Load Base Characters

	int handle = -1;

	handle = _open("./BaseMob/TK", _O_RDONLY | _O_BINARY);

	if(handle == -1)
	{
		MessageBoxA(hWndMain, "no TransKnight file", "BOOTING ERROR", MB_OK);

		return FALSE;
	}

	_read(handle, &g_pBaseSet[0], sizeof(STRUCT_MOB));
	_close(handle);


	handle = -1;

	handle = _open("./BaseMob/FM", _O_RDONLY | _O_BINARY);

	if(handle == -1)
	{
		MessageBoxA(hWndMain, "no Foema file", "BOOTING ERROR", MB_OK);

		return FALSE;
	}

	_read(handle, &g_pBaseSet[1], sizeof(STRUCT_MOB));
	_close(handle);

	handle = -1;

	handle = _open("./BaseMob/BM", _O_RDONLY | _O_BINARY);

	if(handle == -1)
	{
		MessageBoxA(hWndMain, "no BeastMaster file", "BOOTING ERROR", MB_OK);

		return FALSE;
	}

	_read(handle, &g_pBaseSet[2], sizeof(STRUCT_MOB));
	_close(handle);

	handle = -1;

	handle = _open("./BaseMob/HT", _O_RDONLY | _O_BINARY);

	if(handle == -1)
	{
		MessageBoxA(hWndMain, "no Huntress file", "BOOTING ERROR", MB_OK);

		return FALSE;
	}

	_read(handle, &g_pBaseSet[3], sizeof(STRUCT_MOB));
	_close(handle);

	g_pBaseSet[0].BaseScore = g_pBaseSet[0].CurrentScore;
	g_pBaseSet[1].BaseScore = g_pBaseSet[1].CurrentScore;
	g_pBaseSet[2].BaseScore = g_pBaseSet[2].CurrentScore;
	g_pBaseSet[3].BaseScore = g_pBaseSet[3].CurrentScore;

#pragma endregion

	StartLog("A");
	Log("start log", "-system", 0);

	memset(g_pGuildWar, 0, sizeof(g_pGuildWar));
	memset(g_pGuildAlly, 0, sizeof(g_pGuildAlly));

	ReadConfig();

	int ret = ListenSocket.WSAInitialize();

	if(!ret)
	{
		Log("err,wsainitialize fail", "-system", 0);

		return FALSE;
	}

	BASE_InitializeServerList();

	char name[256];
	int i = 0;

	struct addrinfo hints, *res, *p;

	memset(&hints, 0, sizeof(addrinfo));
	memset(&res, 0, sizeof(addrinfo));
	memset(&p, 0, sizeof(addrinfo));
	
	hints.ai_family = AF_INET;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_flags = AI_PASSIVE;

	gethostname(name, sizeof(name));

	getaddrinfo(name, NULL, &hints, &res);

	for (p = res; p != NULL; p = p->ai_next)
	{
		if (p->ai_family != AF_INET)
			continue;

		struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;

		inet_ntop(p->ai_family, &(ipv4->sin_addr), name, sizeof(name));

		for (i = 0; i < MAX_SERVERGROUP; i++)
		{
			if (!strcmp(g_pServerList[i][0], name))
			{
				ServerIndex = i;

				sscanf(name, "%d.%d.%d.%d", &LocalIP[0], &LocalIP[1], &LocalIP[2], &LocalIP[3]);

				break;
			}
		}

		if (ServerIndex != -1)
			break;
	}

	/*freeaddrinfo(res);
	freeaddrinfo(p);
	freeaddrinfo(&hints);
	*/
    if(ServerIndex == -1)
    {	
		MessageBox(hWndMain, "Can't get Server Group Index LocalIP:", "", MB_OK|MB_SYSTEMMODAL);
		MessageBox(hWndMain, "Can't get Server Group Index TestServerIP:", g_pServerList[i][0], MB_OK | MB_SYSTEMMODAL);

	   return TRUE;
    }

	CReadFiles::ImportItem();
	ReadTrandGuildInfo();

	ListenSocket.StartListen(hWndMain, 0, DB_PORT, WSA_ACCEPT);
	AdminSocket.StartListen(hWndMain, 0, ADMIN_PORT, WSA_ACCEPTADMIN);

	FILE *fp = fopen("redirect.txt", "rt");

	if(fp)	
	{	
		char sip[256];
		int  port;

		fscanf(fp, "%s %d %s %s", sip, &port, adminclientid, adminclientpass);
		fclose(fp);

		ret = AdminClient.ConnectServer(sip, port, INADDR_ANY, WSA_READADMINCLIENT);

		if(ret == NULL)
		{	
			MessageBox(hWndMain, "there's redirect.txt but can't connect", "BOOTING ERROR", NULL);
			return FALSE;		
		}	
		else
		{	
			Log("sys redirection server connected","-system",0);
			TransperCharacter = 1;
		}
	}

	SetTimer(hWndMain, TIMER_SEC, 1000, NULL); 

	CReadFiles::ReadGuildInfo();

	while(GetMessage(&msg, NULL, 0, 0))
	{    
		TranslateMessage(&msg);
		DispatchMessage(&msg); 
	}

	return msg.wParam;  
}