ARCEmu项目wow私服服务器网络模块分析(一)

本文详细介绍了SocketMgr类,这是一个基于iocp的Socket管理器,用于Windows平台的多平台异步网络库。它包括了创建、关闭、添加、移除socket等关键功能,并提供了线程管理及状态显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * Multiplatform Async Network Library
 * Copyright (c) 2007 Burlex
 *
 * SocketMgr - iocp-based SocketMgr for windows.
 *
 */


#ifndef SOCKETMGR_H_WIN32
#define SOCKETMGR_H_WIN32

#ifdef CONFIG_USE_IOCP

class Socket;
class SERVER_DECL SocketMgr : public Singleton<SocketMgr>
{
	public:
		SocketMgr();
		~SocketMgr();

		ARCEMU_INLINE HANDLE GetCompletionPort() { return m_completionPort; }
		void SpawnWorkerThreads();
		void CloseAll();
		void ShowStatus();
		void AddSocket(Socket* s)
		{
			socketLock.Acquire();
			_sockets.insert(s);
			++socket_count;
			socketLock.Release();
		}

		void RemoveSocket(Socket* s)
		{
			socketLock.Acquire();
			_sockets.erase(s);
			--socket_count;
			socketLock.Release();
		}

		void ShutdownThreads();
		long threadcount;

	private:
		HANDLE m_completionPort;
		set<Socket*> _sockets;
		Mutex socketLock;
		Arcemu::Threading::AtomicCounter socket_count;
};

#define sSocketMgr SocketMgr::getSingleton()

typedef void(*OperationHandler)(Socket* s, uint32 len);

class SocketWorkerThread : public ThreadBase
{
	public:
		bool run();
};

void SERVER_DECL HandleReadComplete(Socket* s, uint32 len);
void SERVER_DECL HandleWriteComplete(Socket* s, uint32 len);
void SERVER_DECL HandleShutdown(Socket* s, uint32 len);

static OperationHandler ophandlers[NUM_SOCKET_IO_EVENTS] =
{
	&HandleReadComplete,
	&HandleWriteComplete,
	&HandleShutdown
};

#endif
#endif

 先上源码,等会分析。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值