Skip to content

Commit

Permalink
Merge pull request #17 from GavinPower747/development
Browse files Browse the repository at this point in the history
1.0 Release
  • Loading branch information
GavinPower747 authored Apr 2, 2018
2 parents 57010eb + ffa7c26 commit 5ae5d82
Show file tree
Hide file tree
Showing 15 changed files with 171 additions and 90 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ From within Visual Studio:
4. Click on the *Browse* tab and search for "Pubg-DotNet".
5. Click on the Pubg-DotNet package, select the appropriate version in the right-tab and click *Install*.

# Contributions
All contributions are welcome, feel free to create an issue to suggest improvements/missing features or just submit a PR to our Development branch with any work you want to contribute yourself.

## Configuring Api Key

There are a number of ways to configure your api key. You can choose any of the below methods based on your circumstances, you only need to follow one of the examples below.
Expand Down
11 changes: 11 additions & 0 deletions src/pubg-dotnet/Exceptions/PubgNotFoundException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System.Net;

namespace Pubg.Net.Exceptions
{
public class PubgNotFoundException : PubgException
{
private const string DefaultErrorMessage = "Unable to find specified resource";

public PubgNotFoundException() : base(DefaultErrorMessage, HttpStatusCode.NotFound) { }
}
}
12 changes: 11 additions & 1 deletion src/pubg-dotnet/Infrastructure/HttpRequestor.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
using Pubg.Net.Exceptions;
using System;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

Expand All @@ -13,7 +17,12 @@ internal static class HttpRequestor

static HttpRequestor()
{
HttpClient = new HttpClient();
var clientHandler = new HttpClientHandler
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};

HttpClient = new HttpClient(clientHandler);

var timeout = PubgApiConfiguration.GetHttpTimeout();

