/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.rtmp.decode; import org.apache.log4j.Logger; import com.ttProject.rtmp.header.HeaderFactory; import com.ttProject.rtmp.header.IRtmpHeader; import io.netty.buffer.ByteBuf; /** * MessageFactory * @author taktod * factory to handle Message obj for RtmpDecoder */ public class MessageFactory { @SuppressWarnings("unused") private Logger logger = Logger.getLogger(MessageFactory.class); private int chunkSize = 128; // default chunk size is 128 bytes, this value can be changed by setChunkSize event. private Message[] messages = new Message[IRtmpHeader.MAX_CHANNEL_ID]; /** * factory method for message. * @param in * @return */ public Message getMessage(ByteBuf in) { // get Header. IRtmpHeader header = HeaderFactory.getInstance().getHeader(in, messages); // ref the prev message. Message targetMessage = messages[header.getCsId()]; // in the case of no message, make new one. if(targetMessage == null || targetMessage.isComplete()) { targetMessage = new Message(header, targetMessage); messages[header.getCsId()] = targetMessage; } return targetMessage; } /** * set chunkSize * @param chunkSize */ public void setChunkSize(int chunkSize) { this.chunkSize = chunkSize; } /** * get Buffer size for data. * @param message * @return */ public int getBufSize(Message message) { return Math.min(message.getBody().writableBytes(), chunkSize); } }