public void Update(ContinuousQuery query, string clientId, string clientUniqueId, bool notifyAdd, bool notifyUpdate, bool notifyRemove, QueryDataFilters datafilters) { lock (this) { if (clientRefs.ContainsKey(query.UniqueId)) { HashVector cRefs = (HashVector)clientRefs[query.UniqueId]; if (cRefs.ContainsKey(clientId)) { ClusteredList <string> refs = (ClusteredList <string>)cRefs[clientId]; if (!refs.Contains(clientUniqueId)) { refs.Add(clientUniqueId); } } else { ClusteredList <string> clientUniqueIds = new ClusteredList <string>(); clientUniqueIds.Add(clientUniqueId); cRefs[clientId] = clientUniqueIds; } UpdateNotifications(notifyAdd, clientId, query.UniqueId, clientUniqueId, addNotifications, datafilters.AddDataFilter, maxAddDFAgainstCID, addDFAgainstCUniqueID); UpdateNotifications(notifyUpdate, clientId, query.UniqueId, clientUniqueId, updateNotifications, datafilters.UpdateDataFilter, maxUpdateDFAgainstCID, updateDFAgainstCUniqueID); UpdateNotifications(notifyRemove, clientId, query.UniqueId, clientUniqueId, removeNotifications, datafilters.RemoveDataFilter, maxRemoveDFAgainstCID, removeDFAgainstCUniqueID); } } }
public ContinuousQuery GetCQ(string commandText, IDictionary values) { lock (this) { ContinuousQuery query = new ContinuousQuery(commandText, values); if (registeredQueries.Contains(query)) { int qIndex = registeredQueries.IndexOf(query); return(registeredQueries[qIndex]); } else { query.UniqueId = GenerateUniqueId(); } return(query); } }
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 bool Contains(T value) { return(_results.Contains(value)); }
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); } }