/// <summary>
        /// Disconnect from the remote ros environment.
        /// </summary>
        public void Disconnect()
        {
            if (!connected)
            {
                return;
            }

            _recvThread.Abort();
            foreach (var sub in _subscribers)
            {
                _ws.Send(ROSBridgeMsg.UnSubscribe(sub.Key.topic));
            }
            foreach (var p in _publishers)
            {
                _ws.Send(ROSBridgeMsg.UnAdvertiseTopic(p.topic));
            }
            foreach (var srv in _serviceServers)
            {
                _ws.Send(ROSBridgeMsg.UnadvertiseService(srv.Key.topic));
            }

            _ws.Close();
            _msgQueue.Clear();

            _connected = false;
        }
        /// <summary>
        /// Remove a publisher from this connection
        /// </summary>
        /// <param name="pub"></param>
        public void Unadvertise(ROSBridgePublisher pub)
        {
            if (connected)
            {
                _ws.Send(ROSBridgeMsg.UnAdvertiseTopic(pub.topic));
            }

            _publishers.Remove(pub);
        }