示例#1
0
        public async Task Test3()
        {
            SetupNlog.Initialize("bla");
            MappingExtensions.Mapper = new MapperConfiguration(cfg => {
                cfg.AddProfile <ArmaServerProfile>();
            }).CreateMapper();

            var f  = new SteamSession.SteamSessionFactory();
            var id = (uint)SteamGameIds.Arma2Oa;

            LockedWrapper.callFactory = new SafeCallFactory(); // workaround for accessviolation errors
            var c = await
                    f.Do(id, SteamHelper.Create().SteamPath,
                         async() => {
                using (var scheduler = new EventLoopScheduler()) {
                    using (var obs2 = new Subject <ArmaServerInfoModel>()) {
                        var s = obs2.Synchronize()
                                .ObserveOn(scheduler)
                                .Buffer(24)
                                //.Do(x => Console.WriteLine("r" + x.ToList<ServerInfoModel>()))
                                .SelectMany(x => x)
                                .Count()
                                .ToTask();
                        var c2 =
                            await
                            SteamServers.GetServers(f, true,
                                                    ServerFilterBuilder.Build().FilterByAppId(id).FilterByDedicated().Value,
                                                    obs2.OnNext)
                            .ConfigureAwait(false);
                        obs2.OnCompleted();
                        return(new BatchResult(await s));
                    }
                }
            }).ConfigureAwait(false);
        }
示例#2
0
 public Task <BatchResult> Handle(TMessage message, CancellationToken ct)
 {
     Message = message;
     Builder = ServerFilterBuilder.FromValue(Message.Filter);
     Ct      = ct;
     return(HandleInternal());
 }
示例#3
0
        async Task <BatchResult> GetServersFromSteam(uint appId, IEnumerable <IPEndPoint> addresses,
                                                     ServerQueryOptions options, Action <Server> act)
        {
            var cvt = GetConverter(options.InclExtendedDetails);
            var r   = await Task.WhenAll(addresses.Batch(15).Select(b => {
                // Ports adjusted because it expects the Connection Port!
                var filter =
                    ServerFilterBuilder.Build()
                    .FilterByAddresses(b.Select(x => new IPEndPoint(x.Address, x.Port - 1)).ToList());
                return(_steamHelperService.GetServers <ArmaServerInfoModel>(appId,
                                                                            new GetServers {
                    Filter = filter.Value,
                    IncludeDetails = options.InclExtendedDetails,
                    IncludeRules = options.InclExtendedDetails,
                    PageSize = 1
                }, CancellationToken.None, x => {
                    foreach (var s in x.Select(cvt))
                    {
                        act(s);
                    }
                }));
            }));

            return(new BatchResult(r.Sum(x => x.Count)));
        }
示例#4
0
        public async Task Test()
        {
            var q =
                new SourceMasterQuery(ServerFilterBuilder.Build().FilterByGame("arma3").FilterByDedicated().Value);
            var servers = await q.GetParsedServers(CancellationToken.None).ConfigureAwait(false);

            Console.WriteLine(string.Join(",", servers));
        }
示例#5
0
        public async Task <BatchResult> GetServers(IServerQueryFactory factory, CancellationToken cancelToken,
                                                   Action <List <IPEndPoint> > act)
        {
            var master = new SourceMasterQuery(ServerFilterBuilder.Build().FilterByGame("starbound").Value);

            return(new BatchResult(await master.GetParsedServersObservable(cancelToken)
                                   .Do(x => act(x.Items))
                                   .SelectMany(x => x.Items)
                                   .Count()));
        }
示例#6
0
        public static ServerFilterWrap GetServerFilterWrap(this ServerFilterBuilder This)
        {
            var f = new ServerFilterWrap();

            foreach (var d in This.Value)
            {
                f.AddFilter(d.Item1, d.Item2);
            }

            return(f);
        }
示例#7
0
        public async Task <BatchResult> GetServerAddresses(uint appId, Action <List <IPEndPoint> > act,
                                                           CancellationToken cancelToken)
        {
            var f = ServerFilterBuilder.Build()
                    .FilterByGame("arma3");
            var master = new SourceMasterQuery(f.Value);

            return(new BatchResult(await master.GetParsedServersObservable(cancelToken)
                                   .Do(x => act(x.Items))
                                   .SelectMany(x => x.Items)
                                   .Count()));
        }
示例#8
0
        public async Task Test2()
        {
            var s = new SteamServiceSessionSignalR();
            await s.Start((uint)SteamGameIds.Arma2Oa, new Uri("http://127.0.0.1:55556")).ConfigureAwait(false);

            var a2     = "arma2arrowpc";
            var a3     = "arma3";
            var filter = ServerFilterBuilder.Build().FilterByAppId((uint)SteamGameIds.Arma3).Value;
            await
            s.GetServers <ArmaServerInfoModel>(
                new GetServers { Filter = filter, IncludeDetails = true },
                list => {
                Console.WriteLine(string.Join(",", list.Select(x => x.QueryEndPoint)));
            }, CancellationToken.None)
            .ConfigureAwait(false);
        }
示例#9
0
        public async Task GetServers()
        {
            LoggingSetup.Setup("Tests");
            LockedWrapper.callFactory = new SafeCallFactory(); // workaround for accessviolation errors
            var serverFilterBuilder = ServerFilterBuilder.Build();

            serverFilterBuilder.FilterByAddresses(new[] {
                new IPEndPoint(IPAddress.Parse("5.189.150.147"), 2302),
                new IPEndPoint(IPAddress.Parse("5.189.136.56"), 2302),
                new IPEndPoint(IPAddress.Parse("80.241.208.192"), 2302)
            });
            var s = await
                    SteamActions.PerformArmaSteamAction(
                steamApi => PerformAction(steamApi, serverFilterBuilder.GetServerFilterWrap()), (uint)SteamGameIds.Arma3,
                new SteamSession.SteamSessionFactory()).ConfigureAwait(false);

            s.Count.Should().Be(3);
            var json = s.ToJson(true);

            Console.WriteLine(json);
            @"C:\temp\crawl\arma-servers.json".ToAbsoluteFilePath().WriteText(json);
        }
 public static Task <IObservable <ArmaServerInfo> > GetServersInclDetails2(this ServerBrowser This,
                                                                           CancellationToken ct,
                                                                           ServerFilterBuilder filter, bool inclRules)
 => This.GetServersInclDetails(ct, filter.GetServerFilterWrap(), inclRules);
 public static Task <IObservable <ArmaServerInfo> > GetServers2(this ServerBrowser This, CancellationToken ct,
                                                                ServerFilterBuilder filter) => This.GetServers(ct, filter.GetServerFilterWrap());
示例#12
0
 public ArmaServer(ArmaServerInfo info, ServerInfoRulesFetcher fetcher)
 {
     Info     = info;
     _fetcher = fetcher;
     _filter  = ServerFilterBuilder.Build().FilterByAddress(info.ConnectionEndPoint).GetServerFilterWrap();
 }
 public static Task<IObservable<ArmaServerInfo>> GetServersInclDetails2(this ServerBrowser This,
         CancellationToken ct,
         ServerFilterBuilder filter, bool inclRules)
     => This.GetServersInclDetails(ct, filter.GetServerFilterWrap(), inclRules);
 public static Task<IObservable<ArmaServerInfo>> GetServers2(this ServerBrowser This, CancellationToken ct,
     ServerFilterBuilder filter) => This.GetServers(ct, filter.GetServerFilterWrap());