Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 53 additions & 8 deletions Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs
Original file line number Diff line number Diff line change
@@ -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<string, string> { ["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<string, string>();
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<Channel, PlayerAlias, string> OnMessageReceived;
public event Action<Channel, PlayerAlias> OnChannelJoined;
Expand All @@ -14,8 +46,10 @@ public class ChannelsAPI: BaseAPI
public event Action<Channel> OnChannelDeleted;
public event Action<Channel, string[]> 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<ChannelMessageResponse>();
Expand Down Expand Up @@ -49,20 +83,30 @@ public ChannelsAPI() : base("v1/game-channels") {
};
}

public async Task<ChannelsIndexResponse> GetChannels(int page)
public async Task<ChannelsIndexResponse> 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<ChannelsIndexResponse>(json);
return res;
}

public async Task<Channel[]> GetSubscribedChannels()
[Obsolete("Use GetChannels(GetChannelsOptions options) instead.")]
public async Task<ChannelsIndexResponse> GetChannels(int page)
{
return await GetChannels(new GetChannelsOptions { page = page });
}

public async Task<Channel[]> 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<ChannelsSubscriptionsResponse>(json);
Expand All @@ -81,7 +125,8 @@ private async Task<Channel> 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,
Expand Down
26 changes: 13 additions & 13 deletions Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,17 @@ public class GetEntriesOptions
public bool includeArchived = false;
public string propKey = "";
public string propValue = "";

public string ToQueryString()
{
var query = new Dictionary<string, string> { ["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
Expand All @@ -33,22 +44,11 @@ public List<LeaderboardEntry> GetCachedEntriesForCurrentPlayer(string internalNa
return _entriesManager.GetEntries(internalName).FindAll(e => e.playerAlias.id == Talo.CurrentAlias.id);
}

private string BuildGetEntriesQueryParams(GetEntriesOptions options)
public async Task<LeaderboardEntriesResponse> GetEntries(string internalName, GetEntriesOptions options = null)
{
options ??= new GetEntriesOptions();

var query = new Dictionary<string, string> { ["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<LeaderboardEntriesResponse> 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<LeaderboardEntriesResponse>(json);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<VisualElement>("channels");
foreach (var channel in res.channels)
Expand Down