Ejemplo n.º 1
0
        public bool UnRegister(string serverUniqueId, string clientUniqueId, string clientId)
        {
            lock (this)
            {
                if (clientRefs.ContainsKey(serverUniqueId))
                {
                    HashVector cRefs = (HashVector)clientRefs[serverUniqueId];
                    if (cRefs.ContainsKey(clientId))
                    {
                        ClusteredList <string> refs = (ClusteredList <string>)cRefs[clientId];
                        if (refs.Count > 0)
                        {
                            refs.Remove(clientUniqueId);

                            UnRegisterNotifications(serverUniqueId, clientUniqueId, clientId, addNotifications, maxAddDFAgainstCID, addDFAgainstCUniqueID);
                            UnRegisterNotifications(serverUniqueId, clientUniqueId, clientId, updateNotifications, maxUpdateDFAgainstCID, updateDFAgainstCUniqueID);
                            UnRegisterNotifications(serverUniqueId, clientUniqueId, clientId, removeNotifications, maxRemoveDFAgainstCID, removeDFAgainstCUniqueID);

                            if (refs.Count == 0)
                            {
                                cRefs.Remove(clientId);
                            }
                        }
                        if (cRefs.Count == 0)
                        {
                            int qIndex = -1;
                            foreach (ContinuousQuery query in registeredQueries)
                            {
                                if (query.UniqueId.Equals(serverUniqueId))
                                {
                                    qIndex = registeredQueries.IndexOf(query);
                                    break;
                                }
                            }
                            if (qIndex != -1)
                            {
                                registeredQueries.RemoveAt(qIndex);
                            }
                            return(true);
                        }
                    }
                }
                return(false);
            }
        }
Ejemplo n.º 2
0
        private void UnRegisterNotifications(string serverUniqueId, string clientUniqueId, string clientId, HashVector notifications
                                             , HashVector CID, HashVector CUID)
        {
            if (notifications.ContainsKey(serverUniqueId))
            {
                HashVector clients = notifications[serverUniqueId] as HashVector;
                if (clients.ContainsKey(clientId))
                {
                    ClusteredList <string> clientQueries = clients[clientId] as ClusteredList <string>;
                    if (clientQueries.Contains(clientUniqueId))
                    {
                        clientQueries.Remove(clientUniqueId);

                        if (clientQueries.Count == 0)
                        {
                            clients.Remove(clientId);
                        }
                    }
                }
            }


            UnregisterDataFilter(serverUniqueId, clientId, clientUniqueId, CID, CUID);
        }
Ejemplo n.º 3
0
 public void Remove(T result)
 {
     _results.Remove(result);
 }
Ejemplo n.º 4
0
        private void UpdateNotifications(bool notify, string clientId, string serverUniqueId, string clientUniqueId, HashVector notifications
                                         , EventDataFilter datafilters, HashVector CID, HashVector CUID)
        {
            if (notify)
            {
                if (notifications.ContainsKey(serverUniqueId))
                {
                    HashVector clients = notifications[serverUniqueId] as HashVector;
                    if (clients.ContainsKey(clientId)) //New Query from same client
                    {
                        ClusteredList <string> clientQueries = clients[clientId] as ClusteredList <string>;
                        if (!clientQueries.Contains(clientUniqueId))
                        {
                            clientQueries.Add(clientUniqueId);
                        }
                    }
                    else //new client
                    {
                        ClusteredList <string> clientUniqueIds = new ClusteredList <string>();
                        clientUniqueIds.Add(clientUniqueId);
                        clients[clientId] = clientUniqueIds;
                    }
                }
                else //New Query altogether
                {
                    HashVector             clients         = new HashVector();
                    ClusteredList <string> clientUniqueIds = new ClusteredList <string>();
                    clientUniqueIds.Add(clientUniqueId);
                    clients[clientId] = clientUniqueIds;

                    notifications[serverUniqueId] = clients;
                }

                #region DataFilters registration
                //updating clientUIDs
                HashVector clientUIDs = null;

                if (CUID.ContainsKey(clientId))
                {
                    clientUIDs = CUID[clientId] as HashVector;
                }
                else
                {
                    CUID[clientId] = clientUIDs = new HashVector();
                }

                clientUIDs[clientUniqueId] = datafilters;

                //updating Max values
                HashVector clientDF = null;
                if (CID.ContainsKey(serverUniqueId))
                {
                    clientDF = CID[serverUniqueId] as HashVector;
                }
                else
                {
                    CID[serverUniqueId] = clientDF = new HashVector();
                }


                EventDataFilter       max = EventDataFilter.None;
                IDictionaryEnumerator ide = clientUIDs.GetEnumerator();
                while (ide.MoveNext())
                {
                    if (((EventDataFilter)ide.Value) > max)
                    {
                        max = (EventDataFilter)ide.Value;
                    }
                }
                if (!clientDF.ContainsKey(clientId) || ((EventDataFilter)clientDF[clientId]) < max)
                {
                    clientDF[clientId] = max;
                }
                #endregion
            }
            else //Not to be notified then remove it
            {
                if (notifications.ContainsKey(serverUniqueId))
                {
                    HashVector clients = notifications[serverUniqueId] as HashVector;
                    if (clients.ContainsKey(clientId))
                    {
                        ClusteredList <string> clientQueries = clients[clientId] as ClusteredList <string>;
                        if (clientQueries.Contains(clientUniqueId))
                        {
                            clientQueries.Remove(clientUniqueId);

                            if (clientQueries.Count == 0)
                            {
                                clients.Remove(clientId);
                            }
                        }
                    }
                }

                UnregisterDataFilter(serverUniqueId, clientId, clientUniqueId, CID, CUID);
            }
        }