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