serialize method
Serialize a given message, should return a String or a UInt8List. The return type is dynamic, because the socket class takes a dynamic type to send either a string or a binary message.
Implementation
@override
Uint8List serialize(AbstractMessage message) {
if (message is Hello) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeHello),
msgpack_dart.serialize(message.realm),
_serializeDetails(message.details)!,
]);
}
if (message is Challenge) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeChallenge),
msgpack_dart.serialize(message.authMethod),
msgpack_dart.serialize(_challengeExtraToMap(message.extra)),
]);
}
if (message is Authenticate) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeAuthenticate),
msgpack_dart.serialize(message.signature ?? ''),
msgpack_dart.serialize(message.extra ?? const <String, Object?>{}),
]);
}
if (message is Welcome) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeWelcome),
msgpack_dart.serialize(message.sessionId),
_serializeDetails(message.details)!,
]);
}
if (message is Register) {
return _buildMessage(4, [
msgpack_dart.serialize(MessageTypes.codeRegister),
msgpack_dart.serialize(message.requestId),
_serializeRegisterOptions(message.options),
msgpack_dart.serialize(message.procedure),
]);
}
if (message is Unregister) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeUnregister),
msgpack_dart.serialize(message.requestId),
msgpack_dart.serialize(message.registrationId),
]);
}
if (message is Call) {
return _buildPayloadMessage(4, [
msgpack_dart.serialize(MessageTypes.codeCall),
msgpack_dart.serialize(message.requestId),
_serializeCallOptions(message.options),
msgpack_dart.serialize(message.procedure),
], _serializePayload(message));
}
if (message is Yield) {
return _buildPayloadMessage(3, [
msgpack_dart.serialize(MessageTypes.codeYield),
msgpack_dart.serialize(message.invocationRequestId),
_serializeYieldOptions(message.options),
], _serializePayload(message));
}
if (message is cancel_msg.Cancel) {
final options = <String, Object?>{};
if (message.options?.mode != null) {
options['mode'] = message.options!.mode;
}
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeCancel),
msgpack_dart.serialize(message.requestId),
msgpack_dart.serialize(options),
]);
}
if (message is interrupt_msg.Interrupt) {
final options = <String, Object?>{};
if (message.options?.mode != null) {
options['mode'] = message.options!.mode;
}
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeInterrupt),
msgpack_dart.serialize(message.requestId),
msgpack_dart.serialize(options),
]);
}
if (message is Invocation) {
return _buildPayloadMessage(4, [
msgpack_dart.serialize(MessageTypes.codeInvocation),
msgpack_dart.serialize(message.requestId),
msgpack_dart.serialize(message.registrationId),
_serializeInvocationDetails(message.details),
], _serializePayload(message));
}
if (message is Publish) {
return _buildPayloadMessage(4, [
msgpack_dart.serialize(MessageTypes.codePublish),
msgpack_dart.serialize(message.requestId),
_serializePublish(message.options),
msgpack_dart.serialize(message.topic),
], _serializePayload(message));
}
if (message is Published) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codePublished),
msgpack_dart.serialize(message.publishRequestId),
msgpack_dart.serialize(message.publicationId),
]);
}
if (message is Event) {
final detailsBytes = _serializeEventDetails(message.details);
return _buildPayloadMessage(4, [
msgpack_dart.serialize(MessageTypes.codeEvent),
msgpack_dart.serialize(message.subscriptionId),
msgpack_dart.serialize(message.publicationId),
detailsBytes,
], _serializePayload(message));
}
if (message is Subscribe) {
return _buildMessage(4, [
msgpack_dart.serialize(MessageTypes.codeSubscribe),
msgpack_dart.serialize(message.requestId),
_serializeSubscribeOptions(message.options),
msgpack_dart.serialize(message.topic),
]);
}
if (message is Subscribed) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeSubscribed),
msgpack_dart.serialize(message.subscribeRequestId),
msgpack_dart.serialize(message.subscriptionId),
]);
}
if (message is Unsubscribe) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeUnsubscribe),
msgpack_dart.serialize(message.requestId),
msgpack_dart.serialize(message.subscriptionId),
]);
}
if (message is Unsubscribed) {
final details = message.details;
if (details != null) {
final map = <String, Object?>{};
if (details.subscription != null) {
map['subscription'] = details.subscription;
}
if (details.reason != null) {
map['reason'] = details.reason;
}
if (map.isNotEmpty) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeUnsubscribed),
msgpack_dart.serialize(message.unsubscribeRequestId),
msgpack_dart.serialize(map),
]);
}
}
return _buildMessage(2, [
msgpack_dart.serialize(MessageTypes.codeUnsubscribed),
msgpack_dart.serialize(message.unsubscribeRequestId),
]);
}
if (message is Result) {
final details = <String, Object?>{};
final resultDetails = message.details;
if (resultDetails.progress != null) {
details['progress'] = resultDetails.progress;
}
if (resultDetails.pptScheme != null) {
details['ppt_scheme'] = resultDetails.pptScheme;
}
if (resultDetails.pptSerializer != null) {
details['ppt_serializer'] = resultDetails.pptSerializer;
}
if (resultDetails.pptCipher != null) {
details['ppt_cipher'] = resultDetails.pptCipher;
}
if (resultDetails.pptKeyId != null) {
details['ppt_keyid'] = resultDetails.pptKeyId;
}
if (resultDetails.custom.isNotEmpty) {
details.addAll(resultDetails.custom);
}
return _buildPayloadMessage(3, [
msgpack_dart.serialize(MessageTypes.codeResult),
msgpack_dart.serialize(message.callRequestId),
msgpack_dart.serialize(details),
], _serializePayload(message));
}
if (message is Error) {
return _buildPayloadMessage(5, [
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),
], _serializePayload(message));
}
if (message is Abort) {
return _buildMessage(3, [
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 _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeGoodbye),
msgpack_dart.serialize(
message.message?.message != null
? {'message': message.message!.message}
: {},
),
msgpack_dart.serialize(message.reason),
]);
}
if (message is Registered) {
return _buildMessage(3, [
msgpack_dart.serialize(MessageTypes.codeRegistered),
msgpack_dart.serialize(message.registerRequestId),
msgpack_dart.serialize(message.registrationId),
]);
}
if (message is Unregistered) {
return _buildMessage(2, [
msgpack_dart.serialize(MessageTypes.codeUnregistered),
msgpack_dart.serialize(message.unregisterRequestId),
]);
}
_logger.shout('Could not serialize the message of type: $message');
throw UnsupportedError(
'MsgPack serializer does not support ${message.runtimeType}',
);
}