/* ========================================================================== * ÆÄ ÀÏ : GuildManager.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : ±è°¡¶÷ * ÀÛ ¼º ÀÏ : 2008-10-31 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once /// ±æµå °»½Å½Ã°£ const unsigned long GUILD_UPDATETIME = 60 * 1000; // 1ºÐ const unsigned long GUILDDB_UPDATETIME = 60 * 60 * 1000; // 1½Ã°£ class cGuild; class cPlayer; class cGuildManager { static cGuildManager* mpSingleton; public: cGuildManager(); ~cGuildManager(); bool Init(); /// ÇØ´ç À¯Àú¿¡°Ô ±æµåÁ¤º¸ º¸³»±â void SendGuildInfo( ULONG_PTR socketContext, cPlayer* player, unsigned long idx ); void SendGuildInfo( cPlayer* player, unsigned long idx ); // º¹±¸ Á¤º¸ ½î±â void SendGuildRestore( unsigned long idx ); void SendGuildUserAdd( cGuild* guild, long characterIdx, char level, long job, short mapnum, wchar_t* name, char position, DWORD channelNum ); /// ±æµå¿¡ Ãß°¡ À¯Àú Á¤º¸ º¸³»ÁÖ±â void SendGuildUserOut( cGuild* guild, unsigned long characterIdx ); /// ±æµå¿¡ Å»Åð À¯Àú Á¤º¸ º¸³»ÁÖ±â void SendGuildUserCut( cGuild* guild, unsigned long characterIdx ); /// ±æµå¿¡ Ãß¹æ À¯Àú Á¤º¸ º¸³»ÁÖ±â void SendGuildUpdateInfo( cGuild* guild ); /// ÀÏÁ¤½Ã°£¸¶´Ù µ¥ÀÌÅÍ °»½ÅÈÄ º¸³»±â void SendGuildChangePosition( cGuild* guild, unsigned long characterIdx, char position ); /// ±æµåÀ¯Àú Á÷À§ º¯°æ bool SendGuildNotice( unsigned long idx, wchar_t* notice ); /// ±æµå°øÁö º¯°æ ¹× º¸³»±â void SendGuildMarkUpdate( cGuild* guild ); /// ¸¶Å© À妽º º¯°æ º¸³»±â bool SendGuildMark( unsigned long idx, cPlayer* player ); /// ¸¶Å© º¸³»ÁÖ±â void SendGuildChat( cPlayer* hero, wchar_t* message, u_int length, unsigned short number ); /// ±æµåäÆÃ void SendGuildUserConnect( unsigned long idx, unsigned long characterIdx, BYTE connect, DWORD channelNum, bool sendConnect ); /// ±æµå¿ø Á¢¼Ó¿©ºÎ º¸³»±â // ä³Î SYNC void PostGuildUserConnect( unsigned long idx, unsigned long characterIdx, BYTE connect, DWORD channelnum, bool sendConnect ); void PostGuildTTL( cGuild* guild ); bool PostGuildCreate( GUILD_CREATE* guildCreate, cPlayer* player ); bool PostGuildDelete( long idx ); bool PostGuildUserAdd( long idx, cPlayer* player, short mapnum ); bool PostGuildUserCut( long idx, long characterIdx ); bool PostGuildUserOut( long idx, long characterIdx ); bool PostGuildGivePosition( long idx, long characterIdx, char position ); bool PostGuildUpdateMark( long idx, TIMESTAMP_STRUCT markRegistDate, BYTE* mark, int size ); bool PostGuildNotice( long idx, wchar_t* notice ); bool PostGuildChat( cPlayer* player, wchar_t* message, u_int length, sInventory* inventory ); /// Àüü ±æµåÁ¤º¸ ÀúÀå void SaveAllDb(); /// ½ÅûÁ¤º¸ Ãë¼Ò void ClearRequest( cPlayer* hero ); /// Ç÷¹ÀÌ¾î µé¾î¿È (¸ÊÀ̵¿) void PlayerMapIn( cPlayer* hero ); /// ä³Î Á¤º¸ °»½Å bool GuildUpdateChannel( unsigned long idx, unsigned long characterIdx, DWORD channelNum, short mapnum ); unsigned long CheckGuildUser( unsigned long characterIdx ); // ±æµå¿ø °Ë»ç TB_GUILD_USER* IsGuildUser( unsigned long idx, unsigned long characterIdx ); /// ±æµå¿øÀÎÁö °Ë»ç bool CheckChangePosition( cPlayer* hero, unsigned long characterIdx, char newposition ); /// Á÷À§º¯°æ °¡´É ¿©ºÎ °Ë»ç /// ±æµå Á¤º¸ °»½Å ¹× Àü¼Û Ç÷¡±× bool RequestUpdateUser( unsigned long idx, unsigned long characterIdx ); public: void Release(); void Process( unsigned long elasedTime, unsigned long accumTime ); /// ±æµå »ý¼º bool AddGuild( GUILD_CREATE* data, cPlayer* master ); bool DeleteGuild( unsigned long idx ); /// ½Åû Á¤º¸ ÀúÀå bool AddRequest( unsigned long recvIdx, unsigned long reqIdx ); void DelRequest( unsigned long recvIdx ); unsigned long GetRequest( unsigned long recvIdx ); /// ¼­¹ö, ä³Î SYN ¸Þ¼¼Áö bool SynAddGuild( void* msg, DWORD channelNum ); bool SynAddGuildUser( void* msg, DWORD channelNum ); bool SynCutGuildUser( void* msg ); bool SynOutGuildUser( void* msg ); bool SynUpdateMark( void* msg ); bool SynGuildChat( void* msg ); /// Ãʱ⠱æµå Á¤º¸ »ý¼º void SetGuildTotalLength( DWORD length ); void SetGuildLength( DWORD length ); bool VerifyGuildSelect( TB_GUILD* guild ); bool VerifyGuildUser( unsigned long idx, TB_GUILD_USER* user ); /// cGuild* GetGuild( unsigned long idx ); wchar_t* GetGuildName( unsigned long idx ); void GetGuildMarkDate( unsigned long idx, tm& date, bool& useMark ); bool FindGuildName( wchar_t* name ); /// µ¥ÀÌÅÍ Á¤È®¼º °Ë»ç bool CheckGuildLength(); bool CheckGuildTotal(); bool CheckGuildSaveTotal(); protected: /// ±æµåÁ¤º¸ DB ¾÷µ¥ÀÌÆ® void SaveDBGuild( cGuild* guild ); public: static cGuildManager* Get(); private: /// ±æµå ¸Ê typedef tPointerHashMap cGuildMap; cGuildMap mGuildMap; /// ½Åû Á¤º¸ typedef tHashMap cJoinMap; cJoinMap mJoinMap; /// µ¥ÀÌÅÍ È®Àοë DWORD mGuildTotalLength; /// ÃÑ select ÇØ¾ßÇÒ ±æµå °¹¼ö ( DB ·¹ÄÚµå ¼ö ) DWORD mGuildTotalOffset; /// ÃÑ select ÇØ¾ßÇÒ ±æµå °¹¼ö ( DB ·¹ÄÚµå ¼ö ) DWORD mGuildSaveOffset; /// ÃÑ ÀúÀå ÇØ¾ßÇÒ ±æµå °¹¼ö DWORD mGuildSelectLength; /// ½ÇÁ¦ Á¸ÀçÇÏ´Â ±æµå °¹¼ö ( DB ·¹ÄÚµå ¼ö ) /// Á¤º¸°»½Å ½ÃÀ۽ð£ long mAccumTime; }; inline void cGuildManager::SetGuildTotalLength( DWORD length ) { mGuildTotalLength = length; } inline void cGuildManager::SetGuildLength( DWORD length ) { mGuildSelectLength = length; } inline cGuildManager* cGuildManager::Get() { return mpSingleton; } #define GUILDMAN cGuildManager::Get()