Esempio n. 1
0
 public RelayMsg(MsgTag tag, ClientConnectionId connectionId, ProcessId to, ProcessId sender, bool isAsk)
 {
     Tag          = tag;
     ConnectionId = (string)connectionId;
     IsAsk        = isAsk;
     To           = to;
     Sender       = sender;
 }
Esempio n. 2
0
        public ActorDispatchJS(ProcessId pid, Option <SessionId> sessionId, bool transactionalIO)
        {
            Id = ClientConnectionId.New(pid.Skip(2).Take(1).Name.Value);
            ProcessHub.Connections.Find(Id).IfNone(() => { throw new ClientDisconnectedException(Id); });

            ProcessId            = pid;
            SessionId            = sessionId;
            this.transactionalIO = transactionalIO;
        }
Esempio n. 3
0
        private MessageSets(int setNum)
        {
            var index = JsonConvert.DeserializeObject <Index>(File.ReadAllText(ConstructFileName(setNum, "index.json")));

            ClientId = new ClientConnectionId(index.ClientId.ToByteArrayFromHex());
            ServerId = new ServerConnectionId(index.ServerId.ToByteArrayFromHex());

            var clientIp = index.ClientIp.ToByteArrayFromHex();

            using (var rdr = new Reader(ConstructFileName(setNum, "wireshark.pcapng")))
            {
                int i = 1;
                foreach (var packet in rdr.AllBlocks.Select(x => x as EnhancedPacketBlock).Where(x => x != null))
                {
                    var data = packet.Data.AsSpan()
                               .ReadBytes(14, out _)
                               .ReadByte(out var ipHeader)
                               .ReadBytes((ipHeader & 0xf) * 4 - 9, out _)
                               .ReadBytes(4, out var source)
                               .ReadBytes(4, out _)
                               .ReadBytes(8, out _);

                    files[i] = new DataFile()
                    {
                        Sequence = i++,
                        Data     = data.ToArray(),
                        Source   = source.SequenceEqual(clientIp) ? DataFileSources.Client : DataFileSources.Server,
                    };
                }
            }

            if (index.Secrets != null)
            {
                LoadSecrets(index.Secrets);
            }
        }
Esempio n. 4
0
        public static ProcessId ConnectionInbox(ProcessId hub, RelayMsg rmsg)
        {
            switch (rmsg.Tag)
            {
            case RelayMsg.MsgTag.Inbound:
                var inmsg = rmsg as InboundRelayMsg;
                if (rmsg.IsAsk)
                {
                    // Ask not supported
                    tell(Errors(hub.System), "'ask' not supported from JS to server.");
                }
                else
                {
                    tell(rmsg.To, inmsg.Message, rmsg.Sender.IsValid ? Self.Append(rmsg.Sender) : ProcessId.NoSender);
                }
                break;

            case RelayMsg.MsgTag.Outbound:
                fwd(hub, rmsg);
                break;

            case RelayMsg.MsgTag.Subscribe:
                var pid          = rmsg.To;
                var subscriber   = rmsg.Sender;
                var connectionId = rmsg.ConnectionId;

                ActorContext.Request.Self.Actor.AddSubscription(
                    rmsg.To,
                    ActorContext.System(pid).Observe <object>(pid).Subscribe(x =>
                                                                             tell(hub,
                                                                                  new OutboundRelayMsg(
                                                                                      ClientConnectionId.New(connectionId),
                                                                                      new RemoteMessageDTO {
                    MessageId   = Guid.NewGuid(),
                    Content     = JsonConvert.SerializeObject(x),
                    Sender      = pid.ToString(),
                    To          = subscriber.ToString(),
                    ContentType = x.GetType().AssemblyQualifiedName,
                    ReplyTo     = pid.ToString(),
                    Tag         = (int)Message.TagSpec.User,
                    Type        = (int)Message.Type.User
                },
                                                                                      subscriber,
                                                                                      pid,
                                                                                      false),
                                                                                  pid)));
                break;

            case RelayMsg.MsgTag.Unsubscribe:
                ActorContext.Request.Self.Actor.RemoveSubscription(rmsg.To);
                break;
            }
            return(hub);
        }
Esempio n. 5
0
 public OutboundRelayMsg(ClientConnectionId connectionId, RemoteMessageDTO msg, ProcessId to, ProcessId sender, bool isAsk)
     :
     base(MsgTag.Outbound, connectionId, to, sender, isAsk)
 {
     Message = msg;
 }
Esempio n. 6
0
 public InboundRelayMsg(ClientConnectionId connectionId, object msg, ProcessId to, ProcessId sender, bool isAsk)
     :
     base(MsgTag.Inbound, connectionId, to, sender, isAsk)
 {
     Message = msg;
 }
Esempio n. 7
0
 public ClientDisconnectedException(ClientConnectionId id, string message, Exception innerException) : base(message, innerException)
 {
     Id = id;
 }
Esempio n. 8
0
 public ClientDisconnectedException(ClientConnectionId id) : base($"Client disconnected ({id})")
 {
     Id = id;
 }