Example #1
0
//read/write operations---------------------------------------------------------------
    int JackNetAdapter::Read()
    {
        switch (SyncRecv()) {
        
            case SOCKET_ERROR:
                return 0;
                
            case SYNC_PACKET_ERROR:
                // Since sync packet is incorrect, don't decode it and continue with data
                break;
                
            default:
                //decode sync
                DecodeSyncPacket();
                break;
        }
        
        return DataRecv();
    }
Example #2
0
 void Receive(T* out_value) {
     if (self_verify_ && is_loopback_) {
         // for communication verification, receive hash_code.
         size_t hash_code;
         SyncRecv(&hash_code, sizeof(hash_code));
         if (hash_code != typeid(T).hash_code()) {
             throw std::runtime_error(
                       "Connection::Receive() attempted to receive item "
                       "with different typeid!");
         }
     }
     if (std::is_pod<T>::value) {
         // receive PODs directly into memory.
         SyncRecv(out_value, sizeof(*out_value));
     }
     else if (data::Serialization<BufferBuilder, T>::is_fixed_size) {
         // fixed_size items can be received 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)
             std::array<uint8_t, fixed_size> b;
             SyncRecv(b.data(), b.size());
             BufferReader br(b.data(), b.size());
             *out_value = data::Serialization<BufferReader, T>::Deserialize(br);
         }
         else {
             // too big, use heap allocation
             Buffer b(data::Serialization<BufferBuilder, T>::fixed_size);
             SyncRecv(b.data(), b.size());
             BufferReader br(b);
             *out_value = data::Serialization<BufferReader, T>::Deserialize(br);
         }
     }
     else {
         // variable length items are prefixed with size header
         size_t size;
         SyncRecv(&size, sizeof(size));
         // receives message
         Buffer b(size);
         SyncRecv(b.data(), size);
         BufferReader br(b);
         *out_value = data::Serialization<BufferReader, T>::Deserialize(br);
     }
 }
Example #3
0
void CCLient::OnRecv( const TCHAR *pszBuff,size_t size )
{
	theConsole.Trace("OnRecv","\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n%s\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",pszBuff);
	SyncRecv(1024);
}
Example #4
0
void CCLient::OnSend( const TCHAR *pszBuff,size_t size )
{
	theConsole.Trace("OnSend","\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n%s\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",pszBuff);
	SyncRecv(1024);
}
Example #5
0
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);
}
Example #6
0
ssize_t Connection::RecvOne(void* out_data, size_t size) {
    SyncRecv(out_data, size);
    return size;
}