I'm trying to setup a very simple multiplayer game that allows some users to join and walk around. The game is 2D and the players will have a position, the direction they are looking in (it's a top-down game) and their animation frame index (so they can be animated for all clients). This is my game loop that I have at the moment:

```
private void run()
{
	long lastTick = 0;
	long tickDelay = 33;
	int tps = 0;
	int ticks = 0;
	long lastTickCount = 0;

	List<Connection> toRemove = new List<Connection>();

	while (!shouldStop)
	{
		lock (connections)
		{
			if (connections.Count != 0)
			{
				foreach (Connection connection in connections)
				{
					if (!connection.IsInitialized)
					{
						if (connection.Initialize())
						{
							BroadcastChatMessage(connection.Username + " has joined");
						}
						else
						{
							Console.WriteLine("Disconnected " + connection.IP + ": failed to authenticate");
							connection.Close();
							toRemove.Add(connection);
						}
					}
					else
					{
						int cmd = connection.ReceiveCommand();

						if (cmd == -1)
						{
							BroadcastChatMessage(connection.Username + " has left");
							connection.Close();
							toRemove.Add(connection);
						}
					}
				}
			}

			if (toRemove.Count != 0)
			{
				foreach (Connection connection in toRemove)
				{
					connections.Remove(connection);
				}

				toRemove.Clear();
			}
		}

		ticks++;
		long now = CurrentTimeMillis;

		if (now - lastTickCount >= 1000)
		{
			lastTickCount = now;
			tps = ticks;
			ticks = 0;
		}

		int connectionsCount = 0;

		lock (connections)
		{
			connectionsCount = connections.Count;
		}

		Console.Title = "Top-Down Multiplayer Server [TPS: " + tps + ", Connected: " + connectionsCount + "]";

		lastTick = CurrentTimeMillis;
		Thread.Sleep(20);

		while (CurrentTimeMillis - lastTick <= tickDelay) { }
	}
}
```

I have a simple mechanism that makes the server run at 30 ticks per second with a `Thread.Sleep` to free up CPU. Should I be processing data from all the clients in the same thread like this? What should the ticks per second be determined by? Am I on the right track with this loop?

P.S: In the future I would process the game after I handle connections and before I do `ticks++` (after I receive client data and before I count the ticks per second).