Files
mir_server/Gateway/srvlib/include/net/asyn_work_socket.h

75 lines
1.9 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#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();
//<2F><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>flushProtoPacket<65><EFBFBD><E1BDBB><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
DataPacket& allocProtoPacket(uint16_t cmd);
void FlushProtoPacket(DataPacket& packet, const char* fn, int line);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Ϣ
void PostMsg(UINT uMsg, size_t para1, size_t para2, size_t para3, size_t para4);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3A8><EFBFBD><EFBFBD>WSAStartup<75><70>,<2C><><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD>
static int InitSocketLib();
//ж<><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3A8><EFBFBD><EFBFBD>WSACleanup<75><70>
static void UnintSocketLib();
void SetDataBuffSize(int size);
protected:
virtual void OnRecv();
/**** <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ǵĺ<C7B5><C4BA><EFBFBD> ****/
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_; //<2F>ϴ<EFBFBD>ͨ<EFBFBD>ŵ<EFBFBD>ʱ<EFBFBD><CAB1>
private:
BaseAllocator allocator_;
QueueList<DataPacket*> net_msg_list_; // <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
Mutex net_msg_lock_;
Vector<DataPacket*> free_back_list_;
QueueList<DataPacket*> free_dp_list_;
Mutex free_lock_;
QueueList<APPINTERNALMSG> msg_list_; //<2F>ڲ<EFBFBD><DAB2><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
Mutex msg_lock_; //<2F>ڲ<EFBFBD><DAB2><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><D0B1><EFBFBD>
size_t recv_size_;
DataPacket data_buff_;
};
#endif