start method

  1. @override
void start()
override

Start listening for incoming clients.

Implementation

@override
void start() {
  receivePort.listen((data) {
    if (data is SendPort) {
      var id = _uuid.v4();
      _clients[id] = data;
      data.send({'status': true, 'id': id});
    } else if (data is Map &&
        data['id'] is String &&
        data['request_id'] is String &&
        data['method'] is String &&
        data['params'] is Map) {
      var id = data['id'] as String?,
          requestId = data['request_id'] as String?,
          method = data['method'] as String?;
      var params = data['params'] as Map?;
      var sp = _clients[id!];

      if (sp == null) {
        // There's nobody to respond to, so don't send anything to anyone. Oops.
      } else if (method == 'publish') {
        if (_isValidClientId(params!['client_id']) &&
            params['event_name'] is String &&
            params.containsKey('value')) {
          var clientId = params['client_id'] as String?,
              eventName = params['event_name'] as String?;
          var value = params['value'];
          var rq = _IsolatePublishRequestImpl(
              requestId, clientId, eventName, value, sp);
          _onPublish.add(rq);
        } else {
          sp.send({
            'status': false,
            'request_id': requestId,
            'error_message': 'Expected client_id, event_name, and value.'
          });
        }
      } else if (method == 'subscribe') {
        if (_isValidClientId(params!['client_id']) &&
            params['event_name'] is String) {
          var clientId = params['client_id'] as String?,
              eventName = params['event_name'] as String?;
          var rq = _IsolateSubscriptionRequestImpl(
              clientId, eventName, sp, requestId, _uuid);
          _onSubscribe.add(rq);
        } else {
          sp.send({
            'status': false,
            'request_id': requestId,
            'error_message': 'Expected client_id, and event_name.'
          });
        }
      } else if (method == 'unsubscribe') {
        if (_isValidClientId(params!['client_id']) &&
            params['subscription_id'] is String) {
          var clientId = params['client_id'] as String?,
              subscriptionId = params['subscription_id'] as String?;
          var rq = _IsolateUnsubscriptionRequestImpl(
              clientId, subscriptionId, sp, requestId);
          _onUnsubscribe.add(rq);
        } else {
          sp.send({
            'status': false,
            'request_id': requestId,
            'error_message': 'Expected client_id, and subscription_id.'
          });
        }
      } else {
        sp.send({
          'status': false,
          'request_id': requestId,
          'error_message':
              'Unrecognized method "$method". Or, you omitted id, request_id, method, or params.'
        });
      }
    }
  });
}