Ejemplo n.º 1
0
        void GpsEventService_Closed(object sender, EventArgs e)
        {
            ILocationAlarmServiceCallback callback = (ILocationAlarmServiceCallback)sender;

            Subscribers.ForEach(delegate(AlarmSubscriber subscriber)
            {
                if (subscriber.ClientCallback == callback)
                {
                    Subscribers.Remove(subscriber);
                    logger.Info("用户" + subscriber.User.Id + "Closed Client Removed!");
                }
            });
        }
Ejemplo n.º 2
0
        //客户端断开
        public void Unsubscribe(int UserId)
        {
            ILocationAlarmServiceCallback callback = OperationContext.Current.GetCallbackChannel <ILocationAlarmServiceCallback>();

            Subscribers.ForEach(delegate(AlarmSubscriber subscriber)
            {
                if (subscriber.User.Id == UserId)
                {
                    Subscribers.Remove(subscriber);
                    logger.Info("用户" + subscriber.User.Id + "注销 Client Removed!");
                }
            });
        }
Ejemplo n.º 3
0
        //用户订阅报警,Alarms代表要订阅的报警类型
        public void Subscribe(int UserId, List <int> Alarms)
        {
            ILocationAlarmServiceCallback callback = OperationContext.Current.GetCallbackChannel <ILocationAlarmServiceCallback>();

            User            u          = GetUser(UserId);
            AlarmSubscriber subscriber = GetSubscirber(UserId);

            if (subscriber == null)
            {
                subscriber      = new AlarmSubscriber();
                subscriber.User = u;
                Subscribers.Add(subscriber);
                logger.Info("客户端" + UserId + "注册");
            }
            subscriber.AlarmTypeList  = Alarms; //更新订阅
            subscriber.ClientCallback = callback;
            //绑定退出事件,在客户端退出时,注销客户端的订阅
            ICommunicationObject obj = (ICommunicationObject)callback;

            obj.Closed  += new EventHandler(GpsEventService_Closed);
            obj.Closing += new EventHandler(GpsEventService_Closing);
        }