public static Server.GatewayRef CreateGateway(ActorSystem system, ChannelType type, string name, IPEndPoint endPoint, XunitOutputLogger.Source outputSource, Action<Server.GatewayInitiator> clientInitiatorSetup = null) { // initialize gateway initiator var initiator = new Server.GatewayInitiator() { GatewayLogger = new XunitOutputLogger($"Gateway({name})", outputSource), ListenEndPoint = endPoint, ConnectEndPoint = endPoint, TokenRequired = false, CreateChannelLogger = (_, o) => new XunitOutputLogger($"ServerChannel({name})", outputSource), CheckCreateChannel = (_, o) => true, ConnectionSettings = new Server.TcpConnectionSettings { PacketSerializer = s_serverSerializer }, PacketSerializer = s_serverSerializer, }; clientInitiatorSetup?.Invoke(initiator); // create gateway and start it var gateway = (type == ChannelType.Tcp) ? system.ActorOf(Props.Create(() => new Server.TcpGateway(initiator))).Cast<Server.GatewayRef>() : system.ActorOf(Props.Create(() => new Server.UdpGateway(initiator))).Cast<Server.GatewayRef>(); gateway.Start().Wait(); return gateway; }
public static Server.GatewayRef CreateGateway(ActorSystem system, ChannelType type, string name, IPEndPoint endPoint, XunitOutputLogger.Source outputSource, Action <Server.GatewayInitiator> clientInitiatorSetup = null) { // initialize gateway initiator var initiator = new Server.GatewayInitiator() { GatewayLogger = new XunitOutputLogger($"Gateway({name})", outputSource), ListenEndPoint = endPoint, ConnectEndPoint = endPoint, TokenRequired = false, CreateChannelLogger = (_, o) => new XunitOutputLogger($"ServerChannel({name})", outputSource), CheckCreateChannel = (_, o) => true, ConnectionSettings = new Server.TcpConnectionSettings { PacketSerializer = s_serverSerializer }, PacketSerializer = s_serverSerializer, }; clientInitiatorSetup?.Invoke(initiator); // create gateway and start it var gateway = (type == ChannelType.Tcp) ? system.ActorOf(Props.Create(() => new Server.TcpGateway(initiator))).Cast <Server.GatewayRef>() : system.ActorOf(Props.Create(() => new Server.UdpGateway(initiator))).Cast <Server.GatewayRef>(); gateway.Start().Wait(); return(gateway); }
private static GatewayRef StartGateway(ActorSystem system, ChannelType type, int port) { var serializer = PacketSerializer.CreatePacketSerializer(); var initiator = new GatewayInitiator { ListenEndPoint = new IPEndPoint(IPAddress.Any, port), GatewayLogger = LogManager.GetLogger("Gateway"), CreateChannelLogger = (ep, _) => LogManager.GetLogger($"Channel({ep}"), ConnectionSettings = new TcpConnectionSettings { PacketSerializer = serializer }, PacketSerializer = serializer, CreateInitialActors = (context, connection) => new[] { Tuple.Create(context.ActorOf(Props.Create(() => new EntryActor(context.Self.Cast<ActorBoundChannelRef>()))), new TaggedType[] { typeof(IEntry) }, (ActorBindingFlags)0) } }; var gateway = (type == ChannelType.Tcp) ? system.ActorOf(Props.Create(() => new TcpGateway(initiator))).Cast<GatewayRef>() : system.ActorOf(Props.Create(() => new UdpGateway(initiator))).Cast<GatewayRef>(); gateway.Start().Wait(); return gateway; }
public TokenChecker(GatewayInitiator initiator, TcpGateway gateway, Socket socket) { _initiator = initiator; _gateway = gateway; _logger = initiator.CreateChannelLogger(socket.RemoteEndPoint, socket); _socket = socket; _connection = new TcpConnection(_logger, socket) { Settings = initiator.ConnectionSettings }; }
public TcpChannel(GatewayInitiator initiator, Socket socket, object tag) { // open by client connection. _initiator = initiator; _logger = _initiator.CreateChannelLogger(socket.RemoteEndPoint, socket); _socket = socket; _connection = new TcpConnection(_logger, _socket) { Settings = initiator.ConnectionSettings }; _tag = tag; }
public TcpGateway(GatewayInitiator initiator) { _initiator = initiator; _logger = initiator.GatewayLogger; if (initiator.TokenRequired && initiator.TokenTimeout != TimeSpan.Zero) { _timeoutCanceler = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable( initiator.TokenTimeout, initiator.TokenTimeout, Self, new TimeoutTimerMessage(), Self); } }
public TcpChannel(GatewayInitiator initiator, TcpConnection connection, object tag, Tuple<IActorRef, TaggedType[], ActorBindingFlags> bindingActor) { // open by registerd token. _initiator = initiator; _logger = initiator.CreateChannelLogger(connection.RemoteEndPoint, connection.Socket); _socket = connection.Socket; _connection = connection; _tag = tag; BindActor(bindingActor.Item1, bindingActor.Item2.Select(t => new BoundType(t)), bindingActor.Item3); }
public UdpChannel(GatewayInitiator initiator, object connection, object tag, Tuple<IActorRef, TaggedType[], ActorBindingFlags> bindingActor) { var netConnection = (NetConnection)connection; _initiator = initiator; _logger = _initiator.CreateChannelLogger(netConnection.RemoteEndPoint, connection); _connection = netConnection; _packetSerializer = initiator.PacketSerializer; _tag = tag; if (bindingActor != null) BindActor(bindingActor.Item1, bindingActor.Item2.Select(t => new BoundType(t)), bindingActor.Item3); }
private static GatewayRef[] StartGateway(ActorSystem system, ChannelType type, int port, int port2) { var serializer = PacketSerializer.CreatePacketSerializer(); var environment = new EntryActorEnvironment(); // First gateway var initiator = new GatewayInitiator { ListenEndPoint = new IPEndPoint(IPAddress.Any, port), GatewayLogger = LogManager.GetLogger("Gateway"), GatewayInitialized = a => { environment.Gateway = a.Cast<ActorBoundGatewayRef>(); }, CreateChannelLogger = (ep, _) => LogManager.GetLogger($"Channel({ep}"), ConnectionSettings = new TcpConnectionSettings { PacketSerializer = serializer }, PacketSerializer = serializer, CreateInitialActors = (context, connection) => new[] { Tuple.Create(context.ActorOf(Props.Create(() => new EntryActor(environment, context.Self.Cast<ActorBoundChannelRef>()))), new TaggedType[] { typeof(IEntry) }, (ActorBindingFlags)0) } }; var gateway = (type == ChannelType.Tcp) ? system.ActorOf(Props.Create(() => new TcpGateway(initiator))).Cast<GatewayRef>() : system.ActorOf(Props.Create(() => new UdpGateway(initiator))).Cast<GatewayRef>(); gateway.Start().Wait(); // Second gateway var initiator2 = new GatewayInitiator { ListenEndPoint = new IPEndPoint(IPAddress.Any, port2), ConnectEndPoint = new IPEndPoint(IPAddress.Loopback, port2), GatewayLogger = LogManager.GetLogger("Gateway2"), TokenRequired = true, GatewayInitialized = a => { environment.Gateway2nd = a.Cast<ActorBoundGatewayRef>(); }, CreateChannelLogger = (ep, _) => LogManager.GetLogger($"Channel2({ep}"), ConnectionSettings = new TcpConnectionSettings { PacketSerializer = serializer }, PacketSerializer = serializer, }; var gateway2 = (type == ChannelType.Tcp) ? system.ActorOf(Props.Create(() => new TcpGateway(initiator2))).Cast<GatewayRef>() : system.ActorOf(Props.Create(() => new UdpGateway(initiator2))).Cast<GatewayRef>(); gateway2.Start().Wait(); return new[] { gateway, gateway2 }; }
public override async Task Start() { // create UserTableContainer _userContainer = _context.System.ActorOf( Props.Create(() => new DistributedActorTableContainer<long>( "User", _context.ClusterActorDiscovery, typeof(UserActorFactory), new object[] { _context }, InterfacedPoisonPill.Instance)), "UserTableContainer"); // create gateway for users to connect to if (_listenEndPoint.Port != 0) { var serializer = PacketSerializer.CreatePacketSerializer(); var name = "UserGateway"; var initiator = new GatewayInitiator { ListenEndPoint = _listenEndPoint, ConnectEndPoint = _connectEndPoint, TokenRequired = true, GatewayLogger = LogManager.GetLogger(name), CreateChannelLogger = (ep, _) => LogManager.GetLogger($"Channel({ep}"), ConnectionSettings = new TcpConnectionSettings { PacketSerializer = serializer }, PacketSerializer = serializer, }; _gateway = (_channelType == ChannelType.Tcp) ? _context.System.ActorOf(Props.Create(() => new TcpGateway(initiator)), name).Cast<GatewayRef>() : _context.System.ActorOf(Props.Create(() => new UdpGateway(initiator)), name).Cast<GatewayRef>(); await _gateway.Start(); } }
public override async Task Start() { var serializer = PacketSerializer.CreatePacketSerializer(); var name = "UserLoginGateway"; var initiator = new GatewayInitiator { ListenEndPoint = _listenEndPoint, GatewayLogger = LogManager.GetLogger(name), CreateChannelLogger = (ep, _) => LogManager.GetLogger($"Channel({ep}"), ConnectionSettings = new TcpConnectionSettings { PacketSerializer = serializer }, PacketSerializer = serializer, CreateInitialActors = (context, connection) => new[] { Tuple.Create( context.ActorOf(Props.Create(() => new UserLoginActor(_context, context.Self.Cast<ActorBoundChannelRef>(), GatewayInitiator.GetRemoteEndPoint(connection)))), new TaggedType[] { typeof(IUserLogin) }, ActorBindingFlags.CloseThenStop | ActorBindingFlags.StopThenCloseChannel) } }; _gateway = (_channelType == ChannelType.Tcp) ? _context.System.ActorOf(Props.Create(() => new TcpGateway(initiator)), name).Cast<GatewayRef>() : _context.System.ActorOf(Props.Create(() => new UdpGateway(initiator)), name).Cast<GatewayRef>(); await _gateway.Start(); }