You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
3.1 KiB

1 month ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Text;
using Sog;
namespace World
{
//排队登录时间(秒)
public enum WaitInLineTimeType
{
LoginDisconTime = 60, //登录下线后,60秒内重新连接登录不需要排队
WaitDisconTime = 60, //本身就在排队中,断线或离开后,60秒内不用重新排队
}
public class WaitInLinePlayerTableDataOp : BaseReloadableService
{
private WaitInLinePlayerTableData m_table;
public override int GetServiceType()
{
return WorldServiceType.WaitInLinePlayerTableOp;
}
//销毁的时候置空
public override void Dispose()
{
m_table = null;
}
public WaitInLinePlayerTableDataOp(WaitInLinePlayerTableData playerTable)
{
m_table = playerTable;
}
//获取等待玩家的数量
public int GetWaitInLlineLoginPlayerCount()
{
return m_table.m_waitInLinePlayer.Count;
}
//根据uid获取玩家
public WaitInLlineLoginPlayer GetWaitInLlineLoginPlayerByUid(long uid)
{
return m_table.m_waitInLinePlayer.FirstOrDefault(p => p.UserID == uid);
}
//获取第一个等待的玩家
public WaitInLlineLoginPlayer GetFirstWaitInLlineLoginPlayer()
{
if (GetWaitInLlineLoginPlayerCount() > 0)
{
return m_table.m_waitInLinePlayer.First();
}
return null;
}
//获取某个玩家后面的第一个玩家
public WaitInLlineLoginPlayer GetNextAfterPlayer(long uid)
{
bool isThis = false;
foreach (var waitPlayer in m_table.m_waitInLinePlayer)
{
if (isThis)
{
return waitPlayer;
}
if (waitPlayer.UserID == uid)
{
isThis = true;
}
}
return null;
}
//获取某个玩家前面还有多少玩家在等待
public int GetBeforeMeWaitPlayerCount(long uid)
{
int count = 0;
foreach (var waitPlayer in m_table.m_waitInLinePlayer)
{
if (waitPlayer.UserID == uid)
{
break;
}
count++;
}
return count;
}
public WaitInLlineLoginPlayer AddWaitInLlineLoginPlayer(long uid, long playersessionID)
{
var player = GetWaitInLlineLoginPlayerByUid(uid);
if (player == null)
{
player = new WaitInLlineLoginPlayer();
player.UserID = uid;
player.WaitBeginTime = WorldServerUtils.GetTimeSecond();
m_table.m_waitInLinePlayer.AddLast(player);
}
player.playersessionID = playersessionID;
player.BeginDisConTime = 0;
return player;
}
public bool DeleteWaitLoginPlayer(WaitInLlineLoginPlayer player)
{
return m_table.m_waitInLinePlayer.Remove(player);
}
//删除一个玩家,并返回这个玩家的下个玩家
public WaitInLlineLoginPlayer DeletePlayerReturnNext(WaitInLlineLoginPlayer player)
{
var nextPlayer = GetNextAfterPlayer(player.UserID);
m_table.m_waitInLinePlayer.Remove(player);
return nextPlayer;
}
}
}