public ISteamMatchmakingServerListResponse(ISteamMatchmakingServerListResponse.ServerResponded onServerResponded, ISteamMatchmakingServerListResponse.ServerFailedToRespond onServerFailedToRespond, ISteamMatchmakingServerListResponse.RefreshComplete onRefreshComplete) { if (onServerResponded == null || onServerFailedToRespond == null || onRefreshComplete == null) { throw new ArgumentNullException(); } this.m_ServerResponded = onServerResponded; this.m_ServerFailedToRespond = onServerFailedToRespond; this.m_RefreshComplete = onRefreshComplete; this.m_VTable = new ISteamMatchmakingServerListResponse.VTable { m_VTServerResponded = new ISteamMatchmakingServerListResponse.InternalServerResponded(this.InternalOnServerResponded), m_VTServerFailedToRespond = new ISteamMatchmakingServerListResponse.InternalServerFailedToRespond(this.InternalOnServerFailedToRespond), m_VTRefreshComplete = new ISteamMatchmakingServerListResponse.InternalRefreshComplete(this.InternalOnRefreshComplete) }; this.m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(ISteamMatchmakingServerListResponse.VTable))); Marshal.StructureToPtr(this.m_VTable, this.m_pVTable, false); this.m_pGCHandle = GCHandle.Alloc(this.m_pVTable, GCHandleType.Pinned); }