private void Run() { _ws = new WebSocket(_host + ":" + _port); _ws.OnMessage += (sender, e) => this.OnMessage(e.Data); _ws.OnError += _ws_OnError; _ws.OnOpen += _ws_OnOpen; _ws.Connect(); while (!connected) { Thread.Sleep(10); } foreach (var sub in _subscribers) { _ws.Send(ROSBridgeMsg.Subscribe(sub.Key.topic, sub.Key.type)); Debug.Log("Sending: " + ROSBridgeMsg.Subscribe(sub.Key.topic, sub.Key.type)); } foreach (var p in _publishers) { _ws.Send(ROSBridgeMsg.AdvertiseTopic(p.topic, p.type)); Debug.Log("Sending " + ROSBridgeMsg.AdvertiseTopic(p.topic, p.type)); } foreach (var srv in _serviceServers) { _ws.Send(ROSBridgeMsg.AdvertiseService(srv.Key.topic, srv.Key.type)); Debug.Log("Sending: " + ROSBridgeMsg.AdvertiseService(srv.Key.topic, srv.Key.type)); } while (_connected) { Thread.Sleep(10); } }
/// <summary> /// Add a publisher to this connection. There can be many publishers. /// </summary> /// <typeparam name="Tpub">Publisher type to advertise</typeparam> /// <param name="topic">Topic to advertise on</param> /// <returns>A publisher which can be used to broadcast data on the given topic</returns> public ROSBridgePublisher <Tmsg> Advertise <Tmsg>(string topic) where Tmsg : ROSMessage { ROSBridgePublisher <Tmsg> pub = (ROSBridgePublisher <Tmsg>)Activator.CreateInstance(typeof(ROSBridgePublisher <Tmsg>), new object[] { topic }); pub.SetBridgeConnection(this); _publishers.Add(pub); if (connected) { _ws.Send(ROSBridgeMsg.AdvertiseTopic(pub.topic, pub.type)); } return(pub); }