serializeToString method
Converts a WAMP message object into a string json message
Implementation
String serializeToString(AbstractMessage message) {
if (message is Hello) {
return '[${MessageTypes.codeHello},${message.realm == null ? 'null' : '"${message.realm!}"'},${_serializeDetails(message.details)}]';
}
if (message is Challenge) {
return '[${MessageTypes.codeChallenge},"${message.authMethod}",${_encodeJsonObject(_challengeExtraToMap(message.extra))}]';
}
if (message is Authenticate) {
return '[${MessageTypes.codeAuthenticate},"${message.signature ?? ""}",${message.extra == null ? '{}' : _encodeJsonObject(message.extra)}]';
}
if (message is Welcome) {
return '[${MessageTypes.codeWelcome},${message.sessionId},${_serializeDetails(message.details)}]';
}
if (message is Register) {
return '[${MessageTypes.codeRegister},${message.requestId},${_serializeRegisterOptions(message.options)},"${message.procedure}"]';
}
if (message is Unregister) {
return '[${MessageTypes.codeUnregister},${message.requestId},${message.registrationId}]';
}
if (message is Call) {
return '[${MessageTypes.codeCall},${message.requestId},${_serializeCallOptions(message.options)},"${message.procedure}"${_serializePayload(message)}]';
}
if (message is Yield) {
return '[${MessageTypes.codeYield},${message.invocationRequestId},${_serializeYieldOptions(message.options)}${_serializePayload(message)}]';
}
if (message is cancel_msg.Cancel) {
final options = message.options;
final details = <String, Object?>{};
if (options?.mode != null) {
details['mode'] = options!.mode;
}
final detailsJson = details.isEmpty ? '{}' : json.encode(details);
return '[${MessageTypes.codeCancel},${message.requestId},$detailsJson]';
}
if (message is interrupt_msg.Interrupt) {
final options = message.options;
final details = <String, Object?>{};
if (options?.mode != null) {
details['mode'] = options!.mode;
}
final detailsJson = details.isEmpty ? '{}' : json.encode(details);
return '[${MessageTypes.codeInterrupt},${message.requestId},$detailsJson]';
}
if (message is Invocation) {
return '[${MessageTypes.codeInvocation},${message.requestId},${message.registrationId},${_serializeInvocationDetails(message.details)}${_serializePayload(message)}]';
}
if (message is Publish) {
return '[${MessageTypes.codePublish},${message.requestId},${_serializePublish(message.options)},"${message.topic}"${_serializePayload(message)}]';
}
if (message is Published) {
return '[${MessageTypes.codePublished},${message.publishRequestId},${message.publicationId}]';
}
if (message is Event) {
final payload = _serializePayload(message);
final detailsJson = _serializeEventDetails(
message.details,
allowOmit: false,
);
return '[${MessageTypes.codeEvent},${message.subscriptionId},${message.publicationId},$detailsJson$payload]';
}
if (message is Subscribe) {
return '[${MessageTypes.codeSubscribe},${message.requestId},${_serializeSubscribeOptions(message.options)},"${message.topic}"]';
}
if (message is Subscribed) {
return '[${MessageTypes.codeSubscribed},${message.subscribeRequestId},${message.subscriptionId}]';
}
if (message is Unsubscribe) {
return '[${MessageTypes.codeUnsubscribe},${message.requestId},${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 '[${MessageTypes.codeUnsubscribed},${message.unsubscribeRequestId},${_encodeJsonObject(map)}]';
}
}
return '[${MessageTypes.codeUnsubscribed},${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);
}
final encodedDetails = _encodeJsonObject(details);
return '[${MessageTypes.codeResult},${message.callRequestId},$encodedDetails${_serializePayload(message)}]';
}
if (message is Error) {
return '[${MessageTypes.codeError},${message.requestTypeId},${message.requestId},${_encodeJsonObject(message.details)},"${message.error}"${_serializePayload(message)}]';
}
if (message is Abort) {
final data = <dynamic>[
MessageTypes.codeAbort,
message.details,
message.reason,
];
if (message.arguments != null) {
data.add(message.arguments);
if (message.argumentsKeywords != null) {
data.add(message.argumentsKeywords);
}
} else if (message.argumentsKeywords != null) {
data.add(const []);
data.add(message.argumentsKeywords);
}
return _encodeJsonObject(data);
}
if (message is Goodbye) {
return '[${MessageTypes.codeGoodbye},${message.message?.message != null ? '{"message":"${message.message!.message}"}' : "{}"},"${message.reason}"]';
}
if (message is registered_msg.Registered) {
return '[${MessageTypes.codeRegistered},${message.registerRequestId},${message.registrationId}]';
}
if (message is unregistered_msg.Unregistered) {
return '[${MessageTypes.codeUnregistered},${message.unregisterRequestId}]';
}
_logger.shout('Could not serialize the message of type: $message');
throw UnsupportedError(
'JSON serializer does not support ${message.runtimeType}',
);
}