public RoomActorService(StatefulServiceContext context)
: base(context)
{
float timeoutDebugMultiplier = 10;
var builder = new ContainerBuilder();
builder.Register(c => new ProtobufMessageSerializer(typeof(Message).Assembly, typeof(JoinRoom).Assembly, typeof(JoinRoomS2S).Assembly)).As<IMessageSerializer>();
var logger = new LoggerConfiguration()
.ConfigureMOUSETypesDestructure()
.MinimumLevel.Verbose()
.Enrich.With(new AzureServiceFabricSerilogEnricher(Context))
.Enrich.With<ExceptionEnricher>()
.WriteTo.Trace()
.CreateLogger();
builder.RegisterInstance(logger).As<ILogger>();
builder.RegisterType<SerilogCoreEvents>().As<ICoreEvents>();
builder.RegisterType<SerilogActorCoreEvents>().As<IActorCoreEvents>();
builder.RegisterType<SerilogLidgrenEvents>().As<ILidgrenEvents>();
var roomActorsEndpoint = FabricRuntime.GetActivationContext().GetEndpoint("RoomActors");
var nodeIP = Dns.GetHostAddresses(FabricRuntime.GetNodeContext().IPAddressOrFQDN).First(x => x.AddressFamily == AddressFamily.InterNetwork);
var roomActorsNetConfig = new NetPeerConfiguration("RoomActors")
{
LocalAddress = nodeIP,
MaximumConnections = 10000,
AcceptIncomingConnections = true,
Port = roomActorsEndpoint.Port,
ConnectionTimeout = 10 * timeoutDebugMultiplier
};
var callbacksNetConfig = new NetPeerConfiguration("Callbacks")
{
AcceptIncomingConnections = false,
ConnectionTimeout = 10 * timeoutDebugMultiplier
};
builder.RegisterType<WcfBufferPool>().As<IBufferPool>();
builder.Register(c =>
new CallbacksGatewayNode("Callbacks",
new LidgrenNetProvider(callbacksNetConfig, c.Resolve<ILidgrenEvents>()),
c.Resolve<ICoreEvents>(), c.Resolve<IMessageSerializer>(), c.Resolve<INetNodeConfig>(), c.Resolve<IBufferPool>()))
.As<ICallbacksGatewayNode>()
.As<INetNode>()
.SingleInstance();
builder.Register(c => new NetNodeConfig()
{
SendTimeoutSec = (int)(10.0 * timeoutDebugMultiplier),
ConnectTimeoutSec = (int)(10 * timeoutDebugMultiplier)
}).As<INetNodeConfig>();
builder.Register(c => new RoomActor(c.Resolve<ICallbacksGatewayNode>(), StateManager)).As<IRoomActor>();
builder.Register(c =>
new ServiceFabricActorSystemNetNode<IRoomActor>("RoomActors", new Uri("fabric:/ActorChat.ServiceFabric/RoomActorService"),
new LidgrenNetProvider(roomActorsNetConfig, c.Resolve<ILidgrenEvents>()),
c.Resolve<IActorCoreEvents>(), c.Resolve<ICoreEvents>(), c.Resolve<IMessageSerializer>(), c.Resolve<INetNodeConfig>(), c.Resolve<IBufferPool>(),
actorFactory: c.Resolve<Func<IRoomActor>>()))
.As<INetNode>()
.Named<INetNode>("RoomActors")
.As<IActorSystem<IRoomActor>>()
.SingleInstance();
var container = builder.Build();
_netNodes = container.Resolve<IEnumerable<INetNode>>();
}