diff --git a/example/service/linux/flutter/generated_plugins.cmake b/example/service/linux/flutter/generated_plugins.cmake index 51436ae..2e1de87 100644 --- a/example/service/linux/flutter/generated_plugins.cmake +++ b/example/service/linux/flutter/generated_plugins.cmake @@ -5,6 +5,9 @@ list(APPEND FLUTTER_PLUGIN_LIST ) +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + set(PLUGIN_BUNDLED_LIBRARIES) foreach(plugin ${FLUTTER_PLUGIN_LIST}) @@ -13,3 +16,8 @@ foreach(plugin ${FLUTTER_PLUGIN_LIST}) list(APPEND PLUGIN_BUNDLED_LIBRARIES $) list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/lib/attach/topic2.dart b/lib/attach/topic2.dart new file mode 100644 index 0000000..ff67304 --- /dev/null +++ b/lib/attach/topic2.dart @@ -0,0 +1,19 @@ +// import 'package:roslibdart/core/request.dart'; + +// class Topic2 { +// String name; +// String type; + +// Topic2({required this.name, required this.type}); + +// String publish(dynamic message) { +// var req = Request( +// op: "publish", +// id: +// topic: name, +// msg: message, +// ); +// return req.toString(); +// } + +// } diff --git a/lib/core/topic.dart b/lib/core/topic.dart index 0af2b38..5791009 100644 --- a/lib/core/topic.dart +++ b/lib/core/topic.dart @@ -119,33 +119,43 @@ class Topic { } } + + /// Unsubscribe from the topic. Future unsubscribe() async { if (subscribeId != null) { // Send the request and reset the subscription variables. - await safeSend(Request( - op: 'unsubscribe', - id: subscribeId, - topic: name, - )); + await safeSend(unsubscribeReq()); // await ros.requestUnsubscribe(id); subscription = null; subscribeId = null; } } + Request unsubscribeReq() { + return Request( + op: 'unsubscribe', + id: subscribeId, + topic: name, + ); + } + /// Publish a [message] to the topic. Future publish(dynamic message) async { // Advertise the topic and then send the publish request. await advertise(); publishId = ros.requestPublisher(name); - await safeSend(Request( + await safeSend(publishReq(message)); + } + + Request publishReq(dynamic message) { + return Request( op: 'publish', topic: name, id: publishId, msg: message, latch: latch, - )); + ); } /// Advertise the topic. @@ -153,19 +163,23 @@ class Topic { if (!isAdvertised) { // Send the advertisement request. advertiseId = ros.requestAdvertiser(name); - await safeSend(Request( - op: 'advertise', - id: advertiseId, - type: type, - topic: name, - latch: latch, - queueSize: queueSize, - )); + await safeSend(advertiseReq()); // If the ROS connection closes show that we're not advertising anymore. watchForClose(); } } + Request advertiseReq() { + return Request( + op: 'advertise', + id: advertiseId, + type: type, + topic: name, + latch: latch, + queueSize: queueSize, + ); + } + /// Wait for the connection to close and then reset advertising variables. Future watchForClose() async { if (!reconnectOnClose) { @@ -187,6 +201,8 @@ class Topic { } } + + /// Safely send a [message] to ROS. Future safeSend(Request message) async { // Send the message but if we're not connected and the [reconnectOnClose] flag