/// <summary>
        /// Connects and subscribes to destinations on glassfish server through stompconnect instance
        /// </summary>
        public void Subscribe(DestinationCollection destinations, Action<List<STOMPMessage>, string> subscribeCallback)
        {
            _subscribeCallback = subscribeCallback;
            try
            {
                Parallel.For(0, destinations.Count, i =>
                {
                    StompConnectClient stompConnectClient = new StompConnectClient(destinations[i]);

                    _stompClients.Add(stompConnectClient);

                    ConnectAndSubscribe(stompConnectClient);
                });
            }
            catch (Exception e)
            {
                TraceLogger.Log(e);
                throw;
            }
        }
        private void DisposeClient(StompConnectClient client)
        {
            if (null == client)
                return;

            client.Dispose();

            if (_stompClients.Contains(client))
                _stompClients.Remove(client);
        }
 private void ConnectAndSubscribe(StompConnectClient client)
 {
     client.Connect();
     Subscribe(client);
 }
        private void Subscribe(StompConnectClient client)
        {
            if (!_running)
                return;

            if (null == client)
            {
                TraceLogger.LogWarning(NonLocalizableResource.StompClientNullMessage);
                return;
            }

            SubscribeCallback subscriber = new SubscribeCallback(client.Subscribe);
            AsyncCallback callback = new AsyncCallback(GetMessages);

            IAsyncResult result = subscriber.BeginInvoke(callback, subscriber);
        }