Пример #1
0
        static async Task ScrapeForAccountCharacter(int accountIndex, int characterIndex, InfluxDb influxClient, WatcherConfig config, HardwareStore hw, ISocketFactory sf)
        {
            var defaultTimeout = new TimeSpan(0, 0, 30);
            var client         = new APBClient.APBClient(config.ApbAccounts[accountIndex]["username"], config.ApbAccounts[accountIndex]["password"], hw, sf);

            await TimeoutAfter(client.Login(), defaultTimeout);

            Console.WriteLine("Logged In!");
            List <CharacterInfo> characters = client.GetCharacters();

            Console.WriteLine("Got characters!");
            List <WorldInfo> worlds = await TimeoutAfter(client.GetWorlds(), defaultTimeout);

            Console.WriteLine("Received worlds!");
            CharacterInfo       chosenCharacter = characters[characterIndex];
            FinalWorldEnterData worldEnterData  = await TimeoutAfter(client.EnterWorld(chosenCharacter.SlotNumber), defaultTimeout);

            Console.WriteLine("Connected to world!");
            Dictionary <int, DistrictInfo> districts = client.GetDistricts();

            Console.WriteLine("Got districts");
            List <InstanceInfo> instances = await TimeoutAfter(client.GetInstances(), defaultTimeout);

            Console.WriteLine("Recieved instances");

            int totalCriminals = 0;
            int totalEnforcers = 0;

            foreach (var instance in instances)
            {
                string name = "UNKNOWN";
                try
                {
                    name = districts[instance.DistrictUid].Name;
                }
                catch (Exception e)
                {
                }

                Console.WriteLine(String.Format("DistrictUID={0}, SDD={1:X}, Instance={2}, Threat={3}, Crims={4}, Enfs={5}, Status={6}, World={7} ({8})", instance.DistrictUid, districts[instance.DistrictUid].DistrictInstanceTypeSdd, instance.InstanceNum, instance.Threat, instance.Criminals, instance.Enforcers, instance.DistrictStatus, chosenCharacter.WorldUID, name));

                totalCriminals += instance.Criminals;
                totalEnforcers += instance.Enforcers;

                var point = BuildPoint(instance, districts[instance.DistrictUid], chosenCharacter);
                var resp  = await influxClient.WriteAsync("apb", point);
            }

            var aggPoint = BuildAggregatePoint(chosenCharacter.WorldUID, instances.Count, totalEnforcers, totalCriminals);
            var resp2    = await influxClient.WriteAsync("apb", aggPoint);

            client.Disconnect();
        }
Пример #2
0
        static void DistrictTest()
        {
            WatcherConfig config;

            using (var configReader = File.OpenText("watcher_conf.yml"))
            {
                var deserializer = new Deserializer();
                config = deserializer.Deserialize <WatcherConfig>(configReader);
            }

            HardwareStore hw;

            using (TextReader reader = File.OpenText("hw.yml"))
            {
                hw = new HardwareStore(reader);
            }

            ISocketFactory sf = new ProxySocketFactory("127.0.0.1", 9150, null, null);

            Task.Run(async() =>
            {
                var client = new APBClient.APBClient(config.ApbAccounts[3]["username"], config.ApbAccounts[3]["password"], hw, sf);
                await client.Login();
                Console.WriteLine("Logged In!");
                List <CharacterInfo> characters = client.GetCharacters();
                Console.WriteLine("Got characters!");
                List <WorldInfo> worlds = await client.GetWorlds();
                Console.WriteLine("Received worlds!");
                CharacterInfo chosenCharacter      = characters[0];
                FinalWorldEnterData worldEnterData = await client.EnterWorld(chosenCharacter.SlotNumber);
                Console.WriteLine("Connected to world!");
                Dictionary <int, DistrictInfo> districts = client.GetDistricts();
                Console.WriteLine("Got districts");
                List <InstanceInfo> instances = await client.GetInstances();
                Console.WriteLine("Recieved instances");

                foreach (var instance in instances)
                {
                    string name = "UNKNOWN";
                    try
                    {
                        name = districts[instance.DistrictUid].Name;
                    }
                    catch (Exception e)
                    {
                    }

                    Console.WriteLine(
                        String.Format(
                            "DistrictUID={0}, SDD={1:X}, Instance={2}, Threat={3}, Crims={4}, Enfs={5}, Status={6}, World={7} ({8})",
                            instance.DistrictUid, districts[instance.DistrictUid].DistrictInstanceTypeSdd,
                            instance.InstanceNum, instance.Threat, instance.Criminals, instance.Enforcers,
                            instance.DistrictStatus, chosenCharacter.WorldUID, name));
                }

                var instanceToJoin = (from instance in instances
                                      where instance.DistrictStatus == 0 && instance.Threat == 1
                                      select instance).OrderBy(s => s.Criminals + s.Enforcers).First();

                Console.WriteLine(
                    String.Format(
                        "JOINING DistrictUID={0}, SDD={1:X}, Instance={2}, Threat={3}, Crims={4}, Enfs={5}, Status={6}, World={7}",
                        instanceToJoin.DistrictUid, districts[instanceToJoin.DistrictUid].DistrictInstanceTypeSdd,
                        instanceToJoin.InstanceNum, instanceToJoin.Threat, instanceToJoin.Criminals, instanceToJoin.Enforcers,
                        instanceToJoin.DistrictStatus, chosenCharacter.WorldUID));

                DistrictEnterInfo enterInfo = await client.JoinInstance(instanceToJoin);

                client.Disconnect();
            }).Wait();
        }
Пример #3
0
 private void HandleWorldEnterSuccess(object sender, FinalWorldEnterData e)
 {
     State = ClientState.WorldServerWorldEnterComplete;
     ActiveTask?.SetResult(e);
 }