serialize method
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!');
}