void OnConnectionRemoved(INetworkInterfaceConnection oldConnection)
    {
        Log.Info("[PlayerRepertoireServer] OnConnectionRemoved: " + oldConnection.Id);
        _newConnectionsNotYetPlayers.Remove(oldConnection);

        int playerIndex = _playerConnections.IndexOf(oldConnection);

        if (playerIndex == -1)
        {
            // The connection was not yet a valid player. Nothing else to do
            return;
        }

        PlayerId playerId = _players[playerIndex].PlayerId;

        // destroy
        DestroyPlayer(playerId);

        // remove connection
        _playerConnections.RemoveAt(playerIndex);


        // Notify other players
        NetMessagePlayerLeft playerLeftMessage = new NetMessagePlayerLeft()
        {
            playerId = playerId
        };

        _serverSession.SendNetMessage(playerLeftMessage, _playerConnections);
        Log.Info("[PlayerRepertoireServer] sent NetMessagePlayerLeft");
    }
 void OnMsg_NetMessagePlayerLeft(NetMessagePlayerLeft message, INetworkInterfaceConnection source)
 {
     if (SystemReady)
     {
         Log.Info("[PlayerRepertoireClient] OnMsg_NetMessagePlayerLeft");
         _players.RemoveFirst((p) => p.PlayerId == message.playerId);
     }
     else
     {
         Log.Info("[PlayerRepertoireClient] *Deferring* OnMsg_NetMessagePlayerLeft");
         _deferredNetMessages.Enqueue(message);
     }
 }