int JackNetAdapter::Write() { EncodeSyncPacket(); if (SyncSend() == SOCKET_ERROR) { return SOCKET_ERROR; } return DataSend(); }
void CCLient::OnConnect( int nConnectID ) { theConsole.Trace("Client","OnConnected ConnectID:%d",nConnectID); std::string strHttpReq = ""; strHttpReq += "GET / HTTP/1.1\r\n"; strHttpReq += "Accept: text/html, application/xhtml+xml, */*\r\n"; strHttpReq += "Accept-Language: zh-CN\r\n"; strHttpReq += "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)\r\n"; strHttpReq += "Accept-Encoding: gzip, deflate\r\n"; strHttpReq += "Host: 127.0.0.1:80\r\n"; strHttpReq += "Connection: Keep-Alive\r\n"; SyncSend(strHttpReq.c_str(),strHttpReq.length()+1); }
void Send(const T& value) { if (self_verify_ && is_loopback_) { // for communication verification, send hash_code. size_t hash_code = typeid(T).hash_code(); SyncSend(&hash_code, sizeof(hash_code)); } if (std::is_pod<T>::value) { // send PODs directly from memory. SyncSend(&value, sizeof(value)); } else if (data::Serialization<BufferBuilder, T>::is_fixed_size) { // fixed_size items can be sent without size header static constexpr size_t fixed_size = data::Serialization<BufferBuilder, T>::fixed_size; if (fixed_size < 2 * 1024 * 1024) { // allocate buffer on stack (no allocation) using FixedBuilder = FixedBufferBuilder<fixed_size>; FixedBuilder fb; data::Serialization<FixedBuilder, T>::Serialize(value, fb); assert(fb.size() == fixed_size); SyncSend(fb.data(), fb.size()); } else { // too big, use heap allocation BufferBuilder bb; data::Serialization<BufferBuilder, T>::Serialize(value, bb); SyncSend(bb.data(), bb.size()); } } else { // variable length items must be prefixed with size header BufferBuilder bb; data::Serialization<BufferBuilder, T>::Serialize(value, bb); size_t size = bb.size(); SyncSend(&size, sizeof(size), MsgMore); SyncSend(bb.data(), bb.size()); } }
ssize_t Connection::SendOne(const void* data, size_t size, Flags flags) { SyncSend(data, size, flags); return size; }
void Connection::SyncRecvSend(const void* send_data, size_t send_size, void* recv_data, size_t recv_size) { SyncRecv(recv_data, recv_size); SyncSend(send_data, send_size, NoFlags); }