90 lines
3.4 KiB
C#
90 lines
3.4 KiB
C#
using System.Reflection;
|
|
using ControlCenter.NamedPipeHost.Extensions;
|
|
using ControlCenter.NamedPipeHost.Manager;
|
|
using MatchServer;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Microsoft.Extensions.Logging;
|
|
using NLog.Extensions.Logging;
|
|
using ServerBase;
|
|
using ServerCommon;
|
|
using ServerCore;
|
|
using StackExchange.Redis;
|
|
|
|
public static class MatchServerExtensions
|
|
{
|
|
public static void AddNLog(this HostApplicationBuilder builder)
|
|
{
|
|
builder.Logging.ClearProviders();
|
|
builder.Logging.AddNLog(Log.NLogFileName);
|
|
}
|
|
public static void AddMatchServerService(this IServiceCollection services, string[] args)
|
|
{
|
|
services.AddSingleton<MatchServerService>();
|
|
services.AddSingleton<ServerConfig>(x =>
|
|
{
|
|
var server = x.GetRequiredService<MatchServerService>();
|
|
return server.MatchServerLogic.getServerConfig();
|
|
});
|
|
services.AddSingleton<DynamoDbClient>(x =>
|
|
{
|
|
var server = x.GetRequiredService<MatchServerService>();
|
|
return server.MatchServerLogic.getDynamoDbClient();
|
|
});
|
|
services.AddSingleton<RedisConnector>(x =>
|
|
{
|
|
var server = x.GetRequiredService<MatchServerService>();
|
|
return server.MatchServerLogic.getRedisConnector();
|
|
});
|
|
services.AddSingleton<IDatabase>(x =>
|
|
{
|
|
var server = x.GetRequiredService<MatchServerService>();
|
|
return server.MatchServerLogic.getRedisConnector().getDatabase();
|
|
});
|
|
services.AddSingleton<IMatchMq>(x =>
|
|
{
|
|
var server = x.GetRequiredService<MatchServerService>();
|
|
return server.MatchServerLogic.getRabbitMqConnector() as RabbitMq4Match;
|
|
});
|
|
services.AddTransient<GameInstanceRoomStorage>();
|
|
|
|
services.AddSingleton<IMatchMetaManager, MatchMetaManager>();
|
|
services.AddSingleton<MatchUserRepository>();
|
|
services.AddSingleton<MatchRoomRepository>();
|
|
services.AddSingleton<MatchService>();
|
|
|
|
// Factories
|
|
services.AddSingleton<IMatchGroupProcessorFactory, MatchGroupProcessorFactory>();
|
|
services.AddSingleton<IMatchProcessorFactory, MatchProcessorFactory>();
|
|
services.AddSingleton<IMatchRoomFactory, MatchRoomFactory>();
|
|
services.AddSingleton<InstanceRoomRepo>();
|
|
|
|
// 인던 서버 정보
|
|
services.AddSingleton<IServerInfoProvider>(x => x.GetRequiredService<MatchServerService>());
|
|
// 게임 이벤트 관리
|
|
services.AddSingleton<GameEventManager>();
|
|
|
|
// BackgroundService
|
|
services.AddHostedService<GameEventCheckWorker>();
|
|
}
|
|
|
|
public static void UseMatchServerService(this IHost app, string[] args)
|
|
{
|
|
var server = app.Services.GetRequiredService<MatchServerService>();
|
|
_ = server.Run(args);
|
|
server.WaitOnStart().Wait();
|
|
|
|
var serviceProvider = app.Services;
|
|
// Mq의 핸들러에 강제 주입을 위해 정의함
|
|
ServiceProviderHelper.SetServiceProvider(serviceProvider);
|
|
|
|
// 호스트 시작 종료 콜백 처리
|
|
serviceProvider.GetRequiredService<IHostApplicationLifetime>().ApplicationStarted.Register(() =>
|
|
{
|
|
var logger = Log.getLogger();
|
|
logger.info($"Match Server Service Started");
|
|
});
|
|
serviceProvider.GetRequiredService<IHostApplicationLifetime>().ApplicationStopped.Register(Log.shutdown);
|
|
}
|
|
}
|