put method
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);
}