public bool UnSubscribeToStockPrice(string stocksym)
 {
     try
     {
         IStockCallback callbackChannel = OperationContext.Current.GetCallbackChannel <IStockCallback>();
         SubscribeInfo  subToRemove     = null;
         foreach (SubscribeInfo sub in SubscriberList)
         {
             if (sub.ChannelToClient == callbackChannel) //found subscriber
             {
                 sub.RemoveSymbol(stocksym);
                 if (sub.GetNumOfSymbolsSubscribed() == 0)
                 {
                     subToRemove = sub;
                 }
             }
         }
         if (subToRemove != null)
         {
             SubscriberList.Remove(subToRemove);
         }
     }
     catch (Exception ex)
     {
         throw new FaultException(ex.Message, new FaultCode("UnSubscription Error"));
     }
     return(true);
 }
 public bool SubscribeToStockPrice(string stocksym, double triggerPrice)
 {
     try
     {
         IStockCallback callbackChannel = OperationContext.Current.GetCallbackChannel <IStockCallback>();
         bool           ifNewSubscriber = true;
         foreach (SubscribeInfo sub in SubscriberList)
         {
             if (sub.ChannelToClient == callbackChannel) //found subscriber
             {
                 ifNewSubscriber = false;
                 sub.AddSymbol(stocksym, triggerPrice);
             }
         }
         if (ifNewSubscriber)
         {
             SubscribeInfo subscriber = new SubscribeInfo();
             SubscriberList.Add(subscriber);
             subscriber.ChannelToClient = callbackChannel;
             subscriber.AddSymbol(stocksym, triggerPrice);
         }
     }
     catch (Exception ex)
     {
         throw new FaultException(ex.Message, new FaultCode("Subscription Error"));
     }
     return(true);
 }