serialize method

  1. @override
Uint8List serialize(
  1. AbstractMessage message
)
override

Converts a WAMP message object into a uint8 msgpack message

Implementation

@override
Uint8List serialize(AbstractMessage message) {
  if (message is Hello) {
    return Uint8List.fromList([147] +
        msgpack_dart.serialize(MessageTypes.codeHello) +
        msgpack_dart.serialize(message.realm) +
        _serializeDetails(message.details)!);
  }
  if (message is Authenticate) {
    return Uint8List.fromList([147] +
        msgpack_dart.serialize(MessageTypes.codeAuthenticate) +
        msgpack_dart.serialize(message.signature ?? '') +
        msgpack_dart.serialize(message.extra ?? '{}'));
  }
  if (message is Register) {
    return Uint8List.fromList([148] +
        msgpack_dart.serialize(MessageTypes.codeRegister) +
        msgpack_dart.serialize(message.requestId) +
        _serializeRegisterOptions(message.options) +
        msgpack_dart.serialize(message.procedure));
  }
  if (message is Unregister) {
    return Uint8List.fromList([147] +
        msgpack_dart.serialize(MessageTypes.codeUnregister) +
        msgpack_dart.serialize(message.requestId) +
        msgpack_dart.serialize(message.registrationId));
  }
  if (message is Call) {
    var res = [148] +
        msgpack_dart.serialize(MessageTypes.codeCall) +
        msgpack_dart.serialize(message.requestId) +
        _serializeCallOptions(message.options) +
        msgpack_dart.serialize(message.procedure);
    var payload = _serializePayload(message);
    res[0] += payload.payloadType;
    res += payload.payload;
    return Uint8List.fromList(res);
  }
  if (message is Yield) {
    var res = [147] +
        msgpack_dart.serialize(MessageTypes.codeYield) +
        msgpack_dart.serialize(message.invocationRequestId) +
        _serializeYieldOptions(message.options);
    var payload = _serializePayload(message);
    res[0] += payload.payloadType;
    res += payload.payload;
    return Uint8List.fromList(res);
  }
  if (message is Invocation) {
    // for serializer unit test only
    var res = [148] +
        msgpack_dart.serialize(MessageTypes.codeInvocation) +
        msgpack_dart.serialize(message.requestId) +
        msgpack_dart.serialize(message.registrationId) +
        msgpack_dart.serialize({});
    var payload = _serializePayload(message);
    res[0] += payload.payloadType;
    res += payload.payload;
    return Uint8List.fromList(res);
  }
  if (message is Publish) {
    var res = [148] +
        msgpack_dart.serialize(MessageTypes.codePublish) +
        msgpack_dart.serialize(message.requestId) +
        _serializePublish(message.options) +
        msgpack_dart.serialize(message.topic);
    var payload = _serializePayload(message);
    res[0] += payload.payloadType;
    res += payload.payload;
    return Uint8List.fromList(res);
  }
  if (message is Event) {
    var res = [147] +
        msgpack_dart.serialize(MessageTypes.codeEvent) +
        msgpack_dart.serialize(message.subscriptionId) +
        msgpack_dart.serialize(message.publicationId);
    var payload = _serializePayload(message);
    res[0] += payload.payloadType;
    res += payload.payload;
    return Uint8List.fromList(res);
  }
  if (message is Subscribe) {
    return Uint8List.fromList([148] +
        msgpack_dart.serialize(MessageTypes.codeSubscribe) +
        msgpack_dart.serialize(message.requestId) +
        _serializeSubscribeOptions(message.options) +
        msgpack_dart.serialize(message.topic));
  }
  if (message is Unsubscribe) {
    return Uint8List.fromList([147] +
        msgpack_dart.serialize(MessageTypes.codeUnsubscribe) +
        msgpack_dart.serialize(message.requestId) +
        msgpack_dart.serialize(message.subscriptionId));
  }
  if (message is Error) {
    var res = [149] +
        msgpack_dart.serialize(MessageTypes.codeError) +
        msgpack_dart.serialize(message.requestTypeId) +
        msgpack_dart.serialize(message.requestId) +
        msgpack_dart.serialize(message.details) +
        msgpack_dart.serialize(message.error);
    var payload = _serializePayload(message);
    res[0] += payload.payloadType;
    res += payload.payload;
    return Uint8List.fromList(res);
  }
  if (message is Abort) {
    return Uint8List.fromList([147] +
        msgpack_dart.serialize(MessageTypes.codeAbort) +
        msgpack_dart.serialize(message.message != null
            ? {'message': message.message!.message}
            : {}) +
        msgpack_dart.serialize(message.reason));
  }
  if (message is Goodbye) {
    return Uint8List.fromList([147] +
        msgpack_dart.serialize(MessageTypes.codeGoodbye) +
        msgpack_dart.serialize(message.message != null
            ? {'message': message.message!.message ?? ""}
            : {}) +
        msgpack_dart.serialize(message.reason));
  }

  _logger.shout('Could not serialize the message of type: $message');
  throw Exception('Message type not known!');
}