serializeToString method

String serializeToString(
  1. AbstractMessage message
)

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}',
  );
}