Advertisement
Guest User

Untitled

a guest
May 27th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. @Override
  2. public NextAction handleRead(final FilterChainContext ctx) throws IOException {
  3. final Buffer buffer = ctx.getMessage();
  4. final int total = buffer.remaining();
  5. if (total < HEADER_SIZE) {
  6. return ctx.getStopAction(buffer);
  7. }
  8. buffer.get();
  9. buffer.get();
  10. buffer.get();
  11. buffer.get();
  12. int len = buffer.getInt();
  13. if (total < HEADER_SIZE + len) {
  14. return ctx.getStopAction(buffer);
  15. }
  16. byte[] pack = new byte[len];
  17. buffer.get(pack);
  18. String name = new String(pack);
  19. int size = buffer.getInt();
  20. final int completeMessageLength = HEADER_SIZE + size + len;
  21. if (total < completeMessageLength) {
  22. return ctx.getStopAction(buffer);
  23. }
  24. final Buffer remainder = total > completeMessageLength ? buffer.split(completeMessageLength) : null;
  25. // System.out.println("PACKET[IN] Name: " + name + " Size: " + total + " BodySize: " + buffer.remaining());
  26. byte[] body = new byte[size];
  27. buffer.get(body);
  28. Packet packet = getPacket(name);
  29. if (packet == null) {
  30. return ctx.getInvokeAction(remainder);
  31. }
  32. packet.read(body);
  33. handlePacket(ctx.getConnection(), packet);
  34.  
  35. return ctx.getInvokeAction(remainder);
  36. }
  37.  
  38. @Override
  39. public NextAction handleWrite(final FilterChainContext ctx) throws IOException {
  40. Packet packet = ctx.getMessage();
  41. String name = packet.getClass().getName();
  42. byte[] packetBody = name.getBytes();
  43. byte[] body = packet.write();
  44. int bodyLen = body.length;
  45. int packetLen = packetBody.length;
  46. final MemoryManager memoryManager = ctx.getConnection().getTransport().getMemoryManager();
  47. int size = HEADER_SIZE + bodyLen + packetLen;
  48. final Buffer output = memoryManager.allocate(size);
  49. output.allowBufferDispose(true);
  50. output.put((byte) 0);
  51. output.put((byte) 0);
  52. output.put((byte) 0);
  53. output.put((byte) 0);
  54. output.putInt(packetLen);
  55. output.put(packetBody);
  56. output.putInt(bodyLen);
  57. output.put(body);
  58. ctx.setMessage(output.flip());
  59. // System.out.println("PACKET[OUT] ID: " + name + " Size: " + size);
  60. return ctx.getInvokeAction();
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement