Esempio n. 1
0
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));
}