public Unit TellUserControl(UserControlMessage msg) { if (msg == null) { throw new ArgumentNullException(nameof(msg)); } if (userInbox != null) { if (IsPaused) { new ActorDispatchRemote(ActorContext.System(actor.Id).Ping, actor.Id, cluster, ActorContext.SessionId, false).TellUserControl(msg, ProcessId.None); } else { try { userInbox.Post(msg); } catch (QueueFullException) { throw new ProcessInboxFullException(actor.Id, MailboxSize, "user"); } } } return(unit); }
public Unit TellUserControl(UserControlMessage message, ProcessId sender) { var sessionId = ActorContext.SessionId; return(transactionalIO ? ProcessOp.IO(() => Inbox.TellUserControl(message, sessionId)) : Inbox.TellUserControl(message, sessionId)); }
public static Option <UserControlMessage> PreProcessMessage <T>(ProcessId sender, ProcessId self, object message, Option <SessionId> sessionId) { if (message == null) { var emsg = $"Message is null for tell (expected {typeof(T)})"; tell(ActorContext.System(self).DeadLetters, DeadLetter.create(sender, self, emsg, message)); return(None); } UserControlMessage rmsg = null; if (message is ActorRequest req) { if (!(req.Message is T) && !(req.Message is Message)) { var emsg = $"Invalid message type for ask (expected {typeof(T)})"; tell(ActorContext.System(self).DeadLetters, DeadLetter.create(sender, self, emsg, message)); ActorContext.System(self).Tell( sender, new ActorResponse(new Exception($"Invalid message type for ask (expected {typeof(T)})"), sender, self, req.RequestId, typeof(Exception).AssemblyQualifiedName, true ), Schedule.Immediate, self ); return(None); } rmsg = message as UserControlMessage; } else { rmsg = new UserMessage(message, sender, sender); } if (rmsg != null && rmsg.SessionId == null && sessionId.IsSome) { rmsg.SessionId = sessionId.Map(x => x.Value).IfNoneUnsafe((string)null); } return(Optional(rmsg)); }
public Unit TellUserControl(UserControlMessage message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } if (userInbox != null) { try { userInbox.Post(message); } catch (QueueFullException) { throw new ProcessInboxFullException(actor.Id, MailboxSize, "user"); } } return(unit); }
public Unit TellUserControl(UserControlMessage message, Option <SessionId> sessionId) { if (message == null) { throw new ArgumentNullException(nameof(message)); } if (userInbox != null) { try { message.SessionId = message.SessionId ?? sessionId.Map(s => s.Value).IfNoneUnsafe(message.SessionId); userInbox?.Post(message); } catch (QueueFullException) { throw new ProcessInboxFullException(actor.Id, MailboxSize, "user"); } } return(unit); }
public Unit TellUserControl(UserControlMessage msg, Option <SessionId> sessionId) { if (msg == null) { throw new ArgumentNullException(nameof(msg)); } if (userInbox != null) { msg.SessionId = msg.SessionId ?? sessionId.Map(s => s.Value).IfNoneUnsafe(msg.SessionId); if (IsPaused) { // We're paused, so send to our persistent queue new ActorDispatchRemote( ActorContext.System(actor.Id).Ping, actor.Id, cluster, msg.SessionId == null ? None : Some(new SessionId(msg.SessionId)), false) .TellUserControl(msg, ProcessId.None); } else { try { userInbox?.Post(msg); } catch (QueueFullException) { throw new ProcessInboxFullException(actor.Id, MailboxSize, "user"); } } } return(unit); }
public Unit TellUserControl(UserControlMessage message, ProcessId sender) => Raise <Unit>(sender);
public Unit TellUserControl(UserControlMessage message, ProcessId sender) => IterRoleMembers(d => d.TellUserControl(message, sender));
public Unit TellUserControl(ProcessId pid, UserControlMessage message) => GetDispatcher(pid).TellUserControl(message, Self);
public Unit TellUserControl(UserControlMessage message, ProcessId sender) => transactionalIO ? ProcessOp.IO(() => Inbox.TellUserControl(message)) : Inbox.TellUserControl(message);
public Unit TellUserControl(UserControlMessage message, ProcessId sender) => Tell(message, sender, "usr-" + message.Tag.ToString().ToLower(), Message.Type.UserControl);
public Unit TellUserControl(UserControlMessage message, ProcessId sender) => Tell(message, Schedule.Immediate, sender, "user", Message.Type.UserControl, message.Tag);
public Unit TellUserControl(UserControlMessage message) => unit;
public static InboxDirective UserMessageInbox <S, T>(Actor <S, T> actor, IActorInbox inbox, UserControlMessage msg, ActorItem parent) { var session = msg.SessionId == null ? None : Some(new SessionId(msg.SessionId)); switch (msg.Tag) { case Message.TagSpec.UserAsk: var rmsg = ((ActorRequest)msg).SetSystem(actor.Id.System); return(ActorContext.System(actor.Id).WithContext(new ActorItem(actor, inbox, actor.Flags), parent, rmsg.ReplyTo, rmsg, msg, session, () => actor.ProcessAsk(rmsg))); case Message.TagSpec.UserReply: var urmsg = ((ActorResponse)msg).SetSystem(actor.Id.System); ActorContext.System(actor.Id).WithContext(new ActorItem(actor, inbox, actor.Flags), parent, urmsg.ReplyFrom, null, msg, session, () => actor.ProcessResponse(urmsg)); break; case Message.TagSpec.UserTerminated: var utmsg = ((TerminatedMessage)msg).SetSystem(actor.Id.System); return(ActorContext.System(actor.Id).WithContext(new ActorItem(actor, inbox, actor.Flags), parent, utmsg.Id, null, msg, session, () => actor.ProcessTerminated(utmsg.Id))); case Message.TagSpec.User: var umsg = ((UserMessage)msg).SetSystem(actor.Id.System); return(ActorContext.System(actor.Id).WithContext(new ActorItem(actor, inbox, actor.Flags), parent, umsg.Sender, null, msg, session, () => actor.ProcessMessage(umsg.Content))); case Message.TagSpec.ShutdownProcess: kill(actor.Id); break; } return(InboxDirective.Default); }