protected virtual void DoUnsubscribe(GDID gRecipientNode, GDID gEmitterNode) { var todo = Todo.MakeNew <EventUnsubscribeTodo>(); todo.G_Owner = gEmitterNode; todo.G_Subscriber = gRecipientNode; SocialGraphTodos.EnqueueSubscribtion(todo); }
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); }
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); }
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); } }
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); }