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();
}
}