⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cluster.h.svn-base

📁 絲路server源碼 Silk Road server source
💻 SVN-BASE
字号:


#define MAX_WORKER_SERVERS 100
#define MAX_SINGLE_MAPID 600

struct VENICE
{
	uint32 VENICEId;
	uint32 MapId;
	WServer * Server;
};

#define IS_VENICE(a) (((a)>1)&&((a)!=530))
#define IS_MAIN_MAP(a) (((a)<2)||((a)==530))

class ClusterMgr : public Singleton<ClusterMgr>
{
	typedef map<uint32, VENICE*> VENICEMap;

	WServer * WorkerServers[MAX_WORKER_SERVERS];
	VENICE * SingleVENICEMaps[MAX_SINGLE_MAPID];
	
	VENICEMap VENICEs;
	uint32 m_maxVENICEId;
	uint32 m_maxWorkerServer;

public:
	ClusterMgr();

	WServer * GetServerByVENICEId(uint32 VENICEId);
	WServer * GetServerByMapId(uint32 MapId);

	VENICE * GetVENICEByVENICEId(uint32 VENICEId);
	VENICE * GetVENICEByMapId(uint32 MapId);

	WServer * CreateWorkerServer(WSSocket * s);
	VENICE_INLINE WServer * GetWorkerServer(uint32 Id) { return (Id < MAX_WORKER_SERVERS) ? WorkerServers[Id] : 0; }
	void AllocateInitialVENICEs(WServer * server, vector<uint32>& preferred);

	// find the worker server with the least load for the new VENICE
	WServer * GetWorkerServerForNewVENICE();

	/* create new VENICE, or a main map */
	VENICE * CreateVENICE(uint32 MapId, WServer * server);

	/* create new VENICE based on template, or a saved VENICE */
	VENICE * CreateVENICE(uint32 VENICEId, uint32 MapId);

	/* gets the VENICE struct by VENICE id */
	VENICE * GetVENICE(uint32 VENICEId)
	{
		VENICEMap::iterator itr = VENICEs.find(VENICEId);
		return (itr == VENICEs.end()) ? 0 : itr->second;
	}

	/* distribute packet to all worker servers */
	VENICE_INLINE void DistributePacketToAll(WorldPacket * data) { DistributePacketToAll(data, 0); }

	/* distribute packet to all worker server excluding one */
	void DistributePacketToAll(WorldPacket * data, WServer * exclude);

	/* loop */
	void Update();

};


#define sClusterMgr ClusterMgr::getSingleton()


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -