public RemoteMessage(IMessage message, Aid to, WireMessageId messageId) { _to = to ?? Aid.Unknown; _message = message ?? Actors.Message.Empty; _messageId = messageId ?? WireMessageId.Next(); _isFuture = _message is IFutureMessage; }
public static bool TryParse(string sid, out WireMessageId id) { id = Empty; if (sid != null) { var length = sid.Length; if (length >= EmptyLength) { var startPos = GetStartPos(sid, length); if (startPos > -1) { startPos++; var endPos = GetEndPos(sid, length, startPos); if (endPos > -1) { int dashPos = GetPositionOf(Colon, sid, startPos, Math.Min(startPos + 11, endPos)); if (dashPos > -1 && TryParseInt(sid, ref startPos, dashPos - startPos, out int pid)) { startPos++; var dotPos = GetPositionOf(Dot, sid, startPos, Math.Min(startPos + 11, endPos)); if (dotPos > -1 && TryParseInt(sid, ref startPos, dotPos - startPos, out int major)) { startPos++; dotPos = GetPositionOf(Dot, sid, startPos, Math.Min(startPos + 11, endPos)); if (dotPos > -1 && TryParseInt(sid, ref startPos, dotPos - startPos, out int majorRevision)) { startPos++; dotPos = GetPositionOf(Dot, sid, startPos, Math.Min(startPos + 11, endPos)); if (dotPos > -1 && TryParseInt(sid, ref startPos, dotPos - startPos, out int minor)) { startPos++; if (TryParseInt(sid, ref startPos, endPos - startPos, out int minorRevision)) { id = new WireMessageId(major, majorRevision, minor, minorRevision, pid); return(true); } } } } } } } } } return(false); }
public static WireMessage ToWireMessage(this Exception exception, Aid from, Aid to, WireMessageId id = null) { var faulted = (exception != null); var state = WireMessageState.Empty; state |= faulted ? WireMessageState.Faulted : WireMessageState.Canceled; return(new WireMessage { From = from, To = to, Exception = exception, MessageType = faulted ? MessageType.FutureError : MessageType.FutureResponse, Id = id ?? WireMessageId.Next(), State = state }); }
public static WireMessage ToWireMessage(this IMessage message, Aid to, WireMessageId id = null, Exception exception = null) { var result = new WireMessage { To = to, Id = id ?? WireMessageId.Next() }; if (message != null) { result.MessageType = message.MessageType; result.From = message.From; result.Data = message.Data; result.TimeoutMSec = message.TimeoutMSec; var msgHeader = message.Header; var headerCount = msgHeader?.Count ?? 0; if (headerCount > 0) { var header = new Dictionary <string, string>(headerCount); foreach (var kv in msgHeader) { header.Add(kv.Key, kv.Value); } result.Header = header; } var state = WireMessageState.Default; if (message.IsEmpty) { state |= WireMessageState.Empty; } if (message is IFutureMessage future) { if (future.IsCanceled) { state |= WireMessageState.Canceled; } if (future.IsCompleted) { state |= WireMessageState.Completed; } if (future.IsFaulted) { state |= WireMessageState.Faulted; } } if (exception != null) { result.Exception = exception; state |= WireMessageState.Faulted; } else if (message is IFutureError error) { result.Exception = error.Exception; state |= WireMessageState.Faulted; } result.State = state; } return(result); }
internal RemoteRequest(IFutureMessage message, Aid to, Action <object, TaskCompletionStatus> onTimeout) : base(message, to, WireMessageId.Next()) { _onTimeout += onTimeout; }