public void Update(GameTime time)
{
// new clients
if (listener.Pending())
{
if (network.GameState == Network.GameStateT.InLobby)
{
// add new player in lobby
var client = listener.AcceptTcpClient();
var connection = new Connection(client, nextId++);
connection.ObjectReceived += OnData;
connections.Add(connection);
network.RaiseMessageEvent(NetworkMessage.MessageType.NewClient);
// update lobby list
this.UpdateLobbyList();
}
else
{
//TODO: Re-add Players that lost connection
}
}
// receive data
foreach (var c in connections)
{
c.ReadUpdates();
}
if (network.GameState == Network.GameStateT.InGame && Ballz.The().Match.State == SessionState.Running)
{
var now = DateTime.Now;
if ((now - LastUpdate).TotalSeconds > 1.0 / TicksPerSecond)
{
foreach (var e in Ballz.The().Match.World.Entities)
{
Broadcast(e);
}
LastUpdate = DateTime.Now;
}
}
}