Files
caliverse_server/GameServer/Global/Channel/ChannelManager.cs
2025-05-01 07:20:41 +09:00

75 lines
1.8 KiB
C#

using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
namespace GameServer;
public class GameChannel
{
public Int32 channel = 0;
public Int32 trafficlevel = 0;
}
public class ChannelManager
{
public List<GameChannel> m_channels = new List<GameChannel>(1000);
public ChannelManager() { }
public async Task updateChannels()
{
m_channels.Clear();
var server_logic = GameServerApp.getServerLogic();
(var result, var server_infos) = await server_logic.getServerInfosByServerType(ServerType.Channel, server_logic.getWorldId());
foreach (var channel in server_infos)
{
if (GameServerApp.getServerLogic().getWorldId() != channel.WorldId) continue;
GameChannel gameChannel = new GameChannel();
gameChannel.channel = channel.Channel;
var curr_users = channel.Sessions + channel.Reservation + channel.ReturnCount;
gameChannel.trafficlevel = getTrafficLevel(curr_users, channel.Capacity);
m_channels.Add(gameChannel);
}
}
public List<GameChannel> getWholeChannels()
{
return m_channels;
}
public int getTrafficLevel(int CurUser, int MaxUser)
{
double trafficPercent = (double)CurUser / (double)MaxUser * (double)100;
int trafficLevel = 0;
if (0 <= trafficPercent && trafficPercent < 80.0f)
{
trafficLevel = 0;
}
else if (80.0f <= trafficPercent && trafficPercent < 100.0f)
{
trafficLevel = 1;
}
else if (100.0f <= trafficPercent)
{
trafficLevel = 2;
}
return trafficLevel;
}
}