Example #1
0
        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);
            }
        }
Example #2
0
 public void UnregisterOnNewOrder(int callbackId)
 {
     if (this.CallbacksIds.ContainsKey(callbackId))
     {
         IStockServiceCallback callback = this.CallbacksIds[callbackId];
         if (this.OnNewOrderCallbacks.Contains(callback))
         {
             this.OnNewOrderCallbacks.Remove(callback);
         }
     }
 }
Example #3
0
        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);
        }
Example #4
0
        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);
                }
            }
        }