flutter_cpp_bridge 1.0.4
flutter_cpp_bridge: ^1.0.4 copied to clipboard
Bridge Flutter to C++ shared libraries via FFI. C++ owns all memory; Dart receives opaque message pointers with zero-copy, event-driven delivery.
1.0.4 #
- Guard against double-free:
assignJobnow asserts that no subscription is already registered on the sameService(a broadcast stream would deliver each pointer to every listener, causing each to callfreeMessage— UB). - Fix callback race on dispose:
_setMessageCallback(nullptr)is called before_callable.close()so the C++ worker sees a null pointer before theNativeCallableis torn down. - Fix
notify_cbdata race inServiceBase: changed from a raw function pointer tostd::atomic<void(*)()>with acquire/release ordering. - Guard against
NativeCallableleak when a subclass constructor throws aftersuper(): aFinalizeris attached immediately after_callableis created and detached in bothdispose()and the constructor catch block. - Guard against partial construction: constructor wraps all FFI setup in
try/catch; on failure sets
_disposed = true, closes the stream controller, and rethrows so callers see the original error. - Guard against double worker thread in
ServicePool:addServicenow asserts that the service is not already in the pool. _setMessageCallbackand_callableare now private toService.service_helpers.h:Queue::releaseandCurrentValue::releaseguard against null pointer before dereferencing.
1.0.3 #
- Fix README image URLs to use absolute
raw.githubusercontent.compaths so diagrams render correctly on pub.dev.
1.0.2 #
- Add byte-buffer service support via
FCB_EXPORT_BYTES_SYMBOLSandfcb::BytesQueue, enabling zero-copy FlatBuffers / protobuf message delivery to Dart. - Add ZMQ transport variant: C++ worker subscribes to a ZMQ PUB socket, dispatches messages with a switch-case, and forwards only the relevant payloads to the Dart queue.
- Add architecture and API diagrams to the documentation.
- Fix stale description in
pubspec.yaml(removed reference to polling).
1.0.1 #
- Update README installation instructions now that the package is on pub.dev.
- Remove unused
ffigendev dependency.
1.0.0 #
- First stable release — event-driven delivery is now the default and only delivery mechanism. No breaking changes relative to 0.1.0.
- Published on pub.dev.
0.1.0 #
- Replace the
Timer.periodicpolling loop with an event-driven delivery mechanism usingdart:ffiNativeCallable.listener. Zero CPU consumption at idle. - Each service now requires a fifth mandatory C symbol,
set_message_callback(void (*cb)()). The C++ worker callscbimmediately after pushing a message; Dart processes it on the event loop. ServicePoolno longer owns a periodic timer. The poll interval parameter has been removed.Service.dispose()closes theNativeCallableand stops the service.
0.0.0 #
- Initial release.
Service: base class to wrap a C++ shared library viadart:ffi. Binds four mandatory C functions (start_service,stop_service,get_next_message,free_message) and exposes a broadcast message stream.ServicePool: manages multiple services and polls them at a configurable interval (default 100 ms).StandaloneService: aServicesubclass that starts immediately on construction and exposes adispose()method.