//----------------------------------------------------------------------------- // Steam P2P messages //----------------------------------------------------------------------------- void CWarsExtension::ReceiveSteamP2PMessages( ISteamNetworking *pSteamNetworking, int channel, CUtlVector<WarsMessageData_t> &messageQueue ) { if( !pSteamNetworking ) return; char *pchRecvBuf = NULL; uint32 cubMsgSize; CSteamID steamIDRemote; while ( pSteamNetworking->IsP2PPacketAvailable( &cubMsgSize, channel ) ) { if ( pchRecvBuf ) free( pchRecvBuf ); pchRecvBuf = (char *)malloc( cubMsgSize ); // see if there is any data waiting on the socket if ( !pSteamNetworking->ReadP2PPacket( pchRecvBuf, cubMsgSize, &cubMsgSize, &steamIDRemote, channel ) ) break; if ( cubMsgSize < sizeof( uint32 ) ) { Warning( "Got garbage on server socket, too short\n" ); continue; } messageQueue.AddToTail(); messageQueue.Tail().steamIDRemote = steamIDRemote; messageQueue.Tail().buf.Put( pchRecvBuf, cubMsgSize ); } if ( pchRecvBuf ) free( pchRecvBuf ); }