publish method

void publish(
  1. String subject,
  2. List<int> data,
  3. Map<String, dynamic> options
)

Implementation

void publish(String subject, List<int> data, Map<String, dynamic> options) {
  bool delay = options['delay'] ?? true;
  List<int> proto = [];
  List<int>? headers;
  if (options['headers'] is Map) {
    List<String> build = ['NATS/1.0'];
    options['headers'].forEach((key, value) {
      build.add('$key: $value');
    });
    build.add('\r\n');
    headers = utf8.encode(build.join('\r\n'));
    final hlen = headers.length;
    final len = data.length + hlen;
    if (options['reply'] is String) {
      proto.addAll(utf8.encode('HPUB $subject ${options['reply']} $hlen $len\r\n'));
    } else {
      proto.addAll(utf8.encode('HPUB $subject $hlen $len\r\n'));
    }
  } else {
    if (options['reply'] is String) {
      proto.addAll(utf8.encode('PUB $subject ${options['reply']} ${data.length}\r\n'));
    } else {
      proto.addAll(utf8.encode('PUB $subject ${data.length}\r\n'));
    }
  }
  if (headers != null) {
    proto.addAll(headers);
  }
  proto.addAll(data);
  proto.addAll(_CRLF);
  _delayCommand(proto, delay, headers);
  debug('Nats::publish($delay) - $subject');
}