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();
|
|||
|
|
|
|||
|
|
//<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
|
|||
|
|
|