Esempio n. 1
0
 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;
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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
            });
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
 internal RemoteRequest(IFutureMessage message, Aid to,
                        Action <object, TaskCompletionStatus> onTimeout)
     : base(message, to, WireMessageId.Next())
 {
     _onTimeout += onTimeout;
 }