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);
 }
예제 #3
0
        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;
            }
        }
예제 #4
0
		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);
		}
예제 #5
0
        }                                                  // Dummy constructor

        public ISteamMatchmakingRulesResponse(RulesResponded onRulesResponded, RulesFailedToRespond onRulesFailedToRespond, RulesRefreshComplete onRulesRefreshComplete)
        {
        }                                                                                                                                                                           // 0x00000001802A7060-0x00000001802A72D0