75 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|