BOOL XLoginInfo::Save( void ) { FILE *fp = NULL; XBREAK( m_strLoginFile.empty() ); // fprintf_s때문에 euckr형으로 만들어야 함 LPCTSTR _szPath = XE::MakeDocFullPath( _T(""), m_strLoginFile.c_str() ); string strPath = SZ2C( _szPath ); fopen_s( &fp, strPath.c_str(), "wt" ); if( fp == NULL ) { XLOGXN("save failed %s", _szPath ); return FALSE; } #if defined(_XUNIVERSAL) || defined(_XINDONESIA) if( m_typeLogin == xLT_UUID ) { XBREAK( m_strUUID.empty() == true ); fprintf_s( fp, "__uuid\r\n" ); fprintf_s( fp, "\"%s\"\r\n", m_strUUID.c_str() ); XLOGXN("save uuid=%s", C2SZ(m_strUUID.c_str()) ); } else #endif #ifdef _XUNIVERSAL if( m_typeLogin == xLT_IDPW ) { // 아니면 아이디/비번으로 로그인한것. fprintf_s( fp, "__idpw\r\n" ); fprintf_s( fp, "\"%s\"\r\n", m_strID.c_str() ); XLOGXN("id=%s", C2SZ(m_strID.c_str()) ); fprintf_s( fp, "\"%s\"\r\n", m_strPassword.c_str() ); XLOGXN("pw=%s", C2SZ(m_strPassword.c_str()) ); } else #endif #ifdef _XLOGIN_FACEBOOK if( m_typeLogin == xLT_FACEBOOK ) { // 페북으로 로그인한것 fprintf_s( fp, "__facebook\r\n" ); fprintf_s( fp, "\"%s\"\r\n", m_strFbUserId.c_str() ); XLOGXN("save fb id=%s", C2SZ(m_strFbUserId.c_str()) ); fprintf_s( fp, "\"%s\"\r\n", SZ2C(m_strFbUsername.c_str()) ); XLOGXN("save fb username=%s", m_strFbUsername.c_str() ); fprintf_s( fp, "\"%s\"\r\n", SZ2C(m_strFbName.c_str()) ); XLOGXN("save fb name=%s", m_strFbName.c_str() ); } else #endif { fprintf_s( fp, "__none\r\n" ); XBREAKF(1, "unknown m_typeLogin save" ); } fclose( fp ); XLOGXN("loginInfo save success %s", _szPath ); return TRUE; }
int XDownloadTask::AddRequest( LPCTSTR pathSub, LPCTSTR szURL, LPCTSTR szDstLocal ) { if( XBREAK( m_bGo == TRUE ) ) return 0; // 다운 다받고 나서 콜백처리 아직 안했는데 애드되는걸 막기위함. if( XBREAK( m_bComplete == TRUE ) ) return 0; xREQ_INFO info; info.strURL = SZ2C( szURL ); // 스레드안에서 SZ2C를 안쓰려고 여기서 변환함. info.strSubPath = SZ2C( pathSub ); // 기본적으로 워킹폴더/szURL로 받는다. 다운경로에 pathSub는 무시된다. _tstring strPath = XE::GetPathWork(); if( szDstLocal == NULL ) { strPath += szURL; TCHAR szPath[ 1024 ]; _tcscpy_s( szPath, strPath.c_str() ); XPLATFORM_PATH( szPath ); info.strToRename = SZ2C( szPath ); _tstring path = XE::GetFilePath( szPath ); _tstring filename = XE::GetFileName( szPath ); strPath = path; // 원본파일명으로 받을땐 파일명 앞에 특수문자를 붙여서 받은후 원본파일을 지우고 받은파일을 리네임시킨다. strPath += _T("__"); strPath += filename; } else { if( XE::IsHave( XE::GetFileName( szDstLocal ) ) ) { // dstLocal에 파일명이 지정되어있다면 // dstFullpath = 워킹폴더+szDstLocal strPath += szDstLocal; // _tcscat_s( szPath, szDstLocal ); } else { // 파일명이 안지정되어 있다면 // dstFullpath = 워킹폴더+szDstLocal+szURL strPath += szDstLocal; strPath += szURL; // _tcscat_s( szPath, szDstLocal ); // _tcscat_s( szPath, szURL ); } } TCHAR szPath[ 1024 ]; _tcscpy_s( szPath, strPath.c_str() ); XPLATFORM_PATH( szPath ); info.strDstFullpath = SZ2C( szPath ); m_listReq.Add( info ); return m_listReq.size(); }
XGameLua::XGameLua() { Init(); TCHAR szFullPath[ 1024 ]; #ifdef _SERVER _tcscpy_s( szFullPath, XE::_GetPathPackageRoot() ); _tcscat_s( szFullPath, XE::MakePath( DIR_SCRIPTW, _T("") ) ); SetModulePath( SZ2C( szFullPath ) ); #else _tcscpy_s( szFullPath, XE::GetPathWork() ); _tcscat_s( szFullPath, XE::MakePath( DIR_SCRIPTW, _T("") ) ); SetModulePath( SZ2C( szFullPath ) ); #endif // RegisterGlobal(); }
//==================================================== //#include "etc/InputMng.h" BOOL XConnectINI::Load( LPCTSTR szFile ) { CToken token; if( token.LoadFromDoc( szFile, XE::TXT_EUCKR ) == xFAIL ) { #ifdef WIN32 #ifdef _DEBUG strcpy_s( m_cIP, "192.168.100.44" ); #else _tstring strDocPath = XE::MakeDocFullPath( _T(""), szFile ); XALERT( "%s file not found", strDocPath.c_str() ); exit(1); // strcpy_s( m_cIP, "49.239.180.50" ); #endif #else if( XInputMng::s_Device == XE::DEVICE_IPAD || XInputMng::s_Device == XE::DEVICE_IPOD ) strcpy_s( m_cIP, XIP_LOGIN ); else if( XInputMng::s_Device == XE::DEVICE_ANDROID ) strcpy_s( m_cIP, XIP_LOGIN ); else { strcpy_s( m_cIP, XIP_LOGIN ); // strcpy_s( m_cIP, "59.5.5.245" ); } #endif m_Port = XPORT_LOGIN; strcpy_s( m_cIPPatch, XIP_PATCH ); strcpy_s( m_cID, "test3" ); return FALSE; } AXLOGXN("try read ip"); strcpy_s( m_cIP, Convert_TCHAR_To_char( token.GetToken() ) ); // ip AXLOGXN("login ip:%s", token.m_Token); if( XE::IsEmpty(m_cIP) ) strcpy_s( m_cIP, "211.52.84.50" ); AXLOGXN("try read port"); m_Port = token.GetNumber(); AXLOGXN("login port:%d", m_Port); #ifdef _XBOT2 #ifdef _XPATCH #error "봇 클라이언트에서는 _XPATCH를 빼시오" #endif token.GetNumber(); // dummy m_numBot = token.GetNumber(); #endif #ifdef _XPATCH AXLOGXN("try read patch ip"); strcpy_s( m_cIPPatch, SZ2C( token.GetToken() ) ); // patchsvr ip AXLOGXN("patch ip:%s", token.m_Token); if( XE::IsEmpty(m_cIPPatch) ) strcpy_s( m_cIPPatch, "49.239.180.50" ); #endif return TRUE; }
// full_list.txt를 쓴다. // int XMain::WriteFullList( XArrayLinear<XPatch::XRES_INFO>& aryAll ) int XMain::WriteFullList( const XVector<XPatch::XRES_INFO>& aryAll ) { char cPath[ 1024 ]; strcpy_s( cPath, SZ2C( XE::_GetPathPackageRoot() ) ); strcat_s( cPath, "full_list.txt" ); FILE *fp = NULL; fopen_s( &fp, cPath, "wt" ); if( fp == NULL ) return 0; char cBuff[ 1024 ]; // XARRAYLINEAR_LOOP( aryAll, XPatch::XRES_INFO, info ) for( auto& info : aryAll ) { strcpy_s( cBuff, SZ2C( info.strFile.c_str() ) ); strReplace( cBuff, '\\', '/' ); fprintf_s( fp, "\"%s\"\t%d\t%llu\n", cBuff, info.size, info.llChecksum ); } fprintf_s( fp, "// num files %d \n", aryAll.size() ); fclose( fp ); return 1; }
// core_list.txt를 쓴다. //int XMain::WriteCoreList( XArrayLinear<_tstring>& aryCore ) int XMain::WriteCoreList( const XVector<_tstring>& aryCore ) { char cPath[ 1024 ]; strcpy_s( cPath, SZ2C( XE::_GetPathPackageRoot() ) ); strcat_s( cPath, "core_list.txt" ); FILE *fp = NULL; fopen_s( &fp, cPath, "wt" ); if( fp == NULL ) return 0; char cBuff[ 1024 ]; // XARRAYLINEAR_LOOP( aryCore, _tstring, strRes ) for( auto& strRes : aryCore ) { strcpy_s( cBuff, SZ2C( strRes.c_str() ) ); strReplace( cBuff, '\\', '/' ); fprintf_s( fp, "\"%s\"\n", cBuff ); // fprintf_s( fp, "\"%s\"\n", SZ2C( strRes.c_str() ) ); } fprintf_s( fp, "// num files %d \n", aryCore.size() ); fclose( fp ); return 1; }
BOOL XConnectINI::Save( LPCTSTR szFile ) { XLOGXN("save %s", szFile ); FILE *fp = NULL; fp = fopen( XE::MakeDocFullPath( "", SZ2C(szFile) ), "wt" ); if( fp == NULL ) { XLOGXN("open failed %s", szFile ); return FALSE; } fprintf(fp, "\"%s\"\r\n", m_cIP ); XLOGXN("ip: %s", m_cIP ); fprintf(fp, "%d\r\n", (int)m_Port ); XLOGXN("port: %d", m_Port ); // fprintf(fp, "\"%s\"\r\n", m_cID ); fprintf(fp, "\"%s\"\r\n", m_cIPPatch ); XLOGXN("patch ip: %s", m_cIPPatch ); fclose(fp); return TRUE; }
XGameLua::XGameLua( const char *cLua ) { Init(); /* 루아 내부에서 다른루아를 include한다고 해도 어차피 마스터본에는 lua파일은 암호화되어 배포되어 include하지 못한다. 그러므로 사전 컴파일된 루아 바이너리를 쓰는 방법을 찾아봐야 할듯. */ TCHAR szFullPath[ 1024 ]; #ifdef _SERVER _tcscpy_s( szFullPath, XE::_GetPathPackageRoot() ); _tcscat_s( szFullPath, XE::MakePath( DIR_SCRIPTW, _T("") ) ); #else switch( XE::GetLoadType() ) { case XE::xLT_PACKAGE_ONLY: #if defined(WIN32) || defined(_VER_IOS) _tcscpy_s( szFullPath, XE::_GetPathPackageRoot() ); _tcscat_s( szFullPath, XE::MakePath( DIR_SCRIPTW, _T("") ) ); #else XBREAKF(1, "do not use! package only type"); #endif break; case XE::xLT_WORK_FOLDER_ONLY: case XE::xLT_WORK_TO_PACKAGE: case XE::xLT_WORK_TO_PACKAGE_COPY: _tcscpy_s( szFullPath, XE::MakeWorkFullPath( DIR_SCRIPTW, _T("") ) ); break; default: XBREAKF( 1, "unknown loadtype" ); } #endif XLOGXN("lua module path.....%s", szFullPath ); SetModulePath( SZ2C( szFullPath ) ); LoadScript( XE::MakePath( DIR_SCRIPTA, cLua ) ); // RegisterGlobal(); }
BOOL XLoginInfo::Load( LPCTSTR szFile ) { CToken token; m_strLoginFile = szFile; // 플랫폼에 관계없이 이 함수로 대동단결 if( token.LoadFromDoc( szFile, XE::TXT_EUCKR ) == xFAIL ) { XLOGXN("login.txt not found"); return FALSE; } XLOGXN("load login.txt success!"); if( token.GetToken() == NULL ) return FALSE; #ifdef _XLOGIN_UUID if( token == _T("__none") ) { // login파일이 없으면 디폴트 uuid방식으로 로그인 m_typeLogin = xLT_UUID; XLOGXN("uuid not found. create uuid now."); char cUUID[ 48 ]; XPH::GetUUID( cUUID, 48 ); m_strUUID = cUUID; XLOGXN("UUID:%s", C2SZ( cUUID ) ); Save(); } else if( token == _T("__uuid") ) { if( token.GetToken() ) m_strUUID = SZ2C(token.m_Token); else return FALSE; // 파일이 깨진것 앱을 다시 설치해야함. m_typeLogin = xLT_UUID; } else #endif #ifdef _XLOGIN_FACEBOOK if( token == _T("__facebook") ) { if( token.GetToken() ) m_strFbUserId = SZ2C(token.m_Token); else return FALSE; // if( token.GetToken() ) m_strFbUsername = token.m_Token; else { // 페북에 유저네임이 없을수도 있게 되어서 에러로 처리하지 않음. // m_strFbUserId.clear(); // return FALSE; } m_typeLogin = xLT_FACEBOOK; } else #endif #ifdef _XUNIVERSAL if( token == _T("__idpw") ) { // if( token.GetToken() ) m_strID = SZ2C( token.m_Token ); XLOGXN("login id:%s", token.m_Token); // if( token.GetToken() ) m_strPassword = SZ2C( token.m_Token ); else { m_strID.clear(); return FALSE; } m_typeLogin = xLT_IDPW; #ifdef _DEV XLOGXN("login pw:%s", token.m_Token); #endif } else #endif { m_typeLogin = xLT_NONE; XBREAKF( 1, "unknown login identifier:%s", token.m_Token ); return FALSE; } // add facebook login mode ////////////////////////////////////////////////////////////////////////// m_bLoaded = TRUE; return TRUE; }