Server/Management-Server/src/main/java/ms/net/event/PacketWriteEvent.java
2021-03-07 20:37:32 -06:00

46 lines
No EOL
1 KiB
Java

package ms.net.event;
import java.nio.ByteBuffer;
import ms.net.IoSession;
import ms.net.IoWriteEvent;
import ms.net.packet.IoBuffer;
/**
* Handles world packet writing events.
* @author Emperor
*
*/
public final class PacketWriteEvent extends IoWriteEvent {
/**
* Constructs a new {@code PacketWriteEvent} {@code Object}.
* @param session The I/O session.
* @param context The packet context.
*/
public PacketWriteEvent(IoSession session, Object context) {
super(session, context);
}
@Override
public void write(IoSession session, Object context) {
IoBuffer b = (IoBuffer) context;
int size = b.toByteBuffer().position();
ByteBuffer buffer = ByteBuffer.allocate(1 + size + b.getHeader().ordinal());
buffer.put((byte) b.opcode());
switch (b.getHeader()) {
case NORMAL:
break;
case BYTE:
buffer.put((byte) size);
break;
case SHORT:
buffer.putShort((short) size);
break;
}
buffer.put((ByteBuffer) b.toByteBuffer().flip());
session.queue((ByteBuffer) buffer.flip());
}
}