provide a way to grab the laggy clients

This commit is contained in:
Chris Forbes
2011-03-12 22:55:40 +13:00
parent 606873a09e
commit 82dea40261
2 changed files with 24 additions and 7 deletions

View File

@@ -34,12 +34,17 @@ namespace OpenRA.Network
frameData.Add( clientId, orders ); frameData.Add( clientId, orders );
} }
public bool IsReadyForFrame( int frame ) public bool IsReadyForFrame(int frame)
{ {
var frameData = framePackets.GetOrAdd( frame ); return !ClientsNotReadyForFrame(frame).Any();
return ClientsPlayingInFrame( frame ) }
.All( client => frameData.ContainsKey( client ) );
} public IEnumerable<int> ClientsNotReadyForFrame(int frame)
{
var frameData = framePackets.GetOrAdd(frame);
return ClientsPlayingInFrame(frame)
.Where(client => !frameData.ContainsKey(client));
}
public IEnumerable<ClientOrder> OrdersForFrame( World world, int frame ) public IEnumerable<ClientOrder> OrdersForFrame( World world, int frame )
{ {

View File

@@ -155,7 +155,19 @@ namespace OpenRA.Network
public bool IsReadyForNextFrame public bool IsReadyForNextFrame
{ {
get { return NetFrameNumber >= 1 && frameData.IsReadyForFrame( NetFrameNumber ); } get { return NetFrameNumber >= 1 && frameData.IsReadyForFrame( NetFrameNumber ); }
} }
static readonly IEnumerable<Session.Client> NoClients = new Session.Client[] {};
public IEnumerable<Session.Client> GetClientsNotReadyForNextFrame
{
get
{
return NetFrameNumber >= 1
? frameData.ClientsNotReadyForFrame(NetFrameNumber)
.Select(a => LobbyInfo.ClientWithIndex(a))
: NoClients;
}
}
public void Tick() public void Tick()
{ {