void FriendshipChanged(SteamPlayer player, EOnlinePlayerChangedFlags flags)
        {
            bool doCallbacks = false;
            bool dispose     = false;

            if ((flags & EOnlinePlayerChangedFlags.FriendAdded) != 0)
            {
                if (!_friends.Contains(player))
                {
                    player.AddRef();
                    _friends.Add(player);
                    _friendSet.Add(player.id.uuid);
                    doCallbacks = true;
                }
            }
            else if (_friends.Remove(player))
            {
                _friendSet.Remove(player.id.uuid);
                doCallbacks = true;
                dispose     = true;
            }

            if (doCallbacks)
            {
                for (int i = _friendChangedCallbacks.Count - 1; i >= 0; --i)
                {
                    _friendChangedCallbacks[i](player, flags);
                }
            }

            if (dispose)
            {
                player.Dispose();
            }
        }