Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: friend profiles, protocol update & events improvement #3197

Closed
wants to merge 6 commits into from
Closed
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
62 changes: 41 additions & 21 deletions Explorer/Assets/DCL/Friends/DefaultFriendsEventBus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,56 @@ namespace DCL.Friends
public class DefaultFriendsEventBus : IFriendsEventBus
{
public event Action<FriendRequest>? OnFriendRequestReceived;
public event Action<FriendRequest>? OnFriendRequestSent;
public event Action<string>? OnFriendRequestAccepted;
public event Action<string>? OnFriendRequestRejected;
public event Action<string>? OnFriendRequestCanceled;
public event Action<string>? OnFriendRequestRemoved;
public event Action<string>? OnFriendConnected;
public event Action<string>? OnFriendDisconnected;
public event IFriendsEventBus.UserIdOperation? OnOtherUserRemovedTheRequest;
lorux0 marked this conversation as resolved.
Show resolved Hide resolved
public event IFriendsEventBus.UserIdOperation? OnOtherUserAcceptedYourRequest;
public event IFriendsEventBus.UserIdOperation? OnOtherUserRejectedYourRequest;
public event IFriendsEventBus.UserIdOperation? OnOtherUserCancelledTheRequest;
public event Action<FriendRequest>? OnYouSentFriendRequestToOtherUser;
public event IFriendsEventBus.UserIdOperation? OnYouRemovedFriendRequestSentToOtherUser;
public event IFriendsEventBus.UserIdOperation? OnYouCancelledFriendRequestSentToOtherUser;
public event IFriendsEventBus.UserIdOperation? OnYouAcceptedFriendRequestReceivedFromOtherUser;
public event IFriendsEventBus.UserIdOperation? OnYouRejectedFriendRequestReceivedFromOtherUser;
public event Action<FriendProfile>? OnFriendConnected;
public event Action<FriendProfile>? OnFriendDisconnected;
public event Action<FriendProfile>? OnFriendAway;

public void BroadcastFriendRequestReceived(FriendRequest request) =>
OnFriendRequestReceived?.Invoke(request);

public void BroadcastFriendRequestSent(FriendRequest request) =>
OnFriendRequestSent?.Invoke(request);
public void BroadcastThatYouSentFriendRequestToOtherUser(FriendRequest request) =>
OnYouSentFriendRequestToOtherUser?.Invoke(request);

public void BroadcastFriendRequestAccepted(string friendId) =>
OnFriendRequestAccepted?.Invoke(friendId);
public void BroadcastThatYouRemovedFriendRequestSentToOtherUser(string userId) =>
OnYouRemovedFriendRequestSentToOtherUser?.Invoke(userId);

public void BroadcastFriendRequestRejected(string friendId) =>
OnFriendRequestRejected?.Invoke(friendId);
public void BroadcastThatYouAcceptedFriendRequestReceivedFromOtherUser(string userId) =>
OnYouAcceptedFriendRequestReceivedFromOtherUser?.Invoke(userId);

public void BroadcastFriendRequestCanceled(string friendId) =>
OnFriendRequestCanceled?.Invoke(friendId);
public void BroadcastThatYouCancelledFriendRequestSentToOtherUser(string userId) =>
OnYouCancelledFriendRequestSentToOtherUser?.Invoke(userId);

public void BroadcastFriendRequestRemoved(string friendId) =>
OnFriendRequestRemoved?.Invoke(friendId);
public void BroadcastThatYouRejectedFriendRequestReceivedFromOtherUser(string userId) =>
OnYouRejectedFriendRequestReceivedFromOtherUser?.Invoke(userId);

public void BroadcastFriendConnected(string friendId) =>
OnFriendConnected?.Invoke(friendId);
public void BroadcastThatOtherUserAcceptedYourRequest(string userId) =>
OnOtherUserAcceptedYourRequest?.Invoke(userId);

public void BroadcastFriendDisconnected(string friendId) =>
OnFriendDisconnected?.Invoke(friendId);
public void BroadcastThatOtherUserRejectedYourRequest(string userId) =>
OnOtherUserRejectedYourRequest?.Invoke(userId);

public void BroadcastThatOtherUserCancelledTheRequest(string userId) =>
OnOtherUserCancelledTheRequest?.Invoke(userId);

public void BroadcastThatOtherUserRemovedTheRequest(string userId) =>
OnOtherUserRemovedTheRequest?.Invoke(userId);

public void BroadcastFriendConnected(FriendProfile friend) =>
OnFriendConnected?.Invoke(friend);

public void BroadcastFriendDisconnected(FriendProfile friend) =>
OnFriendDisconnected?.Invoke(friend);

public void BroadcastFriendAsAway(FriendProfile friend) =>
OnFriendAway?.Invoke(friend);
}
}
21 changes: 21 additions & 0 deletions Explorer/Assets/DCL/Friends/FriendProfile.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using CommunicationData.URLHelpers;
using DCL.Web3;

namespace DCL.Friends
{
public class FriendProfile
{
public Web3Address Address { get; private set; }
public string Name { get; private set; }
public bool HasClaimedName { get; private set; }
public URLAddress FacePictureUrl { get; private set; }

public FriendProfile(Web3Address address, string name, bool hasClaimedName, URLAddress facePictureUrl)
{
Address = address;
Name = name;
HasClaimedName = hasClaimedName;
FacePictureUrl = facePictureUrl;
}
}
}
3 changes: 3 additions & 0 deletions Explorer/Assets/DCL/Friends/FriendProfile.cs.meta

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

