/*! * \file Application.h * \brief Application class * \bug * \todo ÇÔ¼ö¿¡ doxygen command ´Þ±â * \author ±è°æÇ¥ (lammy@webzen.co.kr) * \version 2008/12/19 ±è°æÇ¥ - doxygen command ÀÛ¼º */ #ifndef _Application_H #define _Application_H #include "PacketStruct_CW.h" class GameFramework; #define VIRTUAL_PACKET_BUFFER_SIZE 1024 #include "RankingManager.h" #ifdef _APPLY_JAPAN_GAMECHU_CHANNELING #include "WIC/GWICWrapper.h" #endif //_APPLY_JAPAN_GAMECHU_CHANNELING #ifdef _DH_DEBUG_REPORT #include #endif//_DH_DEBUG_REPORT // ÆÛÆ÷¸Õ½º »ó°ü¾øÀÌ ¸¸µç´Ù. typedef struct _VIRTUAL_PACKET { DWORD dwServerIndex; BYTE byData[VIRTUAL_PACKET_BUFFER_SIZE]; } VIRTUAL_PACKET; /*! * \class Application class * \brief Application class * \author ±è°æÇ¥ (lammy@webzen.co.kr) */ const int MAX_PRELOAD_RESOURCE = 24; // ¼Òȯ¼ö4 + ij¸¯ÅÍ10(Ŭ·¡½º*¼ºº°) + Å»°Í10 class Application : public CAppLast { friend VOID NetworkRecv( DWORD dwIndex, BYTE * pData, DWORD dwSize ); public: Application( void ); virtual ~Application( void ); virtual void Clear( void ); public: /*! Application À» »ý¼ºÇÑ´Ù. \param[in] hInstance À©µµ¿ì hInstance \param[in] lpszAppName app ³×ÀÓ \param[in] WndProc À©µµ¿ì ÇÁ·Î½ÃÀú \param[in] lpszIconName ¾ÆÀÌÄÜ ³×ÀÓ \param[in] nCmdShow Ä¿¸ÇÆ® ¼î¿ì \return TRUE ¼º°ø \return FALSE ½ÇÆÐ */ virtual BOOL Create( HINSTANCE hInstance, LPCTSTR lpszAppName, WNDPROC WndProc, LPCTSTR lpszIconName, int nCmdShow ); /*! Application À» ÆÄ±âÇÑ´Ù. \note ¸Å´ÏÀú, °´Ã¼ µîÀ» ÆÄ±â ¶Ç´Â ÇØÁ¦, ¼¼¸¶Æ÷ Á¾·á */ virtual void Destroy( void ); /*! Application ÀÇ À©µµ¿ì ÇÁ·Î½ÃÀú \param[in] hWnd À©µµ¿ì ÇÚµé \param[in] iMessage À©µµ¿ì ¸Þ½ÃÁö \param[in] wParam ¸Þ½ÃÁö ÆÄ¶ó¹ÌÅÍ1 \param[in] lParam ¸Þ½ÃÁö ÆÄ¶ó¹ÌÅÍ2 */ virtual LRESULT WindowProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam ); /*! HeartBeat ½ÉÀå¹Úµ¿±â \note ÇÁ·¹ÀÓ ¾÷µ¥ÀÌÆ® ¹× ·»´õ °áÁ¤ ¾÷µ¥ÀÌÆ® ¹× ·»´õ¿¡ ÇÊ¿äÇÑ Æ½°è»ê ÈÄ ÇÁ·¹ÀÓ¿öÅ©, ¸Å´ÏÀú, °´Ã¼¿¡ ƽ ÀüÆÄ */ virtual int HeartBeat( void ); /// DiscAccess ¹Ýȯ CDiscAccess * GetDiscAccess(); /// °ÔÀÓ °æ·Î ¹× °ÔÀÓ µ¥ÀÌÅÍ °æ·Î ¼³Á¤( µð¹ö±× Àü¿ë - '..\\_bin' ) void InitRegistry(HINSTANCE hInstance); void PreloadResource(); void UnloadPreloadResource(); /// À¥Á¨ »ç¿îµå ¿£Áø ÃʱâÈ­ void InitSound(); /// À¥Á¨ »ç¿îµå ¿£Áø ÇØÁ¦ void ReleaseSound(); /*! ³×Æ®¿öÅ© °´Ã¼ »ý¼º ¹× ÃʱâÈ­ \note NetworkRecv ¹ÞÀº ÆÐŶÀ» Àü´ÞÇÏ´Â ÇÔ¼ö NetworkDisconnect Disconnet½Ã ó¸® ÇÔ¼ö NetworkError ³×Æ®¿÷ ¿¡·¯ ·Î±× ÇÔ¼ö */ void InitNet(); /// ÀÎÁõ ¼­¹ö Á¢¼Ó BOOL ConnectToAuthServer(); /// ³×Æ®¿öÅ© Á¢¼Ó ÇØÁ¦ ¹× ³×Å©¿öÅ© °´Ã¼ »èÁ¦ void ReleaseNet(); /// GAMEOPTION ·Îµù ¹× ÃʱâÈ­, QuestManager_Concrete ¹×MissionManager_Concrete »ý¼º BOOL LoadGameInfo(); /// ½ºÅ©¸³Æ® ·Îµå ¹× AC ÃʱâÈ­ void LoadGameInfoForSriptParserMng(); void UnloadGameInfo(); void ReleaseManager(); #ifdef _NA_005039_20120703_ENABLE_MULTI_CLIENT_COUNT #else //_NA_005039_20120703_ENABLE_MULTI_CLIENT_COUNT BOOL CheckOverlapExecute(); #endif // _NA_005039_20120703_ENABLE_MULTI_CLIENT_COUNT void AddVirtualPacket(DWORD dwServerIndex,BYTE *pPacket,int iSize); void ParseVirtualPacket(); void InitializeVirtualPacket(); void ProcessEffectSound(); ENUM_SCREEN_RATIO screen_ratio(); BOOL IsWideModeFlag(); POINT desktop_screen_size() const { return desktop_screen_size_; } void set_desktop_screen_size(int width, int height) { desktop_screen_size_.x = width; desktop_screen_size_.y = height; } void Set2DMode(BOOL bFlag = TRUE); void OnChangeRes(POINT *pPoint); BOOL CheckScreenSize(); POINT *GetScreenSize( void ) { return &m_ScreenSize; } POINT Get2DModeMapping( void ); void ProcessDebugInput(); void UpdateGlobalVariable(); // // WORLD SEREVR RECCONECT // void OnReconnectToWorldServer(); void OffReconnectToWorldServer(); void CheckReconnectToWorldServer(); void ForceReconnectToWorldServer(); #ifdef _NA_008016_20150202_OLD_RANKING_SYSTEM RankingManager * GetRankingManager(){ return &m_RankManager;} #endif // _NA_008016_20150202_OLD_RANKING_SYSTEM BOOL IsFocus() { return m_bFocus;} #ifdef _APPLY_JAPAN_GAMECHU_CHANNELING BOOL InvokeCash(); BOOL IsInitWIC() { return web_in_client.IsInitialize(); } #endif //_APPLY_JAPAN_GAMECHU_CHANNELING private: // Performance °ü·Ã Á¤º¸ void _renderPerfInfo(); void _renderPerformanceStatus(); void _renderProfile(); void _renderProcessProfile(); static int NewHandler(size_t); static void PureCallHandler(); static void BufferOverflowHandler(int code, void* unused); protected: void SendToChatHeartbeatSyn(); // HeartBeat syn °ü·Ã void CreateConsole(); void ProcessConsole(); protected: GameFramework* m_GameFramework; CDiscAccess * m_pDiscAccess; DWORD m_dwHeartBeatTimer; MSG_CW_HEARTBEAT m_CW_HeartbeatMsg; vector m_VirtualPacket; vector m_RecvVirtualPacket; POINT m_ScreenSize; //! ¹ÙÅÁÈ­¸é ½ºÅ©¸° Å©±â POINT desktop_screen_size_; BOOL m_bRunningGame; BOOL m_bGameInput; HANDLE m_hConsole; // ÇöÀç Æ½ DWORD m_dwCurrentTick; BOOL m_bCheckToWorldServerReconnect; DWORD m_dwStartTickToWorldServerReconnect; DWORD m_dwOverTickToWorldServerReconnect; int m_iTryCountToWroldServerReconnect; int m_iDebugInfo; #ifdef _NA_005039_20120703_ENABLE_MULTI_CLIENT_COUNT #else //_NA_005039_20120703_ENABLE_MULTI_CLIENT_COUNT HANDLE m_hSemaphore; #endif //_NA_005039_20120703_ENABLE_MULTI_CLIENT_COUNT #ifdef GGUO_CRASH_DUMP #ifdef _DH_DEBUG_REPORT static LONG WINAPI ExceptionFilter( struct _EXCEPTION_POINTERS * pExceptionInfo ); static MINIDUMP_TYPE s_eDumpType; static TCHAR s_pszDumpFileDir[MAX_PATH*2]; static TCHAR s_pszFilePrefix[MAX_PATH]; static TCHAR s_pszBuildVersion[MAX_PATH]; static LPEXCEPTION_POINTERS* g_ExceptionInfo; #else//_DH_DEBUG_REPORT static LONG WINAPI ExceptionFilter( struct _EXCEPTION_POINTERS * pExceptionInfo ); #endif//_DH_DEBUG_REPORT #endif//GGUO_CRASH_DUMP BOOL m_bFocus; #ifdef _NA_008016_20150202_OLD_RANKING_SYSTEM RankingManager m_RankManager; #endif // _NA_008016_20150202_OLD_RANKING_SYSTEM TCHAR m_szProfile[100][100]; int m_iProfile[100]; HANDLE m_hTextureOnHead; public: CWzUnitDraw *l_pPreloadResource[MAX_PRELOAD_RESOURCE]; DWORD l_dwPreloadResource[MAX_PRELOAD_RESOURCE]; HANDLE GetTextureOnHeadHandle(){return m_hTextureOnHead;} #ifdef _APPLY_JAPAN_GAMECHU_CHANNELING GWICWrapper web_in_client; #endif //_APPLY_JAPAN_GAMECHU_CHANNELING }; extern Application * g_pApplication; #define GET_MISSION_RANK_MANAGER() g_pApplication->GetRankingManager() #endif // _Application_H #ifdef _APPLY_JAPAN_GAMECHU_CHANNELING inline BOOL Application::InvokeCash() { if (IsInitWIC() == TRUE) { return web_in_client.InvokeCash(); } return FALSE; } #endif //_APPLY_JAPAN_GAMECHU_CHANNELING