put method

VoidCallback put(
  1. TTGraphData data, [
  2. TTMsgCb? cb,
  3. String? msgId
])

Write node data

@param data one or more TT nodes keyed by soul @param cb optional callback for response messages @param msgId optional unique message identifier @returns a function to clean up listeners when done

Implementation

VoidCallback put(TTGraphData data, [TTMsgCb? cb, String? msgId]) {
  final TTGraphData normalized = _mergePort.addMissingState(data);
  TTGraphData? diff = flattenGraphData(_mergePort, normalized);

  final String id = msgId ?? generateMessageId();
  (() async {
    for (final fn in _writeMiddleware) {
      if (diff == null) {
        return;
      }
      diff = await fn(diff!, _graph);
    }
    if (diff == null) {
      return;
    }

    // print('Data-->Encoded::Sent:: ${jsonEncode(diff)}');

    events.put.trigger(TTPut(graph: diff!, cb: cb, msgId: id));

    _receiveGraphData(diff!);
  })();

  return () => events.off.trigger(id);
}