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
21 changes: 13 additions & 8 deletions Assets/Samples/ChatDemo/Scripts/ChatUIController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ private async void Start()
sendButton = root.Q<Button>("post-btn");
sendButton.clicked += OnSendClick;

Talo.Socket.OnMessageReceived += OnMessageReceived;
Talo.Channels.OnMessageReceived += OnMessageReceived;
Talo.PlayerPresence.OnPresenceChanged += OnPresenceChanged;

if (string.IsNullOrEmpty(playerUsername))
{
Expand Down Expand Up @@ -144,15 +145,19 @@ private void AddMessage(string message)
messagesList.Rebuild();
}

private void OnMessageReceived(SocketResponse response)
private void OnMessageReceived(Channel channel, PlayerAlias playerAlias, string message)
{
if (response.GetResponseType() == "v1.channels.message")
if (channel.id == activeChannelId)
{
var data = response.GetData<ChannelMessageResponse>();
if (data.channel.id == activeChannelId)
{
AddMessage($"[{data.channel.name}] {data.playerAlias.identifier}: {data.message}");
}
AddMessage($"[{channel.name}] {playerAlias.identifier}: {message}");
}
}

private void OnPresenceChanged(PlayerPresence presence, bool onlineChanged, bool customStatusChanged)
{
if (onlineChanged)
{
AddMessage($"[SYSTEM] {presence.playerAlias.identifier} is now {(presence.online ? "online" : "offline")}");
}
}
}
12 changes: 11 additions & 1 deletion Packages/com.trytalo.talo/Runtime/APIs/ChannelsAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,17 @@ namespace TaloGameServices
{
public class ChannelsAPI: BaseAPI
{
public ChannelsAPI() : base("v1/game-channels") { }
public event Action<Channel, PlayerAlias, string> OnMessageReceived;

public ChannelsAPI() : base("v1/game-channels") {
Talo.Socket.OnMessageReceived += (response) => {
if (response.GetResponseType() == "v1.channels.message")
{
var data = response.GetData<ChannelMessageResponse>();
OnMessageReceived?.Invoke(data.channel, data.playerAlias, data.message);
}
};
}

public async Task<ChannelsIndexResponse> GetChannels(int page)
{
Expand Down
51 changes: 51 additions & 0 deletions Packages/com.trytalo.talo/Runtime/APIs/PlayerPresenceAPI.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using System;
using System.Threading.Tasks;
using UnityEngine;

namespace TaloGameServices
{
public class PlayerPresenceAPI : BaseAPI
{
public event Action<PlayerPresence, bool, bool> OnPresenceChanged;

public PlayerPresenceAPI() : base("v1/players/presence")
{
Talo.Socket.OnMessageReceived += (response) => {
if (response.GetResponseType() == "v1.players.presence.updated")
{
var data = response.GetData<PlayerPresenceUpdatedResponse>();
OnPresenceChanged?.Invoke(
data.presence,
data.meta.onlineChanged,
data.meta.customStatusChanged
);
}
};
}

public async Task<PlayerPresence> GetPresence(string playerId)
{
var uri = new Uri($"{baseUrl}/{playerId}");
var json = await Call(uri, "GET");

var res = JsonUtility.FromJson<PresenceResponse>(json);
return res.presence;
}

public async Task<PlayerPresence> UpdatePresence(bool online, string customStatus = "")
{
Talo.IdentityCheck();

var uri = new Uri(baseUrl);
var content = JsonUtility.ToJson(new PlayerPresenceUpdateRequest
{
online = online,
customStatus = customStatus
});

var json = await Call(uri, "PUT", content);
var res = JsonUtility.FromJson<PresenceResponse>(json);
return res.presence;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions Packages/com.trytalo.talo/Runtime/Entities/PlayerPresence.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System;

namespace TaloGameServices
{
[Serializable]
public class PlayerPresence
{
public bool online;
public string customStatus;
public PlayerAlias playerAlias;
public string updatedAt;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace TaloGameServices
{
[System.Serializable]
public class PlayerPresenceUpdateRequest
{
public bool online;
public string customStatus;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace TaloGameServices
{
[System.Serializable]
public class PresenceResponse
{
public PlayerPresence presence;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace TaloGameServices
{
[System.Serializable]
public class PlayerPresenceUpdatedResponse
{
public PlayerPresence presence;
public PresenceMetadata meta;
}

[System.Serializable]
public class PresenceMetadata
{
public bool onlineChanged;
public bool customStatusChanged;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions Packages/com.trytalo.talo/Runtime/Talo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public class Talo
internal static PlayerGroupsAPI _playerGroups;
internal static SocketTicketsAPI _socketTickets;
internal static ChannelsAPI _channels;
internal static PlayerPresenceAPI _playerPresence;

private static PlayerAlias _currentAlias;

Expand Down Expand Up @@ -127,6 +128,11 @@ public static ChannelsAPI Channels
get => _channels;
}

public static PlayerPresenceAPI PlayerPresence
{
get => _playerPresence;
}

static Talo()
{
TaloManager tm;
Expand Down Expand Up @@ -164,6 +170,7 @@ static Talo()
_playerGroups = new PlayerGroupsAPI();
_socketTickets = new SocketTicketsAPI();
_channels = new ChannelsAPI();
_playerPresence = new PlayerPresenceAPI();

tm.OnReady();
}
Expand Down