From abc76c6bab755d51da01c34016feb776680f7225 Mon Sep 17 00:00:00 2001 From: LaurieCheers <73140792+LaurieCheers-unity@users.noreply.github.com> Date: Wed, 17 Feb 2021 14:13:11 -0800 Subject: [PATCH] Topic list service --- .../srv/RosUnityTopicListRequest.cs | 36 +++++++++++ .../srv/RosUnityTopicListRequest.cs.meta | 11 ++++ .../srv/RosUnityTopicListResponse.cs | 59 +++++++++++++++++++ .../srv/RosUnityTopicListResponse.cs.meta | 11 ++++ .../Runtime/TcpConnector/ROSConnection.cs | 14 +++++ 5 files changed, 131 insertions(+) create mode 100644 com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListRequest.cs create mode 100644 com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListRequest.cs.meta create mode 100644 com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListResponse.cs create mode 100644 com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListResponse.cs.meta diff --git a/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListRequest.cs b/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListRequest.cs new file mode 100644 index 00000000..d7de2a5a --- /dev/null +++ b/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListRequest.cs @@ -0,0 +1,36 @@ +//Do not edit! This file was generated by Unity-ROS MessageGeneration. +using System; +using System.Linq; +using System.Collections.Generic; +using System.Text; +using Unity.Robotics.ROSTCPConnector.MessageGeneration; + +namespace RosMessageTypes.RosTcpEndpoint +{ + public class RosUnityTopicListRequest : Message + { + public const string RosMessageName = "ros_tcp_endpoint/RosUnityTopicList"; + + + public RosUnityTopicListRequest() + { + } + public override List SerializationStatements() + { + var listOfSerializations = new List(); + + return listOfSerializations; + } + + public override int Deserialize(byte[] data, int offset) + { + + return offset; + } + + public override string ToString() + { + return "RosUnityTopicListRequest: "; + } + } +} diff --git a/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListRequest.cs.meta b/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListRequest.cs.meta new file mode 100644 index 00000000..f10d9401 --- /dev/null +++ b/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e86ae5724304b047977b3ff98008395 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListResponse.cs b/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListResponse.cs new file mode 100644 index 00000000..573f4110 --- /dev/null +++ b/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListResponse.cs @@ -0,0 +1,59 @@ +//Do not edit! This file was generated by Unity-ROS MessageGeneration. +using System; +using System.Linq; +using System.Collections.Generic; +using System.Text; +using Unity.Robotics.ROSTCPConnector.MessageGeneration; + +namespace RosMessageTypes.RosTcpEndpoint +{ + public class RosUnityTopicListResponse : Message + { + public const string RosMessageName = "ros_tcp_endpoint/RosUnityTopicList"; + + public string[] topics; + + public RosUnityTopicListResponse() + { + this.topics = new string[0]; + } + + public RosUnityTopicListResponse(string[] topics) + { + this.topics = topics; + } + public override List SerializationStatements() + { + var listOfSerializations = new List(); + + listOfSerializations.Add(BitConverter.GetBytes(topics.Length)); + foreach(var entry in topics) + listOfSerializations.Add(SerializeString(entry)); + + return listOfSerializations; + } + + public override int Deserialize(byte[] data, int offset) + { + + var topicsArrayLength = DeserializeLength(data, offset); + offset += 4; + this.topics= new string[topicsArrayLength]; + for(var i = 0; i < topicsArrayLength; i++) + { + var topicsStringBytesLength = DeserializeLength(data, offset); + offset += 4; + this.topics[i] = DeserializeString(data, offset, topicsStringBytesLength); + offset += topicsStringBytesLength; + } + + return offset; + } + + public override string ToString() + { + return "RosUnityTopicListResponse: " + + "\ntopics: " + System.String.Join(", ", topics.ToList()); + } + } +} diff --git a/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListResponse.cs.meta b/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListResponse.cs.meta new file mode 100644 index 00000000..c47478ee --- /dev/null +++ b/com.unity.robotics.ros-tcp-connector/Runtime/MessageGeneration/ROSConnection_msgs/srv/RosUnityTopicListResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b6691ee29af3b94cb47d7b09e5390df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.robotics.ros-tcp-connector/Runtime/TcpConnector/ROSConnection.cs b/com.unity.robotics.ros-tcp-connector/Runtime/TcpConnector/ROSConnection.cs index e1d08144..ad505e4c 100644 --- a/com.unity.robotics.ros-tcp-connector/Runtime/TcpConnector/ROSConnection.cs +++ b/com.unity.robotics.ros-tcp-connector/Runtime/TcpConnector/ROSConnection.cs @@ -165,6 +165,20 @@ public async void SendServiceMessage(string rosServiceName, Message se client.Close(); } + public async Task SendServiceMessage(string rosServiceName, Message serviceRequest) where RESPONSE : Message, new() + { + var t = new TaskCompletionSource(); + + SendServiceMessage(rosServiceName, serviceRequest, s => t.TrySetResult(s)); + + return await t.Task; + } + + public void GetTopicList(Action callback) + { + SendServiceMessage("__topic_list", new RosUnityTopicListRequest(), response => callback(response.topics)); + } + public void RegisterSubscriber(string topic, string rosMessageName) { SendSysCommand(SYSCOMMAND_SUBSCRIBE,