#ifndef _CAUTHRORIZE_USER_H_ #define _CAUTHRORIZE_USER_H_ #include #include #include #include #include // Àü¹æ ÂüÁ¶ class CAuthClientDispatch; typedef struct AUTHINFO { unsigned long dwSessionID; // ¼¼¼Ç¾ÆÀ̵ð char szUserAccount[40]; // ¾ÆÀ̵ð char szUserPassword[40]; // ÆÐ½º¿öµå char szAddr[32]; // ¾Æ¾ÆÇÇ unsigned long dwUserID; unsigned short usFlag; unsigned short usCnFlag; CAuthClientDispatch* lpDispatch; // ó¸®Å¬·¡½º }*LPAUTHINFO; class CAuthInfo { public: // login ¿ë CAuthInfo(CAuthClientDispatch* lpDispatch, unsigned long dwSessionID, const char* szUserAccount, const char* szUserPassword, size_t nMaxUserAccountSize, size_t nMaxUserPasswordSize, unsigned short usFlag, unsigned short usCnFlag); // logout¿ë CAuthInfo(CAuthClientDispatch* lpDispatch, const char* szUserAccount, size_t nMaxUserAccountSize); ~CAuthInfo(); BOOL GetIsLogin() { return m_bLogin; } unsigned long GetSessionID() { return m_dwSessionID; } char* GetUserAccount() { return m_szUserAccount; } char* GetUserPassword() { return m_szUserPassword; } unsigned short GetFlag() { return m_usFlag; } unsigned short GetCnFlag() { return m_usCnFlag; } CAuthClientDispatch* GetDispatch() { return m_lpDispatch; } unsigned long GetAuthStartTime() { return m_dwAuthStartTime; } protected: unsigned long m_dwSessionID; // ¼¼¼Ç¾ÆÀ̵ð unsigned long m_dwAuthStartTime; // ÀÎÁõ ½ÃÀ۽ð£ char m_szUserAccount[PktAU::ID_LEN]; // ¾ÆÀ̵ð char m_szUserPassword[PktAU::PASS_LEN]; // ÆÐ½º¿öµå BOOL m_bLogin; // ·Î±×ÀÎ ÆÐŶ unsigned short m_usFlag; unsigned short m_usCnFlag; CAuthClientDispatch* m_lpDispatch; // ó¸®Å¬·¡½º }; class CSyncronizedObjectQueue { public: CSyncronizedObjectQueue(); ~CSyncronizedObjectQueue(); bool enqueue(CAuthInfo* lpCommand, bool bPendHead = false); CAuthInfo* dequeue(unsigned long dwMilliSecond = INFINITE); void remove(const char* szUserAccount); void set_max_size(size_t nSize) { m_nMaxSize = nSize; } size_t get_size() { return m_CommandQueue.size(); } void stop(); bool is_stopped(); void clear(); protected: enum Const { StopperIndex, SemaphoreIndex, MaxIndex }; private: typedef std::list CommandQueue; CCSLock m_DataLock; HANDLE m_hHandles[MaxIndex]; CommandQueue m_CommandQueue; size_t m_nMaxSize; bool m_bStop; }; class CAuthorizeUser { public: static CAuthorizeUser& GetInstance(); typedef std::list AuthorizeList; // Desc : ÀÎÁõ ½º·¹µå »ý¼º ¹× ó¸® ½ÃÀÛ. bool Initialize(unsigned long nThreadNum, unsigned long dwMaxAuthorizeListSize); // Desc : ÀÎÁõ ½º·¹½º ¼Ò¸ê ¹× ó¸® Á¾·á. void Destroy(); // Desc : ÀÎÁõ ¸®½ºÆ®¿¡ »õ ÀÎÁõ ¿äûÀ» Áý¾î ³ÖÀ½. // Input : CAuthInfo. ÀÎÁõ¿¡ ÇÊ¿äÇÑ Á¤º¸µé // Output : ¸®½ºÆ®¿¡ »ðÀÔ ¼º°ø : true, ¸®½ºÆ®°¡ ÀÏÁ¤ °³¼ö ÀÌ»óÀÓ : false; bool AddAuthorizeUser(CAuthInfo* lpAuthInfo); // Desc : ÇöÀç °¡Áö°í ÀÖ´Â ÀÎÁõ Á¤º¸¸¦ ¸®½ºÆ®¿¡ ³Ö¾î ÁÜ. µ¥ÀÌÅͰ¡ ¿Ã ¶§±îÁö Wait»óÅÂÀÓ. // Input : AuthorizeList& LocalAuthorizeList ÀÎÁõ Á¤º¸ ¸®½ºÆ®. // Output : µ¥ÀÌÅ͸¦ ¾ò¾î ¿È : true, ¾ò¾î¿Ã ¼ö ¾øÀ½(Á¾·á½Ã) : false CAuthInfo* GetAuthorizeInfo(unsigned long dwMilliSecond = INFINITE); size_t GetAuthUserNum() { return m_AuthInfoQueue.get_size(); } void stop() { m_AuthInfoQueue.stop(); } bool is_stopped() { return m_AuthInfoQueue.is_stopped(); } void RemovePending(const char* szUserAccount); void ConnectAll(); private: CAuthorizeUser(); ~CAuthorizeUser(); enum { DEFAULT_AUTHORIZE_LIST = 10000 }; typedef CCSLock AuthorizeLock; CSyncronizedObjectQueue m_AuthInfoQueue; CThreadMgr m_AuthorizeThreadMgr; }; #endif