Как кодировать и декодировать сообщения protobuf с сервера netty (dart / flutter) - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь декодировать сообщения с сервера netty, и я не совсем уверен, правильно ли декодированы декодированные данные.Нужно ли что-то делать с сокетом dart, чтобы он работал с сообщением protobuf, отправляемым из netty?Нужно ли что-то делать, прежде чем писать какое-либо сообщение?Также я продолжаю анализировать каждый раз, когда он получает данные или когда он вызывает onDone?

    Socket.connect(ip, port).then((Socket sock) {
      print("Connected");
      socket = sock;


      socket.setOption(SocketOption.tcpNoDelay, true);

      socket.listen(onReceive,
          onError: (e) {
            print('Server error: $e');
          },
          onDone: onDoneEvent,
          cancelOnError: false);

    });

Сервер Обработчики каналов :

p.addLast(new ProtobufVarint32FrameDecoder());
p.addLast(new MultiplePacketDecoder(decoders));

p.addLast(new ProtobufVarint32LengthFieldPrepender());
p.addLast(new ProtobufEncoder());
p.addLast(processingHandler);

Редактировать

Да, и, кстати, всякий раз, когда я пытаюсь разобрать сообщение, я получаю эту ошибку

E/flutter (25389): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).
E/flutter (25389): #0      CodedBufferReader.readTag (package:protobuf/src/protobuf/coded_buffer_reader.dart:144:7)
E/flutter (25389): #1      _mergeFromCodedBufferReader (package:protobuf/src/protobuf/coded_buffer.dart:34:21)
E/flutter (25389): #2      GeneratedMessage.mergeFromBuffer (package:protobuf/src/protobuf/generated_message.dart:173:5)
E/flutter (25389 My class): #3      PacketHandler.parseFromBytes (package:chatclientflutter/backend/packethandler.dart:32:26)
E/flutter (25389 My class): #4      Client.onDoneEvent (package:chatclientflutter/backend/client.dart:77:46)
E/flutter (25389): #5      _rootRun (dart:async/zone.dart:1120:38)
E/flutter (25389): #6      _CustomZone.run (dart:async/zone.dart:1021:19)
E/flutter (25389): #7      _CustomZone.runGuarded (dart:async/zone.dart:923:7)
E/flutter (25389): #8      _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:389:13)
E/flutter (25389): #9      _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:399:15)
E/flutter (25389): #10     _BufferingStreamSubscription._close (dart:async/stream_impl.dart:283:7)
E/flutter (25389): #11     _SyncStreamController._sendDone (dart:async/stream_controller.dart:772:19)
E/flutter (25389): #12     _StreamController._closeUnchecked (dart:async/stream_controller.dart:629:7)
E/flutter (25389): #13     _StreamController.close (dart:async/stream_controller.dart:622:5)
E/flutter (25389): #14     _Socket._onData (dart:io-patch/socket_patch.dart:1781:21)
E/flutter (25389): #15     _rootRunUnary (dart:async/zone.dart:1136:13)
E/flutter (25389): #16     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
E/flutter (25389): #17     _CustomZone.runUnaryGuarded (dart:async/zone.dart:931:7)
E/flutter (25389): #18     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:336:11)
E/flutter (25389): #19     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:263:7)
E/flutter (25389): #20     _SyncStreamController._sendData (dart:async/stream_controller.dart:764:19)
E/flutter (25389): #21     _StreamController._add (dart:async/stream_controller.dart:640:7)
E/flutter (25389): #22     _StreamController.add (dart:async/stream_controller.dart:586:5)
E/flutter (25389): #23     new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:1330:35)
E/flutter (25389): #24     _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:837:18)
E/flutter (25389): #25     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter (25389): #26     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
...