/** * * @param byteBuffer */ public void read(ByteBuffer byteBuffer){ try { int length = available(); if(length > byteBuffer.remaining()){ length = byteBuffer.remaining(); } byte[] bytes = new byte[length]; socket.getInputStream().read(bytes, 0, length); byteBuffer.put(bytes); lastReadTime = System.currentTimeMillis(); } catch (IOException e) { //after a few millsecond use part use receive a close event; close(TcpConnectionCloseReason.WriteError); } } /**
if(connection.inReading == false&&connection.available()>0){ connection.inReading = true; addTask(TcpConnectionManagerTaskType.READ, connection);
public void onRead(TcpConnection connection){ if(connection.packet == null){ connection.packet = new HttpResponse(); } HttpResponse response = (HttpResponse)connection.packet; ByteBuffer byteBuffer = ByteBuffer.allocate(connection.available()); connection.read(byteBuffer); byteBuffer.flip(); HttpResponse result = null; try { result = HttpSerializeUtils.deSerialize(byteBuffer, response); } catch (HttpParseException e) { connection.close(HttpResponseStatus.phraseMap.get(HttpResponseStatus.BAD_REQUEST));// } HttpContext context = httpContexts.get(connection); connection.packet = null; httpClientHandler.onHttpResponse(result, context); } public void onReadIdle(TcpConnection connection) {
public void onRead(TcpConnection connection){ //create packet if not create before if(connection.packet == null){ connection.packet = new HttpRequest(); } HttpRequest request = (HttpRequest)connection.packet; //read all data from connection ByteBuffer byteBuffer = ByteBuffer.allocate(connection.available()); connection.read(byteBuffer); byteBuffer.flip(); try { HttpRequest request2 = HttpSerializeUtils.deSerialize(byteBuffer, request); //判断是否解析完成 if(request2 != null){ HttpContext context = httpContexts.get(connection); httpServerHandler.onHttpRequest(request, context); connection.packet = null; } } catch (HttpParseException e) { e.printStackTrace(); sendErrorAndCloseConnection(connection, HttpResponseStatus.BAD_REQUEST); } }