75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef _ASYN_WORK_SOCKET_H_
 | ||
| #define _ASYN_WORK_SOCKET_H_
 | ||
| 
 | ||
| #define flushProtoPacket(x) FlushProtoPacket(x, __FUNCTION__, __LINE__)
 | ||
| 
 | ||
| using namespace tick64;
 | ||
| using namespace container;
 | ||
| using namespace lock;
 | ||
| using namespace net;
 | ||
| 
 | ||
| class AsynWorkSocket : 
 | ||
| 	public BaseSocket,
 | ||
| 	public SendPacketPool
 | ||
| {
 | ||
| public:
 | ||
| 	AsynWorkSocket(const char* name);
 | ||
| 	virtual ~AsynWorkSocket();
 | ||
| 
 | ||
| 	//数据包填充完毕后需要调用flushProtoPacket提交到发送队列
 | ||
| 	DataPacket& allocProtoPacket(uint16_t cmd);
 | ||
| 
 | ||
| 	void FlushProtoPacket(DataPacket& packet, const char* fn, int line);
 | ||
| 
 | ||
| 	//发送内部消息
 | ||
| 	void PostMsg(UINT uMsg, size_t para1, size_t para2, size_t para3, size_t para4);
 | ||
| 
 | ||
| 	//初始化网络库(调用WSAStartup),返回0表示成功
 | ||
| 	static int InitSocketLib();
 | ||
| 	//卸载网络库(调用WSACleanup)
 | ||
| 	static void UnintSocketLib();
 | ||
| 
 | ||
| 	void SetDataBuffSize(int size);
 | ||
| 
 | ||
| protected:
 | ||
| 	virtual void OnRecv();
 | ||
| 
 | ||
| 	/**** 以下函数集为子类可能需要覆盖的函数 ****/
 | ||
| 	virtual bool PreProcess(DataPacketReader*) { return true; }
 | ||
| 
 | ||
| 	virtual void OnRecvSysMsg(UINT uMsg, size_t uParam1, size_t uParam2, size_t uParam3, size_t uParam4);
 | ||
| 	virtual void OnRun();
 | ||
| 	virtual void SingleRun();
 | ||
| 	virtual void OnRecv(const UInt16 cmd, char* buf, int size);
 | ||
| protected:
 | ||
| 	void ProcessSysMsg();
 | ||
| 	void SwapPackets();
 | ||
| 	void ClearSendBuffers();
 | ||
| 	bool ReadSocket();
 | ||
| 	void SendBuffers();
 | ||
| 	inline int GetMsgCount(){ return msg_list_.count(); }
 | ||
| 	void Disconnected();
 | ||
| 	void SendKeepAlive();
 | ||
| 	void SetRecvSize(int size) { recv_size_ = size; }
 | ||
| protected:
 | ||
| 	time_t					last_msg_t_;			//上次通信的时间
 | ||
| private:
 | ||
| 	BaseAllocator			allocator_;
 | ||
| 	QueueList<DataPacket*>	net_msg_list_;			// 用于保存网络收到的信息
 | ||
| 	Mutex					net_msg_lock_;
 | ||
| 
 | ||
| 	Vector<DataPacket*>		free_back_list_;
 | ||
| 	QueueList<DataPacket*>	free_dp_list_;
 | ||
| 	Mutex					free_lock_;
 | ||
| 
 | ||
| 	QueueList<APPINTERNALMSG> msg_list_;		//内部消息列表
 | ||
| 	Mutex					msg_lock_;			//内部消息列表锁
 | ||
| 	size_t					recv_size_;
 | ||
| 
 | ||
| 	DataPacket				data_buff_;
 | ||
| };
 | ||
| 
 | ||
| 
 | ||
| #endif
 | ||
| 
 |