14 changes: 4 additions & 10 deletions Explorer/Assets/DCL/Friends/FriendRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,18 @@ public override int GetHashCode() =>

public string FriendRequestId { get; }
public DateTime Timestamp { get; }
public string From { get; }
public string To { get; }
public string MessageBody { get; }
public FriendProfile From { get; }
public FriendProfile To { get; }
public string? MessageBody { get; }
public bool HasBodyMessage => !string.IsNullOrEmpty(MessageBody);

public FriendRequest(string friendRequestId, DateTime timestamp, string from, string to, string messageBody)
public FriendRequest(string friendRequestId, DateTime timestamp, FriendProfile from, FriendProfile to, string? messageBody)
{
FriendRequestId = friendRequestId;
Timestamp = timestamp;
From = from;
To = to;
MessageBody = messageBody;
}

public bool IsSentTo(string userId) =>
To == userId;

public bool IsReceivedFrom(string userId) =>
From == userId;
}
}
50 changes: 36 additions & 14 deletions Explorer/Assets/DCL/Friends/IFriendsEventBus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,51 @@ namespace DCL.Friends
{
public interface IFriendsEventBus
{
public delegate void UserIdOperation(string userId);

/// <summary>
/// Other user sent you a friend request
/// </summary>
event Action<FriendRequest> OnFriendRequestReceived;
event Action<FriendRequest> OnFriendRequestSent;
event Action<string> OnFriendRequestAccepted;
event Action<string> OnFriendRequestRejected;
event Action<string> OnFriendRequestCanceled;
event Action<string> OnFriendRequestRemoved;
event Action<string> OnFriendConnected;
event Action<string> OnFriendDisconnected;
event UserIdOperation OnOtherUserAcceptedYourRequest;
event UserIdOperation OnOtherUserRejectedYourRequest;
event UserIdOperation OnOtherUserCancelledTheRequest;
event UserIdOperation OnOtherUserRemovedTheRequest;

event Action<FriendRequest> OnYouSentFriendRequestToOtherUser;
event UserIdOperation OnYouRemovedFriendRequestSentToOtherUser;
event UserIdOperation OnYouCancelledFriendRequestSentToOtherUser;
event UserIdOperation OnYouAcceptedFriendRequestReceivedFromOtherUser;
event UserIdOperation OnYouRejectedFriendRequestReceivedFromOtherUser;

event Action<FriendProfile> OnFriendConnected;
event Action<FriendProfile> OnFriendDisconnected;
event Action<FriendProfile> OnFriendAway;

void BroadcastFriendRequestReceived(FriendRequest request);

void BroadcastFriendRequestSent(FriendRequest request);
void BroadcastThatOtherUserAcceptedYourRequest(string userId);

void BroadcastThatOtherUserRejectedYourRequest(string userId);

void BroadcastThatOtherUserCancelledTheRequest(string userId);

void BroadcastThatOtherUserRemovedTheRequest(string userId);

void BroadcastFriendConnected(FriendProfile friend);

void BroadcastFriendDisconnected(FriendProfile friend);

void BroadcastFriendRequestAccepted(string friendId);
void BroadcastFriendAsAway(FriendProfile friend);

void BroadcastFriendRequestRejected(string friendId);
void BroadcastThatYouSentFriendRequestToOtherUser(FriendRequest request);

void BroadcastFriendRequestCanceled(string friendId);
void BroadcastThatYouRemovedFriendRequestSentToOtherUser(string userId);

void BroadcastFriendRequestRemoved(string friendId);
void BroadcastThatYouAcceptedFriendRequestReceivedFromOtherUser(string userId);

void BroadcastFriendConnected(string friendId);
void BroadcastThatYouCancelledFriendRequestSentToOtherUser(string userId);

void BroadcastFriendDisconnected(string friendId);
void BroadcastThatYouRejectedFriendRequestReceivedFromOtherUser(string userId);
}
}
15 changes: 5 additions & 10 deletions Explorer/Assets/DCL/Friends/IFriendsService.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Cysharp.Threading.Tasks;
using DCL.Profiles;
using System;
using System.Collections.Generic;
using System.Threading;
Expand All @@ -9,10 +8,6 @@ namespace DCL.Friends
{
public interface IFriendsService : IDisposable
{
UniTask<PaginatedFriendsResult> GetOnlineFriendsAsync(int pageNum, int pageSize, CancellationToken ct);

UniTask<PaginatedFriendsResult> GetOfflineFriendsAsync(int pageNum, int pageSize, CancellationToken ct);

UniTask<PaginatedFriendsResult> GetFriendsAsync(int pageNum, int pageSize, CancellationToken ct);

UniTask<PaginatedFriendsResult> GetMutualFriendsAsync(string userId, int pageNum, int pageSize, CancellationToken ct);
Expand All @@ -36,21 +31,21 @@ public interface IFriendsService : IDisposable

public readonly struct PaginatedFriendsResult : IDisposable
{
private readonly List<Profile> friends;
private readonly List<FriendProfile> friends;

public IReadOnlyList<Profile> Friends => friends;
public IReadOnlyList<FriendProfile> Friends => friends;
public int TotalAmount { get; }

public PaginatedFriendsResult(IEnumerable<Profile> profiles, int totalAmount)
public PaginatedFriendsResult(IEnumerable<FriendProfile> profiles, int totalAmount)
{
friends = ListPool<Profile>.Get();
friends = ListPool<FriendProfile>.Get();
friends.AddRange(profiles);
TotalAmount = totalAmount;
}

public void Dispose()
{
ListPool<Profile>.Release(friends);
ListPool<FriendProfile>.Release(friends);
}
}

Expand Down
Loading
Loading