#include #include #include #include #include #include namespace hgl { namespace network { TCPAcceptPacket::TCPAcceptPacket():TCPAccept(),recv_buffer(HGL_TCP_BUFFER_SIZE) { } TCPAcceptPacket::TCPAcceptPacket(int s,IPAddress *ip):TCPAccept(s,ip),recv_buffer(HGL_TCP_BUFFER_SIZE) { } /** * 从socket接收数据回调函数
此写法有待改良 */ int TCPAcceptPacket::OnSocketRecv(int /*size*/) { if(!sis) { sis=new SocketInputStream(ThisSocket); recv_total=0; recv_length=0; } int total=0; while(true) { if(recv_lengthRead(recv_buffer.data()+recv_length,PACKET_SIZE_TYPE_BYTES-recv_length); if(result<0) return(result); if(result==0) return total; recv_length+=result; recv_total+=result; total+=result; } if(recv_lengthRead(recv_buffer.data()+recv_length,pack_size-(recv_length-PACKET_SIZE_TYPE_BYTES)); if(result<0) return(result); if(result==0) return total; recv_length+=result; recv_total+=result; total+=result; if(recv_lengthWriteFully(&size,sizeof(PACKET_SIZE_TYPE)); if(result!=sizeof(PACKET_SIZE_TYPE)) return(false); result=sos->WriteFully(data,size); if(result!=size) return(false); return(true); } }//namespace network }//namespace hgl