private void UnsubscribeEvents(HandshakingInfo subscriber)
        {
            foreach (var eventInfor in subscriber.UnsubscribeEventList)
            {
                foreach (var dic in eventInfor.Value)
                {
                    if (dic.Value)
                    {
                        object qObj = ServerDictionaries.GetObjectFromTheDictionary(eventInfor.Key);
                        System.Reflection.EventInfo ei = qObj.GetType().GetEvent(dic.Key);

                        // Find corresponding CQG delegate
                        Type delType = QueryHandler.FindDelegateType(QueryHandler.CQGAssembly, dic.Key);

                        // Instantiate the delegate with our own handler
                        string handlerName = string.Concat("_ICQGCELEvents_", dic.Key, "EventHandlerImpl");

                        MethodInfo handlerInfo = typeof(CQGEventHandlers).GetMethod(handlerName);
                        Delegate   d           = Delegate.CreateDelegate(delType, handlerInfo);

                        // Unsubscribe our handler from CQG event
                        ei.RemoveEventHandler(qObj, d);
                    }
                }
            }
        }
        private void Listener_SubscribersAdded(HandshakingEventArgs args)
        {
            var subscribersArray = new HandshakingInfo[ServerDictionaries.RealtimeIds.Count];

            ServerDictionaries.RealtimeIds.CopyTo(subscribersArray);
            ServerDictionaries.RealtimeIds.Clear();
            if (!args.NoSubscribers)
            {
                var subscribersList = new List <HandshakingInfo>(subscribersArray);
                for (int i = 0; i < args.Subscribers.Count; i++)
                {
                    subscribersList.Remove(args.Subscribers[i]);
                    ServerDictionaries.RealtimeIds.Add(args.Subscribers[i]);
                }

                if (subscribersList.Count > 0)
                {
                    // Handle last queries for unsubscribe items
                    QueryHandler.ReadQueries();
                    QueryHandler.ProcessEntireQueryList();

                    for (int i = 0; i < subscribersList.Count; i++)
                    {
                        UnsubscribeEvents(subscribersList[i]);
                        ServerDictionaries.DeleteFromServerDictionaries(subscribersList[i]);
                        Listener.DeleteUnsubscriber(subscribersList[i].ID);
                    }
                }
                HandshakingTimer.Stop();
            }
            else
            {
                HandshakingTimer.Start();
            }
        }
 public static void DeleteFromServerDictionaries(HandshakingInfo subscriber)
 {
     foreach (string key in subscriber.ObjectKeys)
     {
         RemoveObjectFromTheDictionary(key);
     }
     RealtimeIds.Remove(subscriber);
 }