parseReference function

RoutableReference parseReference(
  1. Instance instance,
  2. String s
)

RoutableReference: identity -f facet -{t|o|O|d|D} -s -p {protocolVersion} -e {EncodingVersion}:tcp -h:udp: -ttl 33 identity -f facet -{t|o|O|d|D} -s -p {protocolVersion} -e {EncodingVersion} @adapterId

Implementation

RoutableReference parseReference(Instance instance, String s) {
  Mode Function(ArgResults) flagsToMode = (results) => results['oneway']
      ? Mode.modeOneway
      : results['batchOneway']
          ? Mode.modeBatchOneway
          : results['datagram']
              ? Mode.modeDatagram
              : Mode.modeTwoway;

  final arr = s.split(':');
  if (arr.isNotEmpty) {
    final results = preferenceParser().parse(arr[0].split(' '));

    final eps = <IPEndpoint>[];

    arr.skip(1).forEach((s) {
      final ep = parseEndpoint(instance, s);
      if (ep != null) {
        eps.add(ep);
      }
    });

    final identity = stringToIdentity(results.arguments.first);

    final mode = flagsToMode(results);

    return RoutableReference(
        instance: instance,
        mode: mode,
        secure: false,
        identity: identity,
        context: {},
        facet: results['facet'] ?? '',
        protocol: currentProtocol, // TODO:
        encoding: currentProtocolEncoding,
        endpointList: eps,
        adapterId: '');
  } else {
    final results = preferenceParser().parse(arr);

    final identity = stringToIdentity(results.arguments.first);
    final mode = flagsToMode(results);
    // TODO: check
    final adapterId = results.arguments.last;

    return RoutableReference(
      instance: instance,
      mode: mode,
      secure: false,
      identity: identity,
      context: {},
      facet: results['facet'],
      protocol: currentProtocol, // TODO:
      encoding: currentProtocolEncoding,
      adapterId: adapterId,
    );
  }
}