private static void UpdateLobbyCallbackImpl(IntPtr ptr, Result result)
        {
            GCHandle           h        = GCHandle.FromIntPtr(ptr);
            UpdateLobbyHandler callback = (UpdateLobbyHandler)h.Target;

            h.Free();
            callback(result);
        }
        /// <summary>
        ///     Updates a lobby with data from the given transaction. You can call SetOwner() in this transaction.
        ///     <para>
        ///         This call has a rate limit of 10 updates per 5 seconds. If you fear you might hit that, it may be a good idea
        ///         to batch your lobby updates into transactions.
        ///     </para>
        /// </summary>
        /// <param name="lobbyId"></param>
        /// <param name="transaction"></param>
        /// <param name="callback"></param>
        public void UpdateLobby(long lobbyId, LobbyTransaction transaction, UpdateLobbyHandler callback)
        {
            GCHandle wrapped = GCHandle.Alloc(callback);

            Methods.UpdateLobby(methodsPtr, lobbyId, transaction.MethodsPtr, GCHandle.ToIntPtr(wrapped),
                                UpdateLobbyCallbackImpl);
            transaction.MethodsPtr = IntPtr.Zero;
        }