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,11 +34,16 @@ namespace OpenRA.Network
frameData.Add( clientId, orders );
}
public bool IsReadyForFrame( int frame )
public bool IsReadyForFrame(int frame)
{
var frameData = framePackets.GetOrAdd( frame );
return ClientsPlayingInFrame( frame )
.All( client => frameData.ContainsKey( client ) );
return !ClientsNotReadyForFrame(frame).Any();
}
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 )

View File

@@ -157,6 +157,18 @@ namespace OpenRA.Network
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()
{
if( !IsReadyForNextFrame )