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!"); } }); }
//客户端断开 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!"); } }); }
//用户订阅报警,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); }