Цитата:
Сообщение от PROGRAMMATOR
Give me an example of channelRead method.
|
import io.netty.channel.socket.DatagramPacket;
import java.net.InetSocketAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.pb.battle.controllers.RoomController;
import ru.pb.battle.models.Player;
import ru.pb.battle.models.Room;
import ru.pb.battle.utils.ByteBuffer;
/**
* @author DarkSkeleton
*/
public class BattleClientConnection extends SimpleChannelInboundHandler<DatagramPacket> {
private static final Logger log = LoggerFactory.getLogger(BattleClientConnection.class);
@Override
protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg) throws Exception {
ByteBuf bb = msg.content();
byte opcode = bb.readByte();
switch(opcode)
{
case 65: {
// ByteBuffer _buffer2 = new ByteBuffer();
// _buffer2.writeC((byte)66);
// _buffer2.writeC((byte) 0);
// _buffer2.writeB(new byte[5]);
// _buffer2.writeC((byte) 0x0b);
// _buffer2.writeB(new byte[3]);
// ctx.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer(_buffer2.getData(), 0, _buffer2.getData().length), msg.sender()));
Room room = RoomController.getInstance().getRoom(msg.sender().getAddress());
if(room != null) {
if(room.inetAddress.equals(msg.sender().getAddress())) {
ByteBuffer _buffer = new ByteBuffer();
_buffer.writeC((byte) 66);
_buffer.writeC((byte) 0);
_buffer.writeB(new byte[5]);
_buffer.writeC((byte) 0x0b);
_buffer.writeB(new byte[3]);
room.isConnected = true;
room.port = msg.sender().getPort();
ctx.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer(_buffer.getData(), 0, _buffer.getData().length), msg.sender()));
} else {
Player player = RoomController.getInstance().getPlayer(msg.sender().getAddress());
if(player != null) {
ByteBuffer _buffer = new ByteBuffer();
_buffer.writeC((byte) 66);
_buffer.writeC((byte) 0);
_buffer.writeB(new byte[5]);
_buffer.writeC((byte) 0x0b);
_buffer.writeB(new byte[3]);
player.isConnected = true;
player.playerPort = msg.sender().getPort();
ctx.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer(_buffer.getData(), 0, _buffer.getData().length), msg.sender()));
}
}
}
break;
}
case (byte) 131:
case (byte) 132:
case 84:
case 97:
case 4:
case 3: {
Room room = RoomController.getInstance().getRoom(msg.sender().getAddress());
if(room != null) {
if(room.inetAddress.equals(msg.sender().getAddress())) {
for(Player player : room.getPlayers().values()) {
if(player.isActive) {
if(player.playerPort > 0) {
ctx.writeAndFlush(new PBUDPServerPacket(opcode, Unpooled.copiedBuffer(msg.content()), new InetSocketAddress(player.playerIP, player.playerPort)).getPacket());
}
}
}
} else {
if(room.isActive) {
if(room.port > 0) {
ctx.writeAndFlush(new PBUDPServerPacket(opcode, Unpooled.copiedBuffer(msg.content()), new InetSocketAddress(room.inetAddress, room.port)).getPacket());
}
}
}
}
break;
}
case 67: {
Player player = RoomController.getInstance().getPlayer(msg.sender().getAddress());
if(player != null) {
player.isActive = false;
player.isConnected = false;
}
break;
}
}
bb.release();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
cause.printStackTrace();
// We don't close the channel because we can keep serving requests.
}
}
Code: Java
so what the fix of this error what called JavaLeak ?
@PROGRAMMATOR