package com.github.bjuvensjo.rsimulator.socket; import com.google.inject.Inject; import com.google.inject.Singleton; import com.google.inject.name.Named; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; /** * Created by ei4577 on 05/03/14. */ @Singleton public class RequestReader { private static final Logger log = LoggerFactory.getLogger(RequestReader.class); @Inject @Named("encoding") private String encoding; @Inject @Named("headerLength") private int headerLength; @Inject @Named("headerBodyLengthBeginIndex") private int headerBodyLengthBeginIndex; @Inject @Named("headerBodyLengthEndIndex") private int headerBodyLengthEndIndex; public Request read(InputStream in) throws IOException { String header = null; String body = null; byte[] headerBytes = new byte[headerLength]; int n = in.read(headerBytes); if (n > 0) { header = new String(headerBytes, encoding); log.debug("header: #{}# ", header); int length = Integer.parseInt(header.substring(headerBodyLengthBeginIndex, headerBodyLengthEndIndex)); log.debug("length: {}", length); byte[] bodyBytes = new byte[length]; in.read(bodyBytes); body = new String(bodyBytes, encoding); log.debug("body: #{}#", body); } log.info("request: #{}#", header + body); return new Request(header, body); } static class Request { private String header; private String body; Request(String header, String body) { this.header = header; this.body = body; } public String getHeader() { return header; } public String getBody() { return body; } public boolean isValid() { return header != null && body != null; } } }