Использование ScheduledExecutorService с пакетом задержек netty - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь задержать пакет на 5 секунд, но netty отправляет пакет через несколько секунд после вызова channel.write.

Runnable

public class SendInvalidPassword implements Runnable {
    private Player player;
    public SendInvalidPassword(Player player){
        this.player = player;
    }

    @Override
    public void run() {
        System.out.println("Sending invalid login");
        this.player.sendPacket(Identifiers.Outbound.Login_Result, Unpooled.buffer(3).writeByte(2).writeByte(0).writeByte(0));
    }
}

player.sendPacket

public void sendPacket(int[] identifiers, ByteBuf data) {
    if (this.channel.isWritable()) {
        System.out.println("Send: "+identifiers[0]+", "+identifiers[1]);
        ByteBuf d = Unpooled.buffer();
        d.writeByte(identifiers[0]).writeByte(identifiers[1]).writeBytes(data.array());
        this.channel.write(d);
    }
}

Как я планирую задачу

service.schedule(new SendInvalidPassword(player), 5, TimeUnit.SECONDS);

Как я могу запланировать задачу, не вызывая задержку пакетов?

1 Ответ

0 голосов
/ 01 сентября 2018

Я понял это, context.flush уже вызывали, прежде чем я написал этот пакет. Я просто добавил новый метод с именем sendPacketFlush и заменил channel.write на channel.writeAndFlush, теперь он работает.

...