public RelayMsg(MsgTag tag, ClientConnectionId connectionId, ProcessId to, ProcessId sender, bool isAsk) { Tag = tag; ConnectionId = (string)connectionId; IsAsk = isAsk; To = to; Sender = sender; }
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; }
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); } }
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); }
public OutboundRelayMsg(ClientConnectionId connectionId, RemoteMessageDTO msg, ProcessId to, ProcessId sender, bool isAsk) : base(MsgTag.Outbound, connectionId, to, sender, isAsk) { Message = msg; }
public InboundRelayMsg(ClientConnectionId connectionId, object msg, ProcessId to, ProcessId sender, bool isAsk) : base(MsgTag.Inbound, connectionId, to, sender, isAsk) { Message = msg; }
public ClientDisconnectedException(ClientConnectionId id, string message, Exception innerException) : base(message, innerException) { Id = id; }
public ClientDisconnectedException(ClientConnectionId id) : base($"Client disconnected ({id})") { Id = id; }