public int RegisterOnOrderStatusChange(int id) { IStockServiceCallback callback = OperationContext.Current.GetCallbackChannel <IStockServiceCallback>(); Console.WriteLine("Someone registered for an order status change!"); using (StockServiceModelContainer database = new StockServiceModelContainer()) { StockOrder order = database.StockOrders.Find(id); if (order == null) { throw new FaultException <OrderNotFoundFault>(new OrderNotFoundFault(id)); } int callbackId = Interlocked.Increment(ref this.LastCallbackId); this.CallbacksIds.Add(callbackId, callback); if (this.OnOrderStatusChangeCallbacks.ContainsKey(id) == false) { this.OnOrderStatusChangeCallbacks[id] = new HashSet <IStockServiceCallback>(); } this.OnOrderStatusChangeCallbacks[id].Add(callback); return(callbackId); } }
public void UnregisterOnNewOrder(int callbackId) { if (this.CallbacksIds.ContainsKey(callbackId)) { IStockServiceCallback callback = this.CallbacksIds[callbackId]; if (this.OnNewOrderCallbacks.Contains(callback)) { this.OnNewOrderCallbacks.Remove(callback); } } }
public int RegisterOnNewOrder() { IStockServiceCallback callback = OperationContext.Current.GetCallbackChannel <IStockServiceCallback>(); Console.WriteLine("Someone registered for a new order!"); int callbackId = Interlocked.Increment(ref this.LastCallbackId); this.CallbacksIds.Add(callbackId, callback); this.OnNewOrderCallbacks.Add(callback); return(callbackId); }
public void UnregisterOnOrderStatusChange(int orderId, int callbackId) { if (this.CallbacksIds.ContainsKey(callbackId)) { IStockServiceCallback callback = this.CallbacksIds[callbackId]; IEnumerable <HashSet <IStockServiceCallback> > statusChangeCallbacks = this.OnOrderStatusChangeCallbacks.Values .Where(callbacks => callbacks.Contains(callback)); foreach (HashSet <IStockServiceCallback> callbacks in statusChangeCallbacks) { callbacks.Remove(callback); } } }