server-master/srcs/GameChannel/Services/GameChannelStopService.cs
2026-02-10 18:21:30 +01:00

50 lines
No EOL
1.8 KiB
C#

// WingsEmu
//
// Developed by NosWings Team
using System.Threading.Tasks;
using WingsAPI.Communication.ServerApi;
using WingsAPI.Communication.ServerApi.Protocol;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Managers;
using WingsEmu.Packets.Enums.Chat;
namespace GameChannel.Services
{
public class GameChannelStopService
{
private readonly IGameLanguageService _gameLanguage;
private readonly SerializableGameServer _gameServer;
private readonly IServerApiService _serverApiService;
private readonly IServerManager _serverManager;
private readonly ISessionManager _sessionManager;
public GameChannelStopService(ISessionManager sessionManager, IServerApiService serverApiService, IServerManager serverManager, SerializableGameServer gameServer,
IGameLanguageService gameLanguage)
{
_sessionManager = sessionManager;
_serverApiService = serverApiService;
_serverManager = serverManager;
_gameServer = gameServer;
_gameLanguage = gameLanguage;
}
public async Task StopAsync()
{
await _serverApiService.UnregisterWorldServer(new UnregisterWorldServerRequest
{
ChannelId = _gameServer.ChannelId
});
_serverManager.PutIdle();
await _sessionManager.BroadcastAsync(async session =>
{
string message = _gameLanguage.GetLanguageFormat(GameDialogKey.INFORMATION_SHOUTMESSAGE_SHUTDOWN_SEC, session.UserLanguage, 15);
return session.GenerateMsgPacket(message, MsgMessageType.MiddleYellow);
});
await _sessionManager.DisconnectAllAsync();
await Task.Delay(15000);
}
}
}