// no compile // ´Ù¸¥ ¸ðµå¿¡¼­ ¼­ºñ½º·Î ÀüȯµÇ¾úÀ» ¶§, ÀÛ¾÷ÇÒ ³»¿ª class PROCESS_SM_CONNECTION_PHASE_SHIFT_CMD___ON_START_SERVICE : public IWorkNode { public: PROCESS_SM_CONNECTION_PHASE_SHIFT_CMD___ON_START_SERVICE() {} ~PROCESS_SM_CONNECTION_PHASE_SHIFT_CMD___ON_START_SERVICE() {} public: SolarAuthServerSession* GetServerSession() { return m_pServerSession; } VOID SetServerSession( SolarAuthServerSession* pSession ) { m_pServerSession = pSession; m_GLOBAL_SERVER_KEY = m_pServerSession->GlobalServerInfo().m_GlobalServerKey; } public: // virtual BOOL DoInit(); virtual BOOL DoProcess() { return _ACTION_Always_Alive(); } virtual BOOL IsComplete() { return m_bCompleted; } virtual BOOL DoRelease() { return TRUE; } private: // SERVICE_FUNCTION_ALWAYS_ALIVE BOOL _ACTION_Always_Alive(); // SERVICE_FUNCTION_SCRIPT_DATA_LOAD BOOL _ACTION_Script_Data_Load( BOOL bFirst = FALSE ); private: VOID SendPacket_4ScriptData( eSCRIPT_CODE scriptCode ); VOID SetLoadScriptTable( eSCRIPT_CODE scriptCode ); private: SolarAuthServerSession* m_pServerSession; GLOBAL_SERVER_KEY m_GLOBAL_SERVER_KEY; BOOL m_bCompleted; struct { BOOL m_bLoadMonitoring; DWORD m_dwPeer; DWORD m_dwTail; BYTE m_pLoadScriptTable[SCRIPT_LIST_SIZE]; // METHODs inline DWORD GetNextIndex( DWORD dwIndex ) { return ((dwIndex+1)%SCRIPT_LIST_SIZE); } inline BOOL IsEmpty() { return (BOOL)( m_dwPeer == m_dwTail ); } inline BOOL IsFull() { return (BOOL)( m_dwPeer == GetNextIndex(m_dwTail) ); } // no check "IsEmpty" & "IsFull" inline VOID EnQueue( BYTE byScriptCode ) { m_pLoadScriptTable[m_dwTail] = byScriptCode; m_dwTail = GetNextIndex( m_dwTail ); } inline BYTE DeQueue() { BYTE value = m_pLoadScriptTable[m_dwPeer]; m_dwPeer = GetNextIndex(m_dwPeer); return value; } inline BYTE Peek() { return m_pLoadScriptTable[m_dwPeer]; } } LOADING_INFO; }; BOOL PROCESS_SM_CONNECTION_PHASE_SHIFT_CMD___ON_START_SERVICE::DoInit() { m_bCompleted = FALSE; LOADING_INFO.m_bLoadMonitoring = FALSE; LOADING_INFO.m_dwPeer = 0; LOADING_INFO.m_dwTail = 0; memset( LOADING_INFO.m_pLoadScriptTable, 0, sizeof(LOADING_INFO.m_pLoadScriptTable) ); if( _ACTION_Script_Data_Load( TRUE ) ) if( _ACTION_Always_Alive() ) return TRUE; return FALSE; } // // // SERVICE_FUNCTION_ALWAYS_ALIVE BOOL PROCESS_SM_CONNECTION_PHASE_SHIFT_CMD___ON_START_SERVICE::_ACTION_Always_Alive() { if( !LOADING_INFO.IsEmpty() ) { eSCRIPT_CODE scriptCode = (eSCRIPT_CODE)LOADING_INFO.Peek(); // LOADING->LOADINGÀÇ »óȲÀ» °í·ÁÇÑ´Ù¸é... if( ScriptDataManager::IsLoadedData( scriptCode ) ) { LOADING_INFO.DeQueue(); if( !LOADING_INFO.IsEmpty() ) { scriptCode = (eSCRIPT_CODE)LOADING_INFO.Peek(); SendPacket_4ScriptData( scriptCode ); } } } if( ScriptDataManager::GetNeedLoadDataCount() ) { _ACTION_Script_Data_Load(); } return TRUE; } // SERVICE_FUNCTION_SCRIPT_DATA_LOAD BOOL PROCESS_SM_CONNECTION_PHASE_SHIFT_CMD___ON_START_SERVICE::_ACTION_Script_Data_Load( BOOL bFirst ) { SolarAuthServerSession* pSession = GetServerSession(); // ¾Æ·¡¿Í °°ÀÌ »ç¿ëÇÏ´Â °ÍÀº ÇØ´ç ¼­¹öŸÀÔÀ» ÇØÁ¦½Ã¿¡ TEMP_SERVER·Î ÀüȯÇϱ⠶§¹®ÀÌ´Ù. if( ! (pSession && SOLARAUTH_SERVER == pSession->GetServerType() && m_GLOBAL_SERVER_KEY == pSession->GlobalServerInfo().m_GlobalServerKey) ) return FALSE; if( ScriptDataManager::GetNeedLoadDataCount() ) { ScriptDataManager::ForEach_NeedLoadData( &PROCESS_SM_CONNECTION_PHASE_SHIFT_CMD___ON_START_SERVICE::SetLoadScriptTable, this); // Change status all, empty->loading ScriptDataManager::DataStatusCommand( SCRIPT_DATA_CMD::SET | SCRIPT_DATA_CMD::RANGE::ALL | SCRIPT_DATA_CMD::STATUS::MOVE2LOADING ); if( bFirst ) { eSCRIPT_CODE scriptCode = (eSCRIPT_CODE)LOADING_INFO.Peek(); SendPacket_4ScriptData( scriptCode ); } } return TRUE; } // VOID PROCESS_SM_CONNECTION_PHASE_SHIFT_CMD___ON_START_SERVICE::SetLoadScriptTable( eSCRIPT_CODE scriptCode ) { if( SAFE_NUMERIC_TYPECAST( eSCRIPT_CODE, scriptCode, BYTE ) ) { if( !LOADING_INFO.IsFull() ) { LOADING_INFO.EnQueue( (BYTE)scriptCode ); if( !LOADING_INFO.m_bLoadMonitoring ) LOADING_INFO.m_bLoadMonitoring = TRUE; return; } } ASSERT( !"Queue Å©±â¿Í ½ºÅ©¸³Æ® Á¾·ù µîµîÀ» Àß È®ÀÎÇØ ÁÖ¼À!" ); } // VOID PROCESS_SM_CONNECTION_PHASE_SHIFT_CMD___ON_START_SERVICE::SendPacket_4ScriptData( eSCRIPT_CODE scriptCode ) { MSG_SM_DATA_TRANSFER_PLZ_GIVEME_DATA_SYN msgSYN; msgSYN.m_wDataType = (WORD)scriptCode; if( SCRIPT_CONTROL_FLAG_UPPERBOUNDARY > scriptCode ) { __WAVERIX_SOLAR_AUTH_DEBUG_CODE( printf( "Check \tscriptCode %d\n", scriptCode ); ); } // Server Session¿¡ ´ëÇÑ °ËÁõÀº _ACTION_Script_Data_Load ¿¡¼­ ¼öÇàÇßÀ¸¹Ç·Î ¹®Á¦¾ø´Ù. GetServerSession()->SendPacket( &msgSYN, sizeof(msgSYN) ); } // // // // // //