Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
60 lines
1.2 KiB
C++
60 lines
1.2 KiB
C++
#ifndef _GM_NETWORK_SINGLE_DISPATCH_STORAGE_H_
|
|
#define _GM_NETWORK_SINGLE_DISPATCH_STORAGE_H_
|
|
|
|
#include <Thread/Lock.h>
|
|
|
|
class CPacketDispatch;
|
|
|
|
#define GET_SINGLE_DISPATCH(instanceName, type, table) \
|
|
CSingleDispatch::Storage Storage##instanceName(table); \
|
|
type* instanceName = static_cast<type*>(Storage##instanceName.GetDispatch())
|
|
|
|
class CSingleDispatch
|
|
{
|
|
public:
|
|
|
|
class Storage
|
|
{
|
|
public:
|
|
|
|
Storage(CSingleDispatch& singleDispatch);
|
|
~Storage();
|
|
|
|
CPacketDispatch* ReloadDispatch();
|
|
CPacketDispatch* GetDispatch() { return m_lpDispatch; }
|
|
|
|
private:
|
|
|
|
// Èü¿¡ »ý¼º ºÒ°¡.
|
|
static void* operator new(size_t size);
|
|
static void operator delete(void* ptr);
|
|
|
|
CPacketDispatch* m_lpDispatch;
|
|
CSingleDispatch& m_SingleDispatch;
|
|
};
|
|
|
|
CSingleDispatch();
|
|
~CSingleDispatch();
|
|
|
|
void SetDispatch(CPacketDispatch* lpDispatch);
|
|
void RemoveDispatch(CPacketDispatch* lpDispatch);
|
|
|
|
size_t GetDispatchNum();
|
|
bool IsEmpty();
|
|
|
|
private:
|
|
|
|
void InternalRemoveDispatch(CPacketDispatch* lpDispatch);
|
|
CPacketDispatch* GetDispatch();
|
|
|
|
typedef CCSLock LockType;
|
|
|
|
LockType m_DispatchLock;
|
|
CACHE_PAD(DispatchLockPad, sizeof(LockType));
|
|
|
|
CPacketDispatch* m_lpDispatch;
|
|
|
|
friend class Storage;
|
|
};
|
|
|
|
#endif |