RTMFPFlow::RTMFPFlow(UInt64 id,const string& signature,Peer& peer,Invoker& invoker,BandWriter& band) : _poolBuffers(invoker.poolBuffers),_numberLostFragments(0),id(id),_stage(0),_completed(false),_pPacket(NULL),_pStream(NULL),_band(band) { RTMFPWriter* pWriter = new RTMFPWriter(peer.connected ? Writer::OPENED : Writer::OPENING,signature, band, _pWriter); if(signature.empty()) return; if (pWriter->flowId == 0) ((UInt64&)pWriter->flowId) = id; // create code prefix for a possible response // get flash stream process engine if(signature.size()>4 && signature.compare(0,5,"\x00\x54\x43\x04\x00",5)==0) (bool&)pWriter->critical = true; // NetConnection else if(signature.size()>3 && signature.compare(0,4,"\x00\x54\x43\x04",4)==0) invoker.flashStream(BinaryReader((const UInt8*)signature.c_str()+4,signature.length()-4).read7BitValue(),peer,_pStream); // NetStream else if(signature.size()>2 && signature.compare(0,3,"\x00\x47\x43",3)==0) (UInt64&)pWriter->flowId = id; // NetGroup if(!_pStream) _pStream.reset(new FlashMainStream(invoker,peer)); }