public void GetSubscribeData(string sessionID, SubscribeInfo sInfo, int maxSize = 500, int maxTime = 500, Action <List <byte[]> > callBack = null) { lock (_syncLocker) { var result = this._binding.GetBingInfo(sInfo); if (result == null) { this._binding.Set(sessionID, sInfo.Name, sInfo.Topic, false); _cNum = this._binding.GetSubscriberCount(); Task.Factory.StartNew(() => { while (this._binding.Exists(sInfo)) { var list = this._messageQueue.DequeueForList(sInfo.Topic, maxSize, maxTime); if (list != null) { list.ForEach(i => { Interlocked.Increment(ref _outNum); }); callBack?.Invoke(list); list.Clear(); list = null; } } }); } } }
public BindInfo GetBingInfo(SubscribeInfo sInfo) { lock (_syncLocker) { var bi = _list.FirstOrDefault(b => b.Name == sInfo.Name && b.Topic == sInfo.Topic); if (bi != null) { if (bi.Expired <= DateTimeHelper.Now) { Remove(bi.SessionID); } else { return(bi); } } return(null); } }
public bool Exists(SubscribeInfo sInfo) { lock (_syncLocker) { var data = _list.FirstOrDefault(b => b.Name == sInfo.Name && b.Topic == sInfo.Topic); if (data != null) { if (data.Expired <= DateTimeHelper.Now) { Remove(data.SessionID); return(false); } data.Expired = DateTimeHelper.Now.AddMinutes(_minutes); return(true); } } return(false); }
public void Unsubscribe(SubscribeInfo sInfo) { Interlocked.Decrement(ref _cNum); this._binding.Del(sInfo.Name, sInfo.Topic); }