/// <summary> /// Get the player info from game's databse /// </summary> static private async Task <NameOutfitFactionRecord> FetchPlayerInfo(JsonString id) { JsonObject json; int retry = 0; // try to resolve player info from database at most 3 times before returning unresolved record do { string uri = $@"http://census.daybreakgames.com/s:{PS2APIConstants.ServiceId}/get/ps2/character_name/?character_id={id.InnerString}&c:join=character^inject_at:character^show:faction_id(outfit_member_extended^inject_at:outfit^show:alias%27name)"; json = await PS2APIUtils.RestAPIRequestClient(uri); } while (json == null && ++retry < 3); NameOutfitFactionRecord record = new NameOutfitFactionRecord(); if ((record.Name = (json?["character_name_list"]?[0]?["name"]?["first"] as JsonString)?.InnerString) == null) { record.Name = $"<Character:{id.InnerString}>"; } if ((record.Faction = (json?["character_name_list"]?[0]?["character"]?["faction_id"] as JsonString)?.InnerString) == null) { record.Faction = $"<CharacterFaction:{id.InnerString}>"; } // no outfit is possible value record.Outfit = (json?["character_name_list"]?[0]?["character"]?["outfit"]?["alias"] as JsonString)?.InnerString; record.Id = id; return(record); }
public OutfitMembersTracker(string alias, string logfile) { OutfitAlias = new JsonString(alias); token = tokenSource.Token; // get information about outfit members string outfitQuerry = $@"https://census.daybreakgames.com/s:{PS2APIConstants.ServiceId}/get/ps2/outfit?alias_lower={alias.ToLower()}&c:show=outfit_id,name&c:join=type:outfit_member^on:outfit_id^list:1^inject_at:members^show:character_id%27rank%27rank_ordinal(character^show:name^inject_at:character(characters_online_status^inject_at:onlineStatus^hide:character_id))"; Console.WriteLine("Outfit data request sent"); var outfitTask = PS2APIUtils.RestAPIRequestClient(outfitQuerry); int onlineCount = 0; JsonObject response = outfitTask.GetAwaiter().GetResult(); if (response == null) { throw new Exception("Outfit data request failed"); } Console.WriteLine("Outfit data response received"); try { JsonArray found = (JsonArray)response["outfit_list"]; if (found == null) { throw new JsonInvalidAccessException("Outfit list wrong format?\n" + response.ToString()); } if (found.Length > 0) { var outfit = found[0]; OutfitId = (JsonString)outfit["outfit_id"]; OutfitName = (JsonString)outfit["name"]; JsonArray members = (JsonArray)outfit["members"]; for (int i = 0; i < members.Length; i++) { var id = (JsonString)members?[i]?["character_id"]; if (id == null || id.InnerString == "0") { continue; } var name = (JsonString)members?[i]?["character"]?["name"]?["first"]; var rank = (JsonString)members?[i]?["rank"]; var online = (JsonString)members?[i]?["character"]?["onlineStatus"]?["online_status"]; Members.Add(new Member() { Name = name, Rank = rank, Id = id }); if (online != null && online.InnerString != "0") { onlineCount++; } } } else { throw new Exception($"Outfit with tag '{alias}' not found!"); } } catch (InvalidCastException) { throw new JsonInvalidAccessException("Could not extract outfit info"); } Console.WriteLine($"Outfit ID: {OutfitId}"); Console.WriteLine($"Outfit Name: {OutfitName}"); Console.WriteLine($"Total members registered: {Members.Count}"); Console.WriteLine($"Online members: {onlineCount}"); }