1

I used client in dart and server in java netty to send an object with flatbuffer protocol , the problem is server can get data but when server send data to client dart then nothing happen in socket listen dart code :

Future<void> main() async {
  await Socket.connect("192.168.1.187", 8080).then((Socket sock) {
    socket = sock;
    print("connect to host ");
    socket.listen(dataHandler,onError: errorHandler, onDone: doneHandler, cancelOnError: false);
  }).catchError((Object e) {
    print("Unable to connect: $e");
  });
var data = PlayerPositionObjectBuilder(playerId: 1, y: 1, x: 1, direction: 'right', time: '111').toBytes();
      sendData(data);
  
      stdin.listen((data) => (data) {
            print("get data");
          });
    }

void dataHandler(data) {
  print('get data from server !!');
  //print(new String.fromCharCodes(data).trim());
}

void sendData(Uint8List data) {
  socket.write(data);
}

void errorHandler(error, StackTrace trace) {
  print(error);
}

void doneHandler() {
  socket.destroy();
}

java server i'm using netty java with handler :

public class MapHandler extends ChannelInboundHandlerAdapter {

 @Override
  public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    cause.printStackTrace();
    ctx.close();
  }

  @Override
  public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    ByteBuf byteBuf = (ByteBuf) msg;
    int length = byteBuf.readableBytes();
    byte[] bytes = new byte[ length ];

    byteBuf.readBytes(bytes);

    ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
   // PlayerPosition playerPosition = PlayerPosition.getRootAsPlayerPosition(byteBuffer);
    System.out.println("tọa độ người chơi :");
    sendPlayerPosition(ctx,1,1,2,"right","11111");
    //super.channelRead(ctx, msg);
  }

  void sendPlayerPosition(ChannelHandlerContext channelHandlerContext, int playerId, double positionX, double positionY, String direction, String time) {
    FlatBufferBuilder builder = new FlatBufferBuilder();
    int directionOffset = builder.createString(direction);
    int timeOffset = builder.createString(time);
    int playerPositionOffset = PlayerPosition.createPlayerPosition(builder, playerId, positionX, positionY, directionOffset, timeOffset);
    builder.finish(playerPositionOffset);
    byte[] data = builder.sizedByteArray();
    channelHandlerContext.writeAndFlush(data);
  }

}

Longbee
  • 11
  • 1

0 Answers0