// Include #include "sqlaccountstmt.h" // Local definitions // Global data // cSQLAccountStmt Constructor. cSQLAccountStmt::cSQLAccountStmt(void) { } // ~cSQLAccountStmt Destructor. cSQLAccountStmt::~cSQLAccountStmt(void) { } // TruncateCaptcha Method SQLRETURN cSQLAccountStmt::TruncateCaptcha(void) { SQLRETURN retcode = SQLExecDirect( mHstmt, (SQLCHAR*)"TRUNCATE TABLE TB_CAPTCHA", SQL_NTS ); SQLCloseCursor( mHstmt ); return retcode; } SQLRETURN cSQLAccountStmt::InsertCaptcha(TB_CAPTCHA* captcha, long& retvalue) { SQLCHAR* statement = (SQLCHAR*)"{call GP_CAPTCHA_INSERT(?, ?, ?, ?)}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; SQLSMALLINT param; long nameSize = sizeof(captcha->name); long cbName = wcslen(captcha->name) ? SQL_NTS : SQL_NULL_DATA; long dataLen = captcha->size; long cbData = SQL_LEN_DATA_AT_EXEC(captcha->size); retcode = SQLBindParameter( mHstmt, param=1, SQL_PARAM_INPUT, SQL_C_WCHAR, SQL_WVARCHAR, 50, 0, captcha->name, nameSize, &cbName ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &captcha->size, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, dataLen, 0, (VOID*)1, 0, &cbData ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &retvalue, 0, &(strLenOrInd=0) ); retcode = SQLExecDirect( mHstmt, statement, SQL_NTS ); if ( retcode == SQL_NEED_DATA ) { void* parmID = NULL; // SQL µ¥ÀÌÅÍ ÀÔ·Â. retcode = SQLParamData( mHstmt, &parmID ); if ( retcode == SQL_NEED_DATA ) { retcode = SQLPutData( mHstmt, captcha->image, dataLen ); } // Make Final SQLParamData call. retcode = SQLParamData( mHstmt, &parmID ); } SQLCloseCursor( mHstmt ); return retcode; } // MatrixCreate Method. // GP_MATRIX_CREATE.SQL ÆÄÀÏÂüÁ¶. // @MAX_SERVER [smallint] --ÃÖ´ë ¼­¹ö¹øÈ£ // @MAX_CHANNEL [smallint] --ÃÖ´ë ä³Î¹øÈ£ SQLRETURN cSQLAccountStmt::MatrixCreate(MATRIX_CREATE* matrixCreate) { SQLCHAR* statement = (SQLCHAR*)"{call GP_MATRIX_CREATE(?)}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; retcode = SQLPrepare( mHstmt, statement, SQL_NTS ); if ( SQL_SUCCEEDED( retcode ) ) { retcode = SQLBindParameter( mHstmt, 0x1, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &matrixCreate->retvalue, 0, &(strLenOrInd=0) ); retcode = SQLExecute( mHstmt ); if ( SQL_SUCCEEDED( retcode ) ) { // ÀúÀåÇÁ·Î½ÃÀú Äõ¸® ¸¶¹«¸®. while ( SQLMoreResults( mHstmt ) == SQL_SUCCESS ); // ¿­·ÁÀÖ´Â °á°ú ´Ý±â. (Close the open result set.) SQLCloseCursor( mHstmt ); } } return retcode; } // ServerList Method. // GP_SERVER_LIST.SQL ÆÄÀÏÂüÁ¶. SQLRETURN cSQLAccountStmt::ServerList(SERVER_LIST* serverList, u_long& cbLength) { SQLCHAR* statement = (SQLCHAR*)"{call GP_SERVER_LIST}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; retcode = SQLExecDirect( mHstmt, statement, SQL_NTS ); if ( SQL_SUCCEEDED( retcode ) ) { TB_SERVER* table = serverList->table; SQLINTEGER tableSize = sizeof(serverList->table); SQLINTEGER nameSize = sizeof(table->name); SQLINTEGER cbName = 0; SQLINTEGER descSize = sizeof(table->description); SQLINTEGER cbDesc = 0; while ( (retcode = SQLFetch( mHstmt )) == SQL_SUCCESS ) { SQLGetData( mHstmt, 0x01, SQL_C_SLONG, &table->idx, 0, &(strLenOrInd=0) ); SQLGetData( mHstmt, 0x02, SQL_C_WCHAR, table->name, nameSize, &cbName ); SQLGetData( mHstmt, 0x03, SQL_C_WCHAR, table->description, descSize, &cbDesc ); SQLGetData( mHstmt, 0x04, SQL_C_TINYINT, &table->status, 0, &(strLenOrInd=0) ); SQLGetData( mHstmt, 0x05, SQL_C_TINYINT, &table->age, 0, &(strLenOrInd=0) ); table++; serverList->rowCount++; cbLength += tableSize; } // ÀúÀåÇÁ·Î½ÃÀú Äõ¸® ¸¶¹«¸®. while ( SQLMoreResults( mHstmt ) == SQL_SUCCESS ); // ¿­·ÁÀÖ´Â °á°ú ´Ý±â. (Close the open result set.) SQLCloseCursor( mHstmt ); } return SQL_SUCCESS; } // ChannelUpdate Method. // GP_CHANNEL_UPDATE.SQL ÆÄÀÏÂüÁ¶. // @SERVER_NUM [smallint] --¼­¹ö¹øÈ£ // @CHANNEL_NUM [smallint] --ä³Î¹øÈ£ // @STATUS [tinyint] --»óÅÂ(0¿øÈ°/1º¸Åë/2È¥Àâ) // @RETVALUE [int]OUTPUT --¹Ýȯ°ª SQLRETURN cSQLAccountStmt::ChannelUpdate(CHANNEL_UPDATE* channelUpdate) { SQLCHAR* statement = (SQLCHAR*)"{call GP_CHANNEL_UPDATE(?, ?, ?, ?)}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; retcode = SQLPrepare( mHstmt, statement, SQL_NTS ); if ( SQL_SUCCEEDED( retcode ) ) { retcode = SQLBindParameter( mHstmt, 0x1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &channelUpdate->serverNum, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, 0x2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &channelUpdate->channelNum, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, 0x3, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, 0, 0, &channelUpdate->status, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, 0x4, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &channelUpdate->retvalue, 0, &(strLenOrInd=0) ); retcode = SQLExecute( mHstmt ); if ( SQL_SUCCEEDED( retcode ) ) { // ÀúÀåÇÁ·Î½ÃÀú Äõ¸® ¸¶¹«¸®. while ( SQLMoreResults( mHstmt ) == SQL_SUCCESS ); // ¿­·ÁÀÖ´Â °á°ú ´Ý±â. (Close the open result set.) SQLCloseCursor( mHstmt ); } } return retcode; } // ConcurrentUser Method. // GP_CONCURRENT_USER.SQL ÆÄÀÏÂüÁ¶. SQLRETURN cSQLAccountStmt::ConcurrentUser(CONCURRENT_USER* concurrentUser) { SQLCHAR* statement = (SQLCHAR*)"{call GP_CONCURRENT_USER(?, ?)}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; retcode = SQLPrepare( mHstmt, statement, SQL_NTS ); if ( SQL_SUCCEEDED( retcode ) ) { retcode = SQLBindParameter( mHstmt, 0x1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &concurrentUser->serverIdx, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, 0x2, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &concurrentUser->value, 0, &(strLenOrInd=0) ); retcode = SQLExecute( mHstmt ); if ( SQL_SUCCEEDED( retcode ) ) { // ÀúÀåÇÁ·Î½ÃÀú Äõ¸® ¸¶¹«¸®. while ( SQLMoreResults( mHstmt ) == SQL_SUCCESS ); // ¿­·ÁÀÖ´Â °á°ú ´Ý±â. (Close the open result set.) SQLCloseCursor( mHstmt ); } } return retcode; } // ServerDown Method. // GP_SERVERDOWN.SQL ÆÄÀÏÂüÁ¶. // @SERVER_NUM [smallint] --¼­¹ö¹øÈ£ // @CHANNEL_NUM [smallint] --ä³Î¹øÈ£ SQLRETURN cSQLAccountStmt::ServerDown(SERVER_DOWN* serverDown) { SQLCHAR* statement = (SQLCHAR*)"{call GP_SERVERDOWN(?, ?)}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; retcode = SQLPrepare( mHstmt, statement, SQL_NTS ); if ( SQL_SUCCEEDED( retcode ) ) { retcode = SQLBindParameter( mHstmt, 0x1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &serverDown->serverNum, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, 0x2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &serverDown->channelNum, 0, &(strLenOrInd=0) ); retcode = SQLExecute( mHstmt ); if ( SQL_SUCCEEDED( retcode ) ) { // ÀúÀåÇÁ·Î½ÃÀú Äõ¸® ¸¶¹«¸®. while ( SQLMoreResults( mHstmt ) == SQL_SUCCESS ); // ¿­·ÁÀÖ´Â °á°ú ´Ý±â. (Close the open result set.) SQLCloseCursor( mHstmt ); } } return retcode; } // MemberLogin Method // GP_MEMBER_LOGIN.SQL ÆÄÀÏÂüÁ¶. // @MEMBER_IDX [int]OUTPUT --°íÀ¯¹øÈ£ - ȸ¿ø Å×À̺í // @SLEVEL [tinyint] --º¸¾Èµî±Þ // @LOGON_IDX [int]OUTPUT --°íÀ¯¹øÈ£ - ·Î±× Å×À̺í // @LAST_SERVER_NUM [int]OUTPUT --¼­¹ö¹øÈ£(¸¶Áö¸· Á¢¼Ó) // @LAST_CHANNEL_NUM [int]OUTPUT --ä³Î¹øÈ£(¸¶Áö¸· Á¢¼Ó) // @INETNUM [varchar](20) --IPÁÖ¼Ò(IPv4) // @RETVALUE [int]OUTPUT --¹Ýȯ°ª SQLRETURN cSQLAccountStmt::MemberLogin(MEMBER_LOGIN* login) { SQLCHAR* statement = (SQLCHAR*)"{call GP_MEMBER_LOGIN(?, ?, ?, ?, ?, ?, ?, ?, ?)}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; SQLUSMALLINT param; SQLINTEGER tUidSize = sizeof(login->twitterUid); SQLINTEGER cbTUid = 0; SQLINTEGER tPwdSize = sizeof(login->twitterPwd); SQLINTEGER cbTPwd = 0; retcode = SQLBindParameter( mHstmt, param=1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &login->memberIdx, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, 0, 0, &login->memberSlevel, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &login->memberPc, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &login->loginIdx, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &login->lastServerNum, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &login->lastChannelNum, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_CHAR, SQL_VARCHAR, 20, 0, &login->twitterUid, tUidSize, &(cbTUid=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_CHAR, SQL_VARCHAR, 30, 0, &login->twitterPwd, tPwdSize, &(cbTPwd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &login->retvalue, 0, &(strLenOrInd=0) ); retcode = SQLExecDirect( mHstmt, statement, SQL_NTS ); if ( SQL_SUCCEEDED( retcode ) ) { // ÀúÀåÇÁ·Î½ÃÀú Äõ¸® ¸¶¹«¸®. while ( SQLMoreResults( mHstmt ) == SQL_SUCCESS ); // ¿­·ÁÀÖ´Â °á°ú ´Ý±â. (Close the open result set.) SQLCloseCursor( mHstmt ); } return retcode; } // MemberLogout Method // GP_MEMBER_LOGOUT.SQL ÆÄÀÏÂüÁ¶. // @LOGIN_IDX [int] --°íÀ¯¹øÈ£ - ·Î±× Å×À̺í // @MEMBER_IDX [int] --°íÀ¯¹øÈ£ - ȸ¿ø Å×À̺í // @RETVALUE [int]OUTPUT --¹Ýȯ°ª SQLRETURN cSQLAccountStmt::MemberLogout(MEMBER_LOGOUT* memberLogout) { SQLCHAR* statement = (SQLCHAR*)"{call GP_MEMBER_LOGOUT(?, ?, ?)}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; SQLUSMALLINT param; retcode = SQLPrepare( mHstmt, statement, SQL_NTS ); if ( SQL_SUCCEEDED( retcode ) ) { retcode = SQLBindParameter( mHstmt, param=1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &memberLogout->loginIdx, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &memberLogout->memberIdx, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &memberLogout->retvalue, 0, &(strLenOrInd=0) ); retcode = SQLExecute( mHstmt ); if ( SQL_SUCCEEDED( retcode ) ) { // ÀúÀåÇÁ·Î½ÃÀú Äõ¸® ¸¶¹«¸®. while ( SQLMoreResults( mHstmt ) == SQL_SUCCESS ); // ¿­·ÁÀÖ´Â °á°ú ´Ý±â. (Close the open result set.) SQLCloseCursor( mHstmt ); } } return retcode; } // LoginUpdate Method. SQLRETURN cSQLAccountStmt::LoginUpdate(LOGIN_UPDATE* loginUpdate) { SQLCHAR* statement = (SQLCHAR*)"{call GP_LOGIN_UPDATE(?)}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; retcode = SQLPrepare( mHstmt, statement, SQL_NTS ); if ( SQL_SUCCEEDED( retcode ) ) { retcode = SQLBindParameter( mHstmt, 0x1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &loginUpdate->loginIdx, 0, &(strLenOrInd=0) ); retcode = SQLExecute( mHstmt ); if ( SQL_SUCCEEDED( retcode ) ) { // ÀúÀåÇÁ·Î½ÃÀú Äõ¸® ¸¶¹«¸®. while ( SQLMoreResults( mHstmt ) == SQL_SUCCESS ); // ¿­·ÁÀÖ´Â °á°ú ´Ý±â. (Close the open result set.) SQLCloseCursor( mHstmt ); } } return retcode; } // GameToGame Method. // GP_GAME_TO_GAME.SQL ÆÄÀÏÂüÁ¶. SQLRETURN cSQLAccountStmt::GameToGame(GAME_TO_GAME* gameToGame) { SQLCHAR* statement = (SQLCHAR*)"{call GP_GAME_TO_GAME(?, ?, ?, ?, ?, ?, ?, ?, ?)}"; SQLINTEGER strLenOrInd; SQLRETURN retcode; SQLUSMALLINT param; retcode = SQLPrepare( mHstmt, statement, SQL_NTS ); if ( SQL_SUCCEEDED( retcode ) ) { retcode = SQLBindParameter( mHstmt, param=1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &gameToGame->loginIdx, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &gameToGame->serverNum, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &gameToGame->channelNum, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &gameToGame->lastChannel, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &gameToGame->characterIdx, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &gameToGame->instantDungeon, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &gameToGame->ipv4, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_SMALLINT, 0, 0, &gameToGame->port, 0, &(strLenOrInd=0) ); retcode = SQLBindParameter( mHstmt, ++param, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &gameToGame->retvalue, 0, &(strLenOrInd=0) ); retcode = SQLExecute( mHstmt ); if ( SQL_SUCCEEDED( retcode ) ) { // ÀúÀåÇÁ·Î½ÃÀú Äõ¸® ¸¶¹«¸®. while ( SQLMoreResults( mHstmt ) == SQL_SUCCESS ); // ¿­·ÁÀÖ´Â °á°ú ´Ý±â. (Close the open result set.) SQLCloseCursor( mHstmt ); } } return retcode; }