Пример #1
0
        protected virtual void DoUnsubscribe(GDID gRecipientNode, GDID gEmitterNode)
        {
            var todo = Todo.MakeNew <EventUnsubscribeTodo>();

            todo.G_Owner      = gEmitterNode;
            todo.G_Subscriber = gRecipientNode;
            SocialGraphTodos.EnqueueSubscribtion(todo);
        }
Пример #2
0
        protected virtual void DoSubscribe(GDID gRecipientNode, GDID gEmitterNode, byte[] parameters)
        {
            var emitter = DoGetNode(gEmitterNode);
            var gh      = DoGetNode(gRecipientNode);

            if (!GraphHost.CanBeSubscribed(gh.NodeType, emitter.NodeType))
            {
                throw new GraphException(StringConsts.GS_CAN_NOT_BE_SUSBCRIBED_ERROR.Args(gh.NodeType, emitter.NodeType));
            }
            var todo = Todo.MakeNew <EventSubscribeTodo>();

            todo.G_Owner      = gEmitterNode;
            todo.G_Subscriber = gRecipientNode;
            todo.Subs_Type    = gh.NodeType;
            todo.Parameters   = parameters;
            SocialGraphTodos.EnqueueSubscribtion(todo);
        }
Пример #3
0
        protected virtual void DoEmitEvent(Event evt)
        {
            DoGetNode(evt.G_EmitterNode); // Don't run todo if Emitter does not exist
            var qryVol   = Queries.CountSubscriberVolumes <DynamicRow>(evt.G_EmitterNode);
            var countVol = ForNode(evt.G_EmitterNode).LoadRow(qryVol)["CNT"].AsInt();
            var count    = countVol < EventDeliveryCohortSize ? countVol : EventDeliveryCohortSize;
            var todos    = new List <EventDeliverTodo>();

            for (int i = 0; i < count; i++)
            {
                var todo = Todo.MakeNew <EventDeliverTodo>();
                todo.Event = evt;
                todo.VolumeWorkerOffset = count;
                todo.VolumeIndex        = i;
                todo.ChunkIndex         = 0;
                todo.G_Volume           = GDID.Zero;
                todos.Add(todo);
            }
            SocialGraphTodos.EnqueueSubscribtion(todos);
        }
Пример #4
0
        private void sendEventsChunk(IEnumerable <SubscriberRow> subscribersChunk)
        {
            var host = GraphOperationContext.Instance.GraphHost;
            IConfigSectionNode cfg = null;

            if (Event.Config.IsNotNullOrWhiteSpace())
            {
                cfg = Event.Config.AsLaconicConfig(handling: ConvertErrorHandling.ReturnDefault);
            }

            var filtered = host.FilterEventsChunk(subscribersChunk, Event, cfg);
            var badSubs  = host.DeliverEventsChunk(filtered, Event, cfg);

            if (badSubs != null && badSubs.Any())
            {
                var todo = Todo.MakeNew <EventRedeliverTodo>();
                todo.Event       = Event;
                todo.ToRedilever = badSubs.ToArray();
                SocialGraphTodos.EnqueueDelivery(todo);
            }
        }
Пример #5
0
        protected virtual GraphChangeStatus DoRemoveNode(GDID gNode)
        {
            var removeFriendsTodo = new EventRemoveFriendsTodo()
            {
                G_Node      = gNode,
                FriendIndex = 0,
                G_Friend    = GDID.Zero
            };

            SocialGraphTodos.EnqueueRemove(removeFriendsTodo);

            var removeNodeTodo = new EventRemoveNodeTodo()
            {
                G_Node      = gNode,
                VolumeIndex = 0,
                G_Volume    = GDID.Zero
            };

            SocialGraphTodos.EnqueueRemove(removeNodeTodo);

            return(GraphChangeStatus.Unassigned);
        }