#ifndef HGL_NETWORK_DIRECT_SOCKET_IO_USER_THREAD_INCLUDE #define HGL_NETWORK_DIRECT_SOCKET_IO_USER_THREAD_INCLUDE #include #ifdef HGL_NETWORK_SCTP_SUPPORT #include #endif//HGL_NETWORK_SCTP_SUPPORT #include #include #include #include #include namespace hgl { using namespace hgl::io; namespace network { template class DirectSocketIOUserThread:public Thread { bool IsExitDelete()const override {return true;} ///<返回在退出线程时,是否删除本对象 protected: int sock; IPAddress *addr; S *s; SocketInputStream *sis; SocketOutputStream *sos; DataInputStream *dis; DataOutputStream *dos; public: bool block; ///<是否使用阻塞模式 double block_send_time; ///<阻塞时间 double block_recv_time; double wait_time; ///<数据等待时间 public: DirectSocketIOUserThread(int s,const IPAddress *sa) { sock=s; addr=sa->CreateCopy(); block=true; block_recv_time=1; block_send_time=1; wait_time=10; } virtual bool ProcStartThread() override { s=new S(sock,addr); sis=new SocketInputStream(sock); sos=new SocketOutputStream(sock); dis=new DIS(sis); dos=new DOS(sos); s->SetBlock(block,block_send_time,block_recv_time); return(true); } virtual ~DirectSocketIOUserThread() { SAFE_CLEAR(addr); SAFE_CLEAR(dis); SAFE_CLEAR(dos); SAFE_CLEAR(sos); SAFE_CLEAR(sis); SAFE_CLEAR(s); } virtual bool Update()=0; virtual bool IdleUpdate(){return(true);} virtual bool Execute() override { int wr=s->WaitRecv(wait_time); if(wr<0) RETURN_FALSE; if(wr==0) return IdleUpdate(); return Update(); } };//class DirectSocketIOUserThread typedef DirectSocketIOUserThread LETCPSocketIOUserThread; typedef DirectSocketIOUserThread BETCPSocketIOUserThread; #ifdef HGL_NETWORK_SCTP_SUPPORT typedef DirectSocketIOUserThread LESCTPSocketIOUserThread; typedef DirectSocketIOUserThread BESCTPSocketIOUserThread; #endif//HGL_NETWORK_SCTP_SUPPORT }//namespace network }//namespace hgl #endif//HGL_NETWORK_DIRECT_SOCKET_IO_USER_THREAD_INCLUDE