50 lines
No EOL
1.8 KiB
C#
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);
|
|
}
|
|
}
|
|
} |