コード例 #1
0
ファイル: RTMFPWriter.cpp プロジェクト: jaejungkim/MonaServer
void RTMFPWriter::close(int code) {
	if(state()==CLOSED)
		return;
	if(_stage>0 || _connectedSize>0 || _messages.size()>0)
		createBufferedMessage(); // Send a MESSAGE_END just in the case where the receiver has been created (or will be created)
	Writer::close(code);
}
コード例 #2
0
ファイル: FlowWriter.cpp プロジェクト: EwanColdicott/Cumulus
AMFWriter& FlowWriter::writeAMFPacket(const string& name) {
	MessageBuffered& message(createBufferedMessage());
	BinaryWriter& writer = message.rawWriter;
	writer.write8(Message::AMF);writer.write8(0);writer.write32(0);
	writer.write8(AMF_STRING);writer.writeString16(name);
	return message.amfWriter;
}
コード例 #3
0
ファイル: RTMFPWriter.cpp プロジェクト: jaejungkim/MonaServer
AMFWriter& RTMFPWriter::write(AMF::ContentType type,UInt32 time,PacketReader* pPacket) {
	if(pPacket && !reliable) {
		UInt8 headerRequired(type==AMF::DATA ? 6 : 5);
		if(pPacket->position()>=headerRequired) {
			pPacket->reset(pPacket->position()-headerRequired);
			BinaryWriter writer((UInt8*)pPacket->current(),headerRequired);
			writer.write8(type);
			writer.write32(time);
			if(type==AMF::DATA)
				writer.write8(0);
			writeRaw(pPacket->current(),pPacket->available());
            return AMFWriter::Null;
		}
		DEBUG("Written unbuffered impossible, it requires 6 head bytes available on MemoryReader given");
	}
	
	AMFWriter& amf = createBufferedMessage().writer();
	BinaryWriter& packet = amf.packet;
	packet.write8(type);
	packet.write32(time);
	if(type==AMF::DATA)
		packet.write8(0);
	if(pPacket)
		packet.writeRaw(pPacket->current(),pPacket->available());
	return amf;
}
コード例 #4
0
ファイル: FlowWriter.cpp プロジェクト: EwanColdicott/Cumulus
void FlowWriter::close() {
	if(_closed)
		return;
	if(_stage>0 || _messages.size()>0)
		createBufferedMessage(); // Send a MESSAGE_END just in the case where the receiver has been created (or will be created)
	_closed=true;
	flush();
}
コード例 #5
0
ファイル: FlowWriter.cpp プロジェクト: EwanColdicott/Cumulus
BinaryWriter& FlowWriter::writeRawMessage(bool withoutHeader) {
	MessageBuffered& message(createBufferedMessage());
	if(!withoutHeader) {
		message.rawWriter.write8(0x04);
		message.rawWriter.write32(0);
	}
	return message.rawWriter;
}
コード例 #6
0
ファイル: RTMFPWriter.cpp プロジェクト: jaejungkim/MonaServer
void RTMFPWriter::writeRaw(const UInt8* data,UInt32 size) {
	if(reliable || state()==CONNECTING) {
		createBufferedMessage().writer().packet.writeRaw(data,size);
		return;
	}
	if(state()==CLOSED || signature.empty() || _band.failed()) // signature.empty() means that we are on the writer of FlowNull
		return;
	_messages.emplace_back(new RTMFPMessageUnbuffered(data,size));
	flush();
}
コード例 #7
0
ファイル: FlowWriter.cpp プロジェクト: EwanColdicott/Cumulus
AMFObjectWriter FlowWriter::writeAMFResponse(const string& name,const string& code,const string& description) {
	MessageBuffered& message(createBufferedMessage());
	writeResponseHeader(message.rawWriter,name,_callbackHandle);

	string entireCode(_obj);
	if(!code.empty()) {
		entireCode.append(".");
		entireCode.append(code);
	}
	
	bool precValue = message.amfWriter.amf0Preference;
	message.amfWriter.amf0Preference=true;
	AMFObjectWriter object(message.amfWriter);
	if(name=="_error")
		object.write("level","error");
	else
		object.write("level","status");
	object.write("code",entireCode);
	if(!description.empty())
		object.write("description",description);
	message.amfWriter.amf0Preference = precValue;
	return object;
}
コード例 #8
0
ファイル: FlowWriter.cpp プロジェクト: EwanColdicott/Cumulus
void FlowWriter::clear() {
	// delete messages
	Message* pMessage;
	while(!_messages.empty()) {
		pMessage = _messages.front();
		_lostCount += pMessage->fragments.size();
		delete pMessage;
		_messages.pop_front();
	}
	while(!_messagesSent.empty()) {
		pMessage = _messagesSent.front();
		_lostCount += pMessage->fragments.size();
		if(pMessage->repeatable)
			--_repeatable;
		delete pMessage;
		_messagesSent.pop_front();
	}
	if(_stage>0) {
		createBufferedMessage(); // Send a MESSAGE_ABANDONMENT just in the case where the receiver has been created
		flush();
		_trigger.stop();
	}
}
コード例 #9
0
ファイル: FlowWriter.cpp プロジェクト: EwanColdicott/Cumulus
AMFWriter& FlowWriter::writeAMFResult() {
	MessageBuffered& message(createBufferedMessage());
	writeResponseHeader(message.rawWriter,"_result",_callbackHandle);
	return message.amfWriter;
}
コード例 #10
0
ファイル: FlowWriter.cpp プロジェクト: EwanColdicott/Cumulus
AMFWriter& FlowWriter::writeAMFMessage(const std::string& name) {
	MessageBuffered& message(createBufferedMessage());
	writeResponseHeader(message.rawWriter,name,0);
	return message.amfWriter;
}
コード例 #11
0
ファイル: RTMFPWriter.cpp プロジェクト: jaejungkim/MonaServer
bool RTMFPWriter::writeMember(const Client& client) {
	RTMFPMessageBuffered& message(createBufferedMessage());
	message.writer().packet.write8(0x0b); // unknown
	message.writer().packet.writeRaw(client.id,ID_SIZE);
	return true;
}