Esempio n. 1
0
        protected virtual IEnumerable <GraphNode> DoGetSubscribers(GDID gEmitterNode, long start, int count)
        {
            var qryVol = Queries.FindSubscriberVolumes <SubscriberVolumeRow>(gEmitterNode);
            IEnumerable <SubscriberVolumeRow> volumes = ForNode(gEmitterNode).LoadEnumerable(qryVol);
            var sum = 0;
            SubscriberVolumeRow volume = null;
            var i = 0;

            foreach (var vol in volumes)
            {
                if (sum <= start && start <= sum + SocialConsts.GetVolumeMaxCountForPosition(i++))
                {
                    volume = vol;
                    break;
                }
                sum += vol.Count;
            }
            if (volume == null)
            {
                yield break;
            }
            var _start      = start - sum;
            var qry         = Queries.FindSubscribers <SubscriberRow>(volume.G_SubscriberVolume, _start, count);
            var subscribers = ForNode(volume.G_SubscriberVolume).LoadEnumerable(qry);

            foreach (var subscriber in subscribers)
            {
                yield return(DoGetNode(subscriber.G_Subscriber));
            }
        }
Esempio n. 2
0
        private SubscriberVolumeRow createVolume()
        {
            var gVol   = NodeRow.GenerateNewNodeRowGDID(); // NOTICE: Volume uses Node Row GDID (Briefcase key)
            var result = new SubscriberVolumeRow()
            {
                G_Owner            = G_Owner,
                G_SubscriberVolume = gVol,
                Create_Date        = App.TimeSource.UTCNow,
                Count = 0
            };

            ForNode(G_Owner).Insert(result);
            return(result);
        }
Esempio n. 3
0
        protected virtual SubscriberRow FindSubscriber(out SubscriberVolumeRow minCntVol)
        {
            minCntVol = null;
            IEnumerable <SubscriberVolumeRow> volumes = GetSubscriberVolumes();
            SubscriberRow result = null;
            var           i      = 0;

            foreach (var volume in volumes)
            {
                var qry = Queries.FindSubscriber <SubscriberRow>(volume, G_Subscriber);
                if (result == null)
                {
                    result = ForNode(volume.G_SubscriberVolume).LoadRow(qry);
                }
                if ((volume.Count < SocialConsts.GetVolumeMaxCountForPosition(i++)) && (minCntVol == null || minCntVol.Count > volume.Count))
                {
                    minCntVol = volume;
                }
            }
            return(result);
        }