///<summary>
        ///</summary>
        ///<param name="client"></param>
        ///<param name="symbol"></param>
        ///<exception cref="DataFeedException"></exception>
        public void UnSubscribe(IDataFeedClient client, string symbol)
        {
            lock (_rtClients)
            {
                List <IDataFeedClient> symbolClients;
                if (!_rtClients.TryGetValue(symbol, out symbolClients))
                {
                    throw new DataFeedException("Attempt to unsubscribe from non-existent symbol: " + symbol);
                }

                int clientIndex = symbolClients.FindIndex(feedClient => feedClient.ClientId == client.ClientId);
                if (clientIndex == -1)
                {
                    throw new DataFeedException("Attept to unsubscribe non-existent client: " + client.ClientId);
                }

                symbolClients.RemoveAt(clientIndex);

                Debug.Assert(symbolClients.Count(feedClient => feedClient.ClientId == client.ClientId) == 0);

                //if symbol has no more clients, remove symbol subscription
                if (symbolClients.Count == 0)
                {
                    //make the real un-subscribe at data provider
                    UnSubscribeFromSymbol(symbol);
                    //remove from map
                    _rtClients.Remove(symbol);
                }
            }
        }
        ///<summary>
        ///</summary>
        ///<param name="client"></param>
        ///<param name="symbol"></param>
        public void Subscribe(IDataFeedClient client, string symbol)
        {
            lock (_rtClients)
            {
                List <IDataFeedClient> symbolClients;
                if (!_rtClients.TryGetValue(symbol, out symbolClients))
                {
                    //symbol wasn't subscribed yet, create an entry
                    _rtClients.Add(symbol, symbolClients = new List <IDataFeedClient>());
                    //make the real subscription
                    SubscribeToSymbol(symbol);
                }

                //add client to the client list
                if (symbolClients.FindIndex(feedClient => feedClient.ClientId == client.ClientId) == -1)
                {
                    symbolClients.Add(client);
                }
            }
        }