package org.hongxi.whatsmars.netty.nio.http; import org.hongxi.whatsmars.netty.nio.Message; import org.hongxi.whatsmars.netty.nio.MessageBuffer; import org.hongxi.whatsmars.netty.nio.MessageReader; import org.hongxi.whatsmars.netty.nio.Socket; import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; /** * Created by jjenkov on 18-10-2015. */ public class HttpMessageReader implements MessageReader { private MessageBuffer messageBuffer = null; private List completeMessages = new ArrayList(); private Message nextMessage = null; public HttpMessageReader() { } @Override public void init(MessageBuffer readMessageBuffer) { this.messageBuffer = readMessageBuffer; this.nextMessage = messageBuffer.getMessage(); this.nextMessage.metaData = new HttpHeaders(); } @Override public void read(Socket socket, ByteBuffer byteBuffer) throws IOException { int bytesRead = socket.read(byteBuffer); byteBuffer.flip(); if(byteBuffer.remaining() == 0){ byteBuffer.clear(); return; } this.nextMessage.writeToMessage(byteBuffer); int endIndex = HttpUtil.parseHttpRequest(this.nextMessage.sharedArray, this.nextMessage.offset, this.nextMessage.offset + this.nextMessage.length, (HttpHeaders) this.nextMessage.metaData); if(endIndex != -1){ Message message = this.messageBuffer.getMessage(); message.metaData = new HttpHeaders(); message.writePartialMessageToMessage(nextMessage, endIndex); completeMessages.add(nextMessage); nextMessage = message; } byteBuffer.clear(); } @Override public List getMessages() { return this.completeMessages; } }