diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs index 799e8f7..9858b0e 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs @@ -1,11 +1,43 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using UnityEngine; namespace TaloGameServices { - public class ChannelsAPI: BaseAPI + public class GetChannelsOptions + { + public int page = 0; + public string propKey = ""; + public string propValue = ""; + + public string ToQueryString() + { + var query = new Dictionary { ["page"] = page.ToString() }; + if (!string.IsNullOrEmpty(propKey)) query["propKey"] = propKey; + if (!string.IsNullOrEmpty(propValue)) query["propValue"] = propValue; + + return string.Join("&", query.Select((param) => $"{param.Key}={param.Value}")); + } + } + + public class GetSubscribedChannelsOptions + { + public string propKey = ""; + public string propValue = ""; + + public string ToQueryString() + { + var query = new Dictionary(); + if (!string.IsNullOrEmpty(propKey)) query["propKey"] = propKey; + if (!string.IsNullOrEmpty(propValue)) query["propValue"] = propValue; + + return string.Join("&", query.Select((param) => $"{param.Key}={param.Value}")); + } + } + + public class ChannelsAPI : BaseAPI { public event Action OnMessageReceived; public event Action OnChannelJoined; @@ -14,8 +46,10 @@ public class ChannelsAPI: BaseAPI public event Action OnChannelDeleted; public event Action OnChannelUpdated; - public ChannelsAPI() : base("v1/game-channels") { - Talo.Socket.OnMessageReceived += (response) => { + public ChannelsAPI() : base("v1/game-channels") + { + Talo.Socket.OnMessageReceived += (response) => + { if (response.GetResponseType() == "v1.channels.message") { var data = response.GetData(); @@ -49,20 +83,30 @@ public ChannelsAPI() : base("v1/game-channels") { }; } - public async Task GetChannels(int page) + public async Task GetChannels(GetChannelsOptions options = null) { - var uri = new Uri($"{baseUrl}?page={page}"); + options ??= new GetChannelsOptions(); + + var uri = new Uri($"{baseUrl}?{options.ToQueryString()}"); var json = await Call(uri, "GET"); var res = JsonUtility.FromJson(json); return res; } - public async Task GetSubscribedChannels() + [Obsolete("Use GetChannels(GetChannelsOptions options) instead.")] + public async Task GetChannels(int page) + { + return await GetChannels(new GetChannelsOptions { page = page }); + } + + public async Task GetSubscribedChannels(GetSubscribedChannelsOptions options = null) { Talo.IdentityCheck(); - var uri = new Uri($"{baseUrl}/subscriptions"); + options ??= new GetSubscribedChannelsOptions(); + + var uri = new Uri($"{baseUrl}/subscriptions?{options.ToQueryString()}"); var json = await Call(uri, "GET"); var res = JsonUtility.FromJson(json); @@ -81,7 +125,8 @@ private async Task SendCreateChannelRequest( var props = propTuples.Select((propTuple) => new Prop(propTuple)).ToArray(); var uri = new Uri(baseUrl); - var content = JsonUtility.ToJson(new ChannelsCreateRequest { + var content = JsonUtility.ToJson(new ChannelsCreateRequest + { name = name, autoCleanup = autoCleanup, props = props, diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs index 92950aa..443dc35 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs @@ -13,6 +13,17 @@ public class GetEntriesOptions public bool includeArchived = false; public string propKey = ""; public string propValue = ""; + + public string ToQueryString() + { + var query = new Dictionary { ["page"] = page.ToString() }; + if (aliasId != -1) query["aliasId"] = aliasId.ToString(); + if (includeArchived) query["withDeleted"] = "1"; + if (!string.IsNullOrEmpty(propKey)) query["propKey"] = propKey; + if (!string.IsNullOrEmpty(propValue)) query["propValue"] = propValue; + + return string.Join("&", query.Select((param) => $"{param.Key}={param.Value}")); + } } public class LeaderboardsAPI : BaseAPI @@ -33,22 +44,11 @@ public List GetCachedEntriesForCurrentPlayer(string internalNa return _entriesManager.GetEntries(internalName).FindAll(e => e.playerAlias.id == Talo.CurrentAlias.id); } - private string BuildGetEntriesQueryParams(GetEntriesOptions options) + public async Task GetEntries(string internalName, GetEntriesOptions options = null) { options ??= new GetEntriesOptions(); - var query = new Dictionary { ["page"] = options.page.ToString() }; - if (options.aliasId != -1) query["aliasId"] = options.aliasId.ToString(); - if (options.includeArchived) query["withDeleted"] = "1"; - if (!string.IsNullOrEmpty(options.propKey)) query["propKey"] = options.propKey; - if (!string.IsNullOrEmpty(options.propValue)) query["propValue"] = options.propValue; - - return string.Join("&", query.Select(x => $"{x.Key}={x.Value}")); - } - - public async Task GetEntries(string internalName, GetEntriesOptions options = null) - { - var uri = new Uri($"{baseUrl}/{internalName}/entries?{BuildGetEntriesQueryParams(options)}"); + var uri = new Uri($"{baseUrl}/{internalName}/entries?{options.ToQueryString()}"); var json = await Call(uri, "GET"); var res = JsonUtility.FromJson(json); diff --git a/Assets/Talo Game Services/Talo/Samples/ChatDemo/Scripts/ChatUIController.cs b/Assets/Talo Game Services/Talo/Samples/ChatDemo/Scripts/ChatUIController.cs index 9d1b6d3..1b84624 100644 --- a/Assets/Talo Game Services/Talo/Samples/ChatDemo/Scripts/ChatUIController.cs +++ b/Assets/Talo Game Services/Talo/Samples/ChatDemo/Scripts/ChatUIController.cs @@ -83,7 +83,7 @@ private void AddChannelToList(Channel channel) private async void InitChannelsList() { - var res = await Talo.Channels.GetChannels(0); + var res = await Talo.Channels.GetChannels(new GetChannelsOptions { page = 0 }); channelsList = root.Q("channels"); foreach (var channel in res.channels)