public ISteamMatchmakingRulesResponse(RulesResponded onRulesResponded, RulesFailedToRespond onRulesFailedToRespond, RulesRefreshComplete onRulesRefreshComplete) { m_RulesResponded = onRulesResponded; m_RulesFailedToRespond = onRulesFailedToRespond; m_RulesRefreshComplete = onRulesRefreshComplete; m_VTable = new VTable() { m_VTRulesResponded = InternalOnRulesResponded, m_VTRulesFailedToRespond = InternalOnRulesFailedToRespond, m_VTRulesRefreshComplete = InternalOnRulesRefreshComplete }; m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VTable))); Marshal.StructureToPtr(m_VTable, m_pVTable, false); m_pGCHandle = GCHandle.Alloc(m_pVTable, GCHandleType.Pinned); }
public ISteamMatchmakingRulesResponse(RulesResponded onRulesResponded, RulesFailedToRespond onRulesFailedToRespond, RulesRefreshComplete onRulesRefreshComplete) { if (onRulesResponded == null || onRulesFailedToRespond == null || onRulesRefreshComplete == null) { throw new ArgumentNullException(); } m_RulesResponded = onRulesResponded; m_RulesFailedToRespond = onRulesFailedToRespond; m_RulesRefreshComplete = onRulesRefreshComplete; m_VTable = new VTable { m_VTRulesResponded = new InternalRulesResponded(InternalOnRulesResponded), m_VTRulesFailedToRespond = new InternalRulesFailedToRespond(InternalOnRulesFailedToRespond), m_VTRulesRefreshComplete = new InternalRulesRefreshComplete(InternalOnRulesRefreshComplete) }; m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VTable))); Marshal.StructureToPtr(m_VTable, m_pVTable, false); m_pGCHandle = GCHandle.Alloc(m_pVTable, GCHandleType.Pinned); }
public async Task <ServerDataWrap> Fetch(CancellationToken ct) { var t = RulesRefreshComplete .Take(1) .TakeUntil(Observable.Timer(TimeSpan.FromSeconds(3)).Void() .Merge(RulesFailedToRespond.Void()).Take(1)) .Select(x => x.ServerData) .SingleAsync() .ToTask(ct); await _srs.Do( srs => srs.RequestServerRules( BitConverter.ToInt32(_ep.Address.GetAddressBytes().Reverse().ToArray(), 0), _ep.Port)) .ConfigureAwait(false); try { return(await t); } catch (Exception) { await _srs.Do(src => src.CancelRequest()).ConfigureAwait(false); throw; } }
public ISteamMatchmakingRulesResponse(RulesResponded onRulesResponded, RulesFailedToRespond onRulesFailedToRespond, RulesRefreshComplete onRulesRefreshComplete) { if (onRulesResponded == null || onRulesFailedToRespond == null || onRulesRefreshComplete == null) { throw new ArgumentNullException(); } m_RulesResponded = onRulesResponded; m_RulesFailedToRespond = onRulesFailedToRespond; m_RulesRefreshComplete = onRulesRefreshComplete; m_VTable = new VTable() { m_VTRulesResponded = InternalOnRulesResponded, m_VTRulesFailedToRespond = InternalOnRulesFailedToRespond, m_VTRulesRefreshComplete = InternalOnRulesRefreshComplete }; m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VTable))); Marshal.StructureToPtr(m_VTable, m_pVTable, false); m_pGCHandle = GCHandle.Alloc(m_pVTable, GCHandleType.Pinned); }
} // Dummy constructor public ISteamMatchmakingRulesResponse(RulesResponded onRulesResponded, RulesFailedToRespond onRulesFailedToRespond, RulesRefreshComplete onRulesRefreshComplete) { } // 0x00000001802A7060-0x00000001802A72D0