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
Original file line number Diff line number Diff line change
Expand Up @@ -174,19 +174,58 @@ public void Broadcast(string message)
Talo.Socket.Send(new SocketRequest<PlayerRelationshipsBroadcastRequest>("v1.player-relationships.broadcast", payload));
}

public async Task<PlayerAliasSubscription> SubscribeTo(int playerAliasId, RelationshipType relationshipType)
public async Task<SubscriptionUpsertResult> SubscribeTo(int playerAliasId, RelationshipType relationshipType, params (string, string)[] propTuples)
{
Talo.IdentityCheck();

var request = new PlayerRelationshipsSubscribeToRequest
{
aliasId = playerAliasId,
relationshipType = PlayerAliasSubscription.RelationshipTypeToString(relationshipType)
relationshipType = PlayerAliasSubscription.RelationshipTypeToString(relationshipType),
props = propTuples.Select((propTuple) => new Prop(propTuple)).ToArray()
};

var json = await Call(GetUri(), "POST", JsonUtility.ToJson(request));
var response = JsonUtility.FromJson<PlayerRelationshipsSubscriptionResponse>(json);
return response.subscription;
try
{
var json = await Call(GetUri(), "POST", Prop.SanitiseJson(JsonUtility.ToJson(request)));
var response = JsonUtility.FromJson<PlayerRelationshipsSubscriptionResponse>(json);

return new SubscriptionUpsertResult(true, response.subscription);
}
catch (RequestException ex)
{
if (ex.IsBadRequest())
{
return new SubscriptionUpsertResult(false, null, RejectedProp.FromJson(ex.responseBody));
}
throw;
}
}

public async Task<SubscriptionUpsertResult> UpdateSubscriptionProps(int subscriptionId, params (string, string)[] propTuples)
{
Talo.IdentityCheck();

var request = new PlayerRelationshipsUpdatePropsRequest
{
props = propTuples.Select((propTuple) => new Prop(propTuple)).ToArray()
};

try
{
var json = await Call(new Uri($"{baseUrl}/{subscriptionId}"), "PATCH", Prop.SanitiseJson(JsonUtility.ToJson(request)));
var response = JsonUtility.FromJson<PlayerRelationshipsSubscriptionResponse>(json);

return new SubscriptionUpsertResult(true, response.subscription);
}
catch (RequestException ex)
{
if (ex.IsBadRequest())
{
return new SubscriptionUpsertResult(false, null, RejectedProp.FromJson(ex.responseBody));
}
throw;
}
}

public async Task RevokeSubscription(int subscriptionId)
Expand Down Expand Up @@ -279,5 +318,19 @@ public async Task<PlayerRelationshipsSubscriptionsListResponse> GetSubscriptions
var json = await Call(uri, "GET");
return JsonUtility.FromJson<PlayerRelationshipsSubscriptionsListResponse>(json);
}

public class SubscriptionUpsertResult
{
public bool Success { get; }
public PlayerAliasSubscription Subscription { get; }
public RejectedProp[] RejectedProps { get; }

public SubscriptionUpsertResult(bool success, PlayerAliasSubscription subscription, RejectedProp[] rejectedProps = null)
{
Success = success;
Subscription = subscription;
RejectedProps = rejectedProps ?? Array.Empty<RejectedProp>();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public enum RelationshipType
}

[Serializable]
public class PlayerAliasSubscription
public class PlayerAliasSubscription : EntityWithProps
{
public int id;
public PlayerAlias subscriber;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ public class PlayerRelationshipsSubscribeToRequest
{
public int aliasId;
public string relationshipType;
public Prop[] props;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using System;

namespace TaloGameServices
{
[Serializable]
public class PlayerRelationshipsUpdatePropsRequest
{
public Prop[] props;
}
}

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
Expand Up @@ -52,8 +52,8 @@ public async Task LoadOutgoingRequests()

public async Task<bool> SendFriendRequest(PlayerAlias alias)
{
var subscription = await Talo.PlayerRelationships.SubscribeTo(alias.id, RelationshipType.Bidirectional);
return subscription != null;
var result = await Talo.PlayerRelationships.SubscribeTo(alias.id, RelationshipType.Bidirectional);
return result.Success;
}

public async Task<bool> AcceptFriendRequest(PlayerAlias alias)
Expand Down
Loading