public ISteamMatchmakingRulesResponse(ISteamMatchmakingRulesResponse.RulesResponded onRulesResponded, ISteamMatchmakingRulesResponse.RulesFailedToRespond onRulesFailedToRespond, ISteamMatchmakingRulesResponse.RulesRefreshComplete onRulesRefreshComplete)
 {
     if (onRulesResponded == null || onRulesFailedToRespond == null || onRulesRefreshComplete == null)
     {
         throw new ArgumentNullException();
     }
     this.m_RulesResponded       = onRulesResponded;
     this.m_RulesFailedToRespond = onRulesFailedToRespond;
     this.m_RulesRefreshComplete = onRulesRefreshComplete;
     this.m_VTable = new ISteamMatchmakingRulesResponse.VTable
     {
         m_VTRulesResponded       = new ISteamMatchmakingRulesResponse.InternalRulesResponded(this.InternalOnRulesResponded),
         m_VTRulesFailedToRespond = new ISteamMatchmakingRulesResponse.InternalRulesFailedToRespond(this.InternalOnRulesFailedToRespond),
         m_VTRulesRefreshComplete = new ISteamMatchmakingRulesResponse.InternalRulesRefreshComplete(this.InternalOnRulesRefreshComplete)
     };
     this.m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(ISteamMatchmakingRulesResponse.VTable)));
     Marshal.StructureToPtr(this.m_VTable, this.m_pVTable, false);
     this.m_pGCHandle = GCHandle.Alloc(this.m_pVTable, GCHandleType.Pinned);
 }