초기커밋
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
using ControlCenter.NamedPipe;
|
||||
using ServerControlCenter;
|
||||
|
||||
|
||||
namespace GameServer.Monitor.PacketHandler;
|
||||
|
||||
public class ForceStopServerMessageReceiver : NamedPipeReceiver<A2S_REQ_FORCE_STOP_SERVER>
|
||||
{
|
||||
public ForceStopServerMessageReceiver() { }
|
||||
|
||||
public override async Task Handle(A2S_REQ_FORCE_STOP_SERVER message, string message_id)
|
||||
{
|
||||
Log.getLogger().debug($"{nameof(ForceStopServerMessageReceiver)}: Receive - message_id[{message_id}] / message[{message}]");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var proud_net_listener = server_logic.getProudNetListener();
|
||||
await proud_net_listener.onLogoutUserAllByKick();
|
||||
await NamedPipeMonitor.ChangeServerStatus(ServerStatus.ReserveToStop);
|
||||
|
||||
var timer = new PeriodicTimer(TimeSpan.FromMilliseconds(1_000));
|
||||
while (true)
|
||||
{
|
||||
await timer.WaitForNextTickAsync();
|
||||
var can_stop = CheckServerStatusForStopAsync();
|
||||
if (can_stop)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
timer.Dispose();
|
||||
|
||||
// process 종료
|
||||
await server_logic.onStopServer();
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
private bool CheckServerStatusForStopAsync()
|
||||
{
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var proud_net_listener = GameServerApp.getServerLogic().getProudNetListener();
|
||||
var check_count = proud_net_listener.getEntityWithSessions().Count;
|
||||
Log.getLogger().debug($"server_name:[{server_logic.getServerName()}] / check_count: [{check_count}]");
|
||||
|
||||
//조건 1. 현재 Client Session 수 체크
|
||||
return check_count <= 0;
|
||||
|
||||
}
|
||||
}
|
||||
64
GameServer/Monitor/PacketHandler/StopServerPacketHandler.cs
Normal file
64
GameServer/Monitor/PacketHandler/StopServerPacketHandler.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using ControlCenter.NamedPipe;
|
||||
using ServerControlCenter;
|
||||
|
||||
|
||||
namespace GameServer.Monitor.PacketHandler;
|
||||
|
||||
public class StopServerMessageReceiver : NamedPipeReceiver<A2S_REQ_STOP_SERVER>
|
||||
{
|
||||
public StopServerMessageReceiver() { }
|
||||
|
||||
public override async Task Handle(A2S_REQ_STOP_SERVER message, string message_id)
|
||||
{
|
||||
Log.getLogger().debug($"{nameof(StopServerMessageReceiver)}: Receive - message_id[{message_id}] / message[{message}]");
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var is_success = await server_logic.onBlockAccountLogin();
|
||||
if (!is_success)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
await NamedPipeMonitor.ChangeServerStatus(ServerStatus.ReserveToStop);
|
||||
|
||||
var timer = new PeriodicTimer(TimeSpan.FromMilliseconds(1_000));
|
||||
while (true)
|
||||
{
|
||||
await timer.WaitForNextTickAsync();
|
||||
var can_stop = CheckServerStatusForStopAsync();
|
||||
if (can_stop)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
timer.Dispose();
|
||||
|
||||
// process 종료
|
||||
await server_logic.onStopServer();
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
private bool CheckServerStatusForStopAsync()
|
||||
{
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var check_count = server_logic.getProudNetListener().getEntityWithSessions().Count;
|
||||
Log.getLogger().debug($"server_name:[{server_logic.getServerName()}] / check_count: [{check_count}]");
|
||||
|
||||
//조건 1. 현재 Client Session 수 체크
|
||||
return check_count <= 0;
|
||||
|
||||
}
|
||||
}
|
||||
37
GameServer/Monitor/PacketHandler/UserAllKickPacketHandler.cs
Normal file
37
GameServer/Monitor/PacketHandler/UserAllKickPacketHandler.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
|
||||
using ServerControlCenter;
|
||||
using ControlCenter.NamedPipe;
|
||||
|
||||
|
||||
namespace GameServer.Monitor.PacketHandler;
|
||||
|
||||
public class UserAllKickMessageReceiver : NamedPipeReceiver<A2S_REQ_KICK_ALL_USER>
|
||||
{
|
||||
public UserAllKickMessageReceiver() { }
|
||||
|
||||
public override async Task Handle(A2S_REQ_KICK_ALL_USER message, string message_id)
|
||||
{
|
||||
Log.getLogger().info($"{nameof(UserAllKickMessageReceiver)}: Receive - message_id[{message_id}] / message[{message}]");
|
||||
|
||||
var msg = new S2A_ACK_KICK_ALL_USER { Result = new NAMED_PIPE_RESULT() };
|
||||
var proud_net_listener = GameServerApp.getServerLogic().getProudNetListener();
|
||||
await proud_net_listener.onLogoutUserAllByKick();
|
||||
|
||||
var send_success = await NamedPipeMonitor.SendMessageAsync<S2A_ACK_KICK_ALL_USER>(msg, message_id);
|
||||
if (NamedPipeResultCode.Success != send_success)
|
||||
{
|
||||
Log.getLogger().error($"Failed to send !!! : {msg.toBasicString()}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using ServerControlCenter;
|
||||
using ControlCenter.NamedPipe;
|
||||
using ControlCenter.NamedPipe.Extensions;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UserConnectionBlockCancelServerMessageReceiver : NamedPipeReceiver<A2S_REQ_USER_CONNECTION_BLOCK_CANCEL_SERVER>
|
||||
{
|
||||
public UserConnectionBlockCancelServerMessageReceiver() { }
|
||||
|
||||
public override async Task Handle(A2S_REQ_USER_CONNECTION_BLOCK_CANCEL_SERVER message, string message_id)
|
||||
{
|
||||
Log.getLogger().info($"{nameof(UserConnectionBlockCancelServerMessageReceiver)}: Receive - message_id[{message_id}] / message[{message}]");
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var msg = new S2A_ACK_USER_CONNECTION_BLOCK_CANCEL_SERVER { Result = new NAMED_PIPE_RESULT() };
|
||||
|
||||
var is_success = await server_logic.onCancelAccountLoginBlock();
|
||||
if (false == is_success)
|
||||
{
|
||||
msg.Result.SetFailMessage($"AtomicBool failed to CompareExchange with true !!!");
|
||||
}
|
||||
|
||||
NamedPipeMonitor.SetUserConnectionBlockStatus(server_logic.getAccountLoginBlockEnable().Value);
|
||||
var send_success = await NamedPipeMonitor.SendMessageAsync<S2A_ACK_USER_CONNECTION_BLOCK_CANCEL_SERVER>(msg, message_id);
|
||||
if (NamedPipeResultCode.Success != send_success)
|
||||
{
|
||||
Log.getLogger().error($"Failed to send !!! : {msg.toBasicString()}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using ServerControlCenter;
|
||||
using ControlCenter.NamedPipe;
|
||||
using ControlCenter.NamedPipe.Extensions;
|
||||
|
||||
|
||||
|
||||
namespace GameServer.Monitor.PacketHandler;
|
||||
|
||||
public class UserConnectionBlockServerMessageReceiver : NamedPipeReceiver<A2S_REQ_USER_CONNECTION_BLOCK_SERVER>
|
||||
{
|
||||
public UserConnectionBlockServerMessageReceiver() { }
|
||||
|
||||
public override async Task Handle(A2S_REQ_USER_CONNECTION_BLOCK_SERVER message, string message_id)
|
||||
{
|
||||
Log.getLogger().debug($"{nameof(UserConnectionBlockServerMessageReceiver)}: Receive - message_id[{message_id}] / message[{message}]");
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var msg = new S2A_ACK_USER_CONNECTION_BLOCK_SERVER { Result = new NAMED_PIPE_RESULT() };
|
||||
|
||||
var is_success = await server_logic.onBlockAccountLogin();
|
||||
if (false == is_success)
|
||||
{
|
||||
msg.Result.SetFailMessage($"AtomicBool failed to CompareExchange with true !!!");
|
||||
}
|
||||
|
||||
NamedPipeMonitor.SetUserConnectionBlockStatus(server_logic.getAccountLoginBlockEnable().Value);
|
||||
var send_success = await NamedPipeMonitor.SendMessageAsync<S2A_ACK_USER_CONNECTION_BLOCK_SERVER>(msg, message_id);
|
||||
if (NamedPipeResultCode.Success != send_success)
|
||||
{
|
||||
Log.getLogger().error($"Failed to send !!! : {msg.toBasicString()}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user