Esempio n. 1
0
        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;
                            }
                        }
                    });
                }
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 public void Unsubscribe(SubscribeInfo sInfo)
 {
     Interlocked.Decrement(ref _cNum);
     this._binding.Del(sInfo.Name, sInfo.Topic);
 }