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); } }
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); }
public void Remove(T result) { _results.Remove(result); }
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); } }