2017-08-08 2 views
0

Ich möchte Welt alle 100 ms an alle Kanäle senden. Aber es ruft nur einmal an.Kernspiel Logikschleife, um Daten an Kanäle in Netty zu senden

Mein Code:

 public class IncomeMessageTcpHandler extends SimpleChannelInboundHandler<byte[]> { 

@Override 
    public void channelActive(ChannelHandlerContext ctx) throws Exception { 
     Channel channel = ctx.channel(); 

     channel.eventLoop().scheduleAtFixedRate(new Runnable() { 
      @Override 
      public void run() { 
       System.out.println("send"); 
       channel.writeAndFlush(GameLogic.Instance.flushMessageData()); 
      } 
     }, 100, 100, TimeUnit.MILLISECONDS); 
    } 
} 

jetzt erst einmal der Aufruf der Methode. Ich benutze 4.1.13.Final

public class UnityServerTcpChannelInitializer extends ChannelInitializer<SocketChannel> { 
    @Override 
    public void initChannel(SocketChannel ch) throws Exception { 
     ChannelPipeline p = ch.pipeline(); 

     p.addLast("frameDecoder", new FixedLengthFrameDecoder(6)); 
     p.addLast("bytesDecoder", new ByteArrayDecoder()); 

     p.addLast("bytesEncoder", new ByteArrayEncoder()); 

     p.addLast(new IncomeMessageTcpHandler()); 
    } 
} 

Wenn ich Kommentar channel.writeAndFlush (GameLogic.Instance.flushMessageData()); Aufgabenlauf alle 100 ms

Antwort

1

Omg ... meine Schuld. Meine Methode GameLogic.Instance.flushMessageData() generiert NullPointerException, aber ich wusste nicht, dass Runnable keine Ausnahme auslösen. Deshalb hört es auf, ohne Warnung zu laufen

Verwandte Themen