Expand Down Expand Up @@ -68,6 +77,7 @@ private static PubgException BuildException(HttpResponseMessage response, string
{
case HttpStatusCode.Unauthorized: return new PubgUnauthorizedException();
case HttpStatusCode.UnsupportedMediaType: return new PubgContentTypeException();
case HttpStatusCode.NotFound: return new PubgNotFoundException();
default:
var errors = ErrorMapper.MapErrors(responseContent);
return new PubgException("Errors have occured with your request", response.StatusCode, errors);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Linq;

namespace Pubg.Net.Infrastructure.JsonConverters
{
public class RelationshipIdConverter : JsonConverter
{
public override bool CanConvert(Type objectType) => false;
public override bool CanWrite => false;

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
var ids = jo.SelectToken("data").Select(x => (string) x["id"]).ToList();

return ids;
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { }
}
}
2 changes: 1 addition & 1 deletion src/pubg-dotnet/Models/Common/Region.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Pubg.Net
{
[JsonConverter(typeof(StringEnumConverter))]
public enum Region
public enum PubgRegion
{
//Xbox Regions
[EnumMember(Value = "xbox-as")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace Pubg.Net
{
public class PubgPlayer : PubgEntity
public class PubgMatchPlayer : PubgEntity
{
[JsonProperty]
public string Name { get; set; }
Expand Down
2 changes: 1 addition & 1 deletion src/pubg-dotnet/Models/Participants/PubgParticipant.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ public class PubgParticipant : PubgShardedEntity
public string Actor { get; set; }

[JsonProperty]
public PubgPlayer Player { get; set; }
public PubgMatchPlayer Player { get; set; }
}
}
27 changes: 27 additions & 0 deletions src/pubg-dotnet/Models/Players/PubgPlayer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using Newtonsoft.Json;
using Pubg.Net.Infrastructure.JsonConverters;
using Pubg.Net.Models.Base;
using System;
using System.Collections.Generic;

namespace Pubg.Net
{
public class PubgPlayer : PubgShardedEntity
{
[JsonProperty("Name")]
public string Name { get; set; }

[JsonProperty]
public DateTime CreatedAt { get; set; }

[JsonProperty]
public string PatchVersion { get; set; }

[JsonProperty]
public string TitleId { get; set; }

[JsonProperty("matches")]
[JsonConverter(typeof(RelationshipIdConverter))]
public IEnumerable<string> MatchIds { get; set; }
}
}
17 changes: 6 additions & 11 deletions src/pubg-dotnet/Models/Telemetry/PubgAsset.cs
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
using Newtonsoft.Json;
using Pubg.Net.Models.Base;
using System;

namespace Pubg.Net
{
public class PubgAsset : PubgShardedEntity
public class PubgAsset : PubgEntity
{
[JsonProperty]
public string TitleId { get; set; }
public DateTime CreatedAt { get; set; }

[JsonProperty]
public string Name { get; set; }

[JsonProperty]
public string CreatedAt { get; set; }

[JsonProperty]
public string Filename { get; set; }
public string Url { get; set; }

[JsonProperty]
public string ContentType { get; set; }
public string Description { get; set; }

[JsonProperty]
public string Url { get; set; }
public string Name { get; set; }
}
}
45 changes: 0 additions & 45 deletions src/pubg-dotnet/Services/Matches/GetPubgMatchRequest.cs

This file was deleted.

24 changes: 2 additions & 22 deletions src/pubg-dotnet/Services/Matches/PubgMatchService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class PubgMatchService : PubgService
public PubgMatchService() : base() { }
public PubgMatchService(string apiKey) : base(apiKey) { }

public virtual PubgMatch GetMatch(Region region, string matchId, string apiKey = null)
public virtual PubgMatch GetMatch(PubgRegion region, string matchId, string apiKey = null)
{
var url = string.Format(Api.Matches.MatchesEndpoint + "/{1}", region.Serialize(), matchId);
apiKey = string.IsNullOrEmpty(apiKey) ? ApiKey : apiKey;
Expand All @@ -26,7 +26,7 @@ public virtual PubgMatch GetMatch(Region region, string matchId, string apiKey =
return JsonConvert.DeserializeObject<IEnumerable<PubgMatch>>(matchJson, new JsonApiSerializerSettings()).FirstOrDefault();
}

public async virtual Task<PubgMatch> GetMatchAsync(Region region, string matchId, string apiKey = null, CancellationToken cancellationToken = default(CancellationToken))
public async virtual Task<PubgMatch> GetMatchAsync(PubgRegion region, string matchId, string apiKey = null, CancellationToken cancellationToken = default(CancellationToken))
{
var url = string.Format(Api.Matches.MatchesEndpoint + "/{1}", region.Serialize(), matchId);
apiKey = string.IsNullOrEmpty(apiKey) ? ApiKey : apiKey;
Expand All @@ -35,25 +35,5 @@ public virtual PubgMatch GetMatch(Region region, string matchId, string apiKey =

return JsonConvert.DeserializeObject<IEnumerable<PubgMatch>>(matchJson, new JsonApiSerializerSettings()).FirstOrDefault();
}

public virtual IEnumerable<PubgMatch> GetMatches(Region region, GetPubgMatchRequest request)
{
var url = RequestBuilder.BuildRequestUrl(string.Format(Api.Matches.MatchesEndpoint, region.Serialize()), request);
var apiKey = string.IsNullOrEmpty(request.ApiKey) ? ApiKey : request.ApiKey;

var collectionJson = HttpRequestor.GetString(url, apiKey);

return JsonConvert.DeserializeObject<IEnumerable<PubgMatch>>(collectionJson, new JsonApiSerializerSettings());
}

public async virtual Task<IEnumerable<PubgMatch>> GetMatchesAsync(Region region, GetPubgMatchRequest request, CancellationToken cancellationToken = default(CancellationToken))
{
var url = RequestBuilder.BuildRequestUrl(string.Format(Api.Matches.MatchesEndpoint, region.Serialize()), request);
var apiKey = string.IsNullOrEmpty(request.ApiKey) ? ApiKey : request.ApiKey;

var collectionJson = await HttpRequestor.GetStringAsync(url, cancellationToken, apiKey);

return JsonConvert.DeserializeObject<IEnumerable<PubgMatch>>(collectionJson, new JsonApiSerializerSettings());
}
}
}
14 changes: 14 additions & 0 deletions src/pubg-dotnet/Services/Players/GetPubgPlayersRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using Newtonsoft.Json;
using Pubg.Net.Services;

namespace Pubg.Net
{
public class GetPubgPlayersRequest : PubgRequest
{
[JsonProperty("filter[playerIds]")]
public string[] PlayerIds { get; set; }

[JsonProperty("filter[playerNames]")]
public string[] PlayerNames { get; set; }
}
}
58 changes: 58 additions & 0 deletions src/pubg-dotnet/Services/Players/PubgPlayerService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using JsonApiSerializer;
using Newtonsoft.Json;
using Pubg.Net.Extensions;
using Pubg.Net.Infrastructure;
using Pubg.Net.Services;
using Pubg.Net.Values;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace Pubg.Net
{
public class PubgPlayerService : PubgService
{
public PubgPlayerService() : base() { }
public PubgPlayerService(string apiKey) : base(apiKey) { }

public virtual PubgPlayer GetPlayer(PubgRegion region, string playerId, string apiKey = null)
{
var url = string.Format(Api.Players.PlayersEndpoint + "/{1}", region.Serialize(), playerId);
apiKey = string.IsNullOrEmpty(apiKey) ? ApiKey : apiKey;

var playerJson = HttpRequestor.GetString(url, apiKey);

return JsonConvert.DeserializeObject<PubgPlayer>(playerJson, new JsonApiSerializerSettings());
}

public virtual async Task<PubgPlayer> GetPlayerAsync(PubgRegion region, string playerId, string apiKey = null, CancellationToken cancellationToken = default(CancellationToken))
{
var url = string.Format(Api.Players.PlayersEndpoint + "/{1}", region.Serialize(), playerId);
apiKey = string.IsNullOrEmpty(apiKey) ? ApiKey : apiKey;

var playerJson = await HttpRequestor.GetStringAsync(url, cancellationToken, apiKey);

return JsonConvert.DeserializeObject<PubgPlayer>(playerJson, new JsonApiSerializerSettings());
}

public virtual IEnumerable<PubgPlayer> GetPlayers(PubgRegion region, GetPubgPlayersRequest filter)
{
var url = RequestBuilder.BuildRequestUrl(string.Format(Api.Players.PlayersEndpoint, region.Serialize()), filter);
var apiKey = string.IsNullOrEmpty(filter.ApiKey) ? ApiKey : filter.ApiKey;

var collectionJson = HttpRequestor.GetString(url, apiKey);

return JsonConvert.DeserializeObject<IEnumerable<PubgPlayer>>(collectionJson, new JsonApiSerializerSettings());
}

public virtual async Task<IEnumerable<PubgPlayer>> GetPlayersAsync(PubgRegion region, GetPubgPlayersRequest filter, CancellationToken cancellationToken = default(CancellationToken))
{
var url = RequestBuilder.BuildRequestUrl(string.Format(Api.Players.PlayersEndpoint, region.Serialize()), filter);
var apiKey = string.IsNullOrEmpty(filter.ApiKey) ? ApiKey : filter.ApiKey;

var collectionJson = await HttpRequestor.GetStringAsync(url, cancellationToken, apiKey);

return JsonConvert.DeserializeObject<IEnumerable<PubgPlayer>>(collectionJson, new JsonApiSerializerSettings());
}
}
}
17 changes: 9 additions & 8 deletions src/pubg-dotnet/Services/Telemetry/PubgTelemetryService.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Newtonsoft.Json;
using Pubg.Net.Extensions;
using Pubg.Net.Infrastructure;
using Pubg.Net.Infrastructure.JsonContractResolvers;
using Pubg.Net.Services;
Expand All @@ -10,28 +11,28 @@ namespace Pubg.Net
{
public class PubgTelemetryService : PubgService
{
public virtual IEnumerable<PubgTelemetryEvent> GetTelemetry(PubgAsset asset)
public virtual IEnumerable<PubgTelemetryEvent> GetTelemetry(PubgRegion region, PubgAsset asset)
{
return GetTelemetry(asset.Url, asset.ShardId);
return GetTelemetry(region, asset.Url);
}

public virtual IEnumerable<PubgTelemetryEvent> GetTelemetry(string url, string shardId)
public virtual IEnumerable<PubgTelemetryEvent> GetTelemetry(PubgRegion region, string url)
{
var collectionJson = HttpRequestor.GetString(url);

return JsonConvert.DeserializeObject<IEnumerable<PubgTelemetryEvent>>(collectionJson, new JsonSerializerSettings { ContractResolver = new TelemetryContractResolver(shardId) });
return JsonConvert.DeserializeObject<IEnumerable<PubgTelemetryEvent>>(collectionJson, new JsonSerializerSettings { ContractResolver = new TelemetryContractResolver(region.Serialize())});
}

public virtual async Task<IEnumerable<PubgTelemetryEvent>> GetTelemetryAsync(PubgAsset asset, CancellationToken cancellationToken = default(CancellationToken))
public virtual async Task<IEnumerable<PubgTelemetryEvent>> GetTelemetryAsync(PubgRegion region, PubgAsset asset, CancellationToken cancellationToken = default(CancellationToken))
{
return await GetTelemetryAsync(asset.Url, asset.ShardId, cancellationToken);
return await GetTelemetryAsync(region, asset.Url, cancellationToken);
}

public virtual async Task<IEnumerable<PubgTelemetryEvent>> GetTelemetryAsync(string url, string shardId, CancellationToken cancellationToken = default(CancellationToken))
public virtual async Task<IEnumerable<PubgTelemetryEvent>> GetTelemetryAsync(PubgRegion region, string url, CancellationToken cancellationToken = default(CancellationToken))
{
var collectionJson = await HttpRequestor.GetStringAsync(url, cancellationToken);

return JsonConvert.DeserializeObject<IEnumerable<PubgTelemetryEvent>>(collectionJson, new JsonSerializerSettings { ContractResolver = new TelemetryContractResolver(shardId) });
return JsonConvert.DeserializeObject<IEnumerable<PubgTelemetryEvent>>(collectionJson, new JsonSerializerSettings { ContractResolver = new TelemetryContractResolver(region.Serialize()) });
}
}
}
4 changes: 4 additions & 0 deletions src/pubg-dotnet/Values/Api.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,9 @@ internal static class Status
internal static string StatusEndpoint = PubgApiConfiguration.GetApiBase() + "/status";
}

internal static class Players
{
internal static string PlayersEndpoint = ShardedBaseUrl + "/players";
}
}
}

0 comments on commit 5ae5d82

Please sign in to comment.