Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public NextAction handleRead(final FilterChainContext ctx) throws IOException {
- final Buffer buffer = ctx.getMessage();
- final int total = buffer.remaining();
- if (total < HEADER_SIZE) {
- return ctx.getStopAction(buffer);
- }
- buffer.get();
- buffer.get();
- buffer.get();
- buffer.get();
- int len = buffer.getInt();
- if (total < HEADER_SIZE + len) {
- return ctx.getStopAction(buffer);
- }
- byte[] pack = new byte[len];
- buffer.get(pack);
- String name = new String(pack);
- int size = buffer.getInt();
- final int completeMessageLength = HEADER_SIZE + size + len;
- if (total < completeMessageLength) {
- return ctx.getStopAction(buffer);
- }
- final Buffer remainder = total > completeMessageLength ? buffer.split(completeMessageLength) : null;
- // System.out.println("PACKET[IN] Name: " + name + " Size: " + total + " BodySize: " + buffer.remaining());
- byte[] body = new byte[size];
- buffer.get(body);
- Packet packet = getPacket(name);
- if (packet == null) {
- return ctx.getInvokeAction(remainder);
- }
- packet.read(body);
- handlePacket(ctx.getConnection(), packet);
- return ctx.getInvokeAction(remainder);
- }
- @Override
- public NextAction handleWrite(final FilterChainContext ctx) throws IOException {
- Packet packet = ctx.getMessage();
- String name = packet.getClass().getName();
- byte[] packetBody = name.getBytes();
- byte[] body = packet.write();
- int bodyLen = body.length;
- int packetLen = packetBody.length;
- final MemoryManager memoryManager = ctx.getConnection().getTransport().getMemoryManager();
- int size = HEADER_SIZE + bodyLen + packetLen;
- final Buffer output = memoryManager.allocate(size);
- output.allowBufferDispose(true);
- output.put((byte) 0);
- output.put((byte) 0);
- output.put((byte) 0);
- output.put((byte) 0);
- output.putInt(packetLen);
- output.put(packetBody);
- output.putInt(bodyLen);
- output.put(body);
- ctx.setMessage(output.flip());
- // System.out.println("PACKET[OUT] ID: " + name + " Size: " + size);
- return ctx.getInvokeAction();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement