< Summary

Class:DCL.Social.Chat.ChatController
Assembly:ChatController
File(s):File 1: /tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ChatController/ChatController.cs
File 2: /tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ChatController/ChatControllerContextMenuUtility.cs
Covered lines:140
Uncovered lines:88
Coverable lines:228
Total lines:618
Line coverage:61.4% (140 of 228)
Covered branches:0
Total branches:0
Covered methods:27
Total methods:48
Method coverage:56.2% (27 of 48)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
File 1: ChatController(...)0%110100%
File 1: Dispose()0%110100%
File 1: Initialize()0%110100%
File 1: Initialize(...)0%6.396077.78%
File 1: UpdateTotalUnseenMessages(...)0%220100%
File 1: UpdateTotalUnseenMessagesByUser(...)0%330100%
File 1: UpdateTotalUnseenMessagesByChannel(...)0%220100%
File 1: UpdateChannelMembers(...)0%220100%
File 1: JoinIntoChannel(...)0%8.098088.89%
File 1: JoinChannelFailed(...)0%220100%
File 1: LeaveChannelFailed(...)0%220100%
File 1: UpdateChannelInfo(...)0%880100%
File 1: MuteChannelFailed(...)0%220100%
File 1: UpdateChannelSearchResults(...)0%4.014092.31%
File 1: LeaveChannel(...)0%2100%
File 1: JoinOrCreateChannelAsync()0%20400%
File 1: JoinOrCreateChannel(...)0%2100%
File 1: GetChannelMessages(...)0%2100%
File 1: GetJoinedChannels(...)0%2100%
File 1: GetChannelsByNameAsync()0%20400%
File 1: GetChannelsByName(...)0%2100%
File 1: GetChannels(...)0%110100%
File 1: MuteChannel(...)0%6200%
File 1: UnmuteChannel(...)0%6200%
File 1: GetAllocatedChannel(...)0%220100%
File 1: GetAllocatedChannelByName(...)0%2100%
File 1: GetPrivateMessages(...)0%2100%
File 1: MarkChannelMessagesAsSeen(...)0%330100%
File 1: GetUnseenMessagesByUser()0%2100%
File 1: GetUnseenMessagesByChannel()0%2100%
File 1: GetAllocatedUnseenMessages(...)0%220100%
File 1: GetAllocatedUnseenChannelMessages(...)0%330100%
File 1: CreateChannel(...)0%2100%
File 1: GetChannelInfo(...)0%110100%
File 1: GetChannelMembers(...)0%2100%
File 1: GetChannelMembers(...)0%110100%
File 1: Send(...)0%2100%
File 1: MarkMessagesAsSeen(...)0%110100%
File 1: SendChannelWelcomeMessage(...)0%110100%
File 1: AddMessages(...)0%10.0210093.75%
File 1: UpdateTotalUnseenMessagesByChannel(...)0%330100%
File 2: FakePublicMessage()0%6200%
File 2: FakePrivateMessage()0%2100%
File 2: AddManyFakeMessagesToNearby()0%30500%
File 2: AddManyFakeMessagesToUnityChannel()0%30500%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ChatController/ChatController.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using System;
 3using System.Collections.Generic;
 4using System.Linq;
 5using DCL.Chat.Channels;
 6using DCL.Chat.WebApi;
 7using DCL.Interface;
 8using System.Threading;
 9using Channel = DCL.Chat.Channels.Channel;
 10
 11namespace DCL.Social.Chat
 12{
 13    public partial class ChatController : IChatController
 14    {
 15        private const string NEARBY_CHANNEL_DESCRIPTION =
 16            "Talk to the people around you. If you move far away from someone you will lose contact. All whispers will b
 17
 18        private const string NEARBY_CHANNEL_ID = "nearby";
 19
 44120        private readonly Dictionary<string, int> unseenMessagesByUser = new ();
 44121        private readonly Dictionary<string, int> unseenMessagesByChannel = new ();
 44122        private readonly Dictionary<string, Channel> channels = new ();
 823        private HashSet<string> autoJoinChannelList => dataStore.HUDs.autoJoinChannelList.Get();
 24        private bool chatAlreadyInitialized;
 25        private int totalUnseenMessages;
 26        private readonly DataStore dataStore;
 27        private readonly IChatApiBridge apiBridge;
 44128        private readonly CancellationTokenSource operationsCancellationToken = new ();
 29
 30        public event Action<Channel> OnChannelUpdated;
 31        public event Action<Channel> OnChannelJoined;
 32        public event Action<Channel> OnAutoChannelJoined;
 33        public event Action<string, ChannelErrorCode> OnJoinChannelError;
 34        public event Action<string> OnChannelLeft;
 35        public event Action<string, ChannelErrorCode> OnChannelLeaveError;
 36        public event Action<string, ChannelErrorCode> OnMuteChannelError;
 37        public event Action OnInitialized;
 38        public event Action<ChatMessage[]> OnAddMessage;
 39        public event Action<int> OnTotalUnseenMessagesUpdated;
 40        public event Action<string, int> OnUserUnseenMessagesUpdated;
 41        public event Action<string, ChannelMember[]> OnUpdateChannelMembers;
 42        public event Action<string, Channel[]> OnChannelSearchResult;
 43        public event Action<string, int> OnChannelUnseenMessagesUpdated;
 44        public event Action<string> OnAskForJoinChannel;
 45
 46        // since kernel does not calculate the #nearby channel unseen messages, it is handled on renderer side
 1047        public int TotalUnseenMessages => totalUnseenMessages
 48                                          + (unseenMessagesByChannel.ContainsKey(NEARBY_CHANNEL_ID)
 49                                              ? unseenMessagesByChannel[NEARBY_CHANNEL_ID]
 50                                              : 0);
 51
 052        public bool IsInitialized => chatAlreadyInitialized;
 53
 44154        public ChatController(IChatApiBridge apiBridge,
 55            DataStore dataStore)
 56        {
 44157            this.dataStore = dataStore;
 44158            this.apiBridge = apiBridge;
 59
 44160            channels[NEARBY_CHANNEL_ID] = new Channel(NEARBY_CHANNEL_ID, NEARBY_CHANNEL_ID, 0, 0, true, false,
 61                NEARBY_CHANNEL_DESCRIPTION);
 44162        }
 63
 64        public void Dispose()
 65        {
 44166            operationsCancellationToken.Cancel();
 44167            operationsCancellationToken.Dispose();
 68
 44169            apiBridge.OnInitialized -= Initialize;
 44170            apiBridge.OnAddMessage -= AddMessages;
 44171            apiBridge.OnTotalUnseenMessagesChanged -= UpdateTotalUnseenMessages;
 44172            apiBridge.OnUserUnseenMessagesChanged -= UpdateTotalUnseenMessagesByUser;
 44173            apiBridge.OnChannelUnseenMessagesChanged -= UpdateTotalUnseenMessagesByChannel;
 44174            apiBridge.OnChannelMembersUpdated -= UpdateChannelMembers;
 44175            apiBridge.OnChannelJoined -= JoinIntoChannel;
 44176            apiBridge.OnChannelJoinFailed -= JoinChannelFailed;
 44177            apiBridge.OnChannelLeaveFailed -= LeaveChannelFailed;
 44178            apiBridge.OnChannelsUpdated -= UpdateChannelInfo;
 44179            apiBridge.OnMuteChannelFailed -= MuteChannelFailed;
 44180            apiBridge.OnChannelSearchResults -= UpdateChannelSearchResults;
 44181        }
 82
 83        public void Initialize()
 84        {
 44185            apiBridge.OnInitialized += Initialize;
 44186            apiBridge.OnAddMessage += AddMessages;
 44187            apiBridge.OnTotalUnseenMessagesChanged += UpdateTotalUnseenMessages;
 44188            apiBridge.OnUserUnseenMessagesChanged += UpdateTotalUnseenMessagesByUser;
 44189            apiBridge.OnChannelUnseenMessagesChanged += UpdateTotalUnseenMessagesByChannel;
 44190            apiBridge.OnChannelMembersUpdated += UpdateChannelMembers;
 44191            apiBridge.OnChannelJoined += JoinIntoChannel;
 44192            apiBridge.OnChannelJoinFailed += JoinChannelFailed;
 44193            apiBridge.OnChannelLeaveFailed += LeaveChannelFailed;
 44194            apiBridge.OnChannelsUpdated += UpdateChannelInfo;
 44195            apiBridge.OnMuteChannelFailed += MuteChannelFailed;
 44196            apiBridge.OnChannelSearchResults += UpdateChannelSearchResults;
 44197        }
 98
 99        private void Initialize(InitializeChatPayload msg)
 100        {
 1101            if (chatAlreadyInitialized)
 0102                return;
 103
 1104            totalUnseenMessages = msg.totalUnseenMessages;
 1105            OnInitialized?.Invoke();
 1106            OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 1107            chatAlreadyInitialized = true;
 108
 1109            if (!string.IsNullOrEmpty(msg.channelToJoin))
 0110                OnAskForJoinChannel?.Invoke($"#{msg.channelToJoin.ToLower()}");
 1111        }
 112
 113        private void UpdateTotalUnseenMessages(UpdateTotalUnseenMessagesPayload msg)
 114        {
 3115            totalUnseenMessages = msg.total;
 3116            OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 3117        }
 118
 119        private void UpdateTotalUnseenMessagesByUser((string userId, int count)[] userUnseenMessages)
 120        {
 10121            foreach (var unseenMessages in userUnseenMessages)
 122            {
 4123                string userId = unseenMessages.userId;
 4124                int count = unseenMessages.count;
 4125                unseenMessagesByUser[userId] = count;
 4126                OnUserUnseenMessagesUpdated?.Invoke(userId, count);
 127            }
 1128        }
 129
 130        private void UpdateTotalUnseenMessagesByChannel((string channelId, int count)[] unseenChannelMessages)
 131        {
 8132            foreach (var unseenMessages in unseenChannelMessages)
 3133                UpdateTotalUnseenMessagesByChannel(unseenMessages.channelId, unseenMessages.count);
 1134        }
 135
 136        private void UpdateChannelMembers(UpdateChannelMembersPayload msg) =>
 1137            OnUpdateChannelMembers?.Invoke(msg.channelId, msg.members);
 138
 139        private void JoinIntoChannel(ChannelInfoPayloads msg)
 140        {
 2141            if (msg.channelInfoPayload.Length == 0) return;
 142
 10143            foreach (var channelInfo in msg.channelInfoPayload)
 144            {
 3145                Channel channel = channelInfo.ToChannel();
 3146                string channelId = channel.ChannelId;
 147
 3148                if (channels.ContainsKey(channelId))
 0149                    channels[channelId].CopyFrom(channel);
 150                else
 3151                    channels[channelId] = channel;
 152
 3153                if (autoJoinChannelList.Contains(channelId))
 1154                    OnAutoChannelJoined?.Invoke(channel);
 155                else
 2156                    OnChannelJoined?.Invoke(channel);
 157
 3158                OnChannelUpdated?.Invoke(channel);
 3159                autoJoinChannelList.Remove(channelId);
 160
 3161                SendChannelWelcomeMessage(channel);
 162            }
 163
 164            // TODO (responsibility issues): extract to another class
 2165            AudioScriptableObjects.joinChannel.Play(true);
 2166        }
 167
 168        private void JoinChannelFailed(JoinChannelErrorPayload msg)
 169        {
 1170            OnJoinChannelError?.Invoke(msg.channelId, (ChannelErrorCode)msg.errorCode);
 1171            autoJoinChannelList.Remove(msg.channelId);
 1172        }
 173
 174        private void LeaveChannelFailed(JoinChannelErrorPayload msg)
 175        {
 1176            OnChannelLeaveError?.Invoke(msg.channelId, (ChannelErrorCode)msg.errorCode);
 1177            autoJoinChannelList.Remove(msg.channelId);
 1178        }
 179
 180        private void UpdateChannelInfo(ChannelInfoPayloads msg)
 181        {
 3182            var anyChannelLeft = false;
 183
 12184            foreach (var channelInfo in msg.channelInfoPayload)
 185            {
 3186                string channelId = channelInfo.channelId;
 3187                Channel channel = channelInfo.ToChannel();
 3188                bool justLeft = !channel.Joined;
 189
 3190                if (channels.ContainsKey(channelId))
 191                {
 1192                    justLeft = channels[channelId].Joined && !channel.Joined;
 1193                    channels[channelId].CopyFrom(channel);
 194                }
 195                else
 2196                    channels[channelId] = channel;
 197
 3198                if (justLeft)
 199                {
 1200                    OnChannelLeft?.Invoke(channelId);
 1201                    anyChannelLeft = true;
 202                }
 203
 3204                if (anyChannelLeft)
 205                {
 206                    // TODO (responsibility issues): extract to another class
 1207                    AudioScriptableObjects.leaveChannel.Play(true);
 208                }
 209
 3210                OnChannelUpdated?.Invoke(channel);
 211            }
 3212        }
 213
 214        private void MuteChannelFailed(MuteChannelErrorPayload msg)
 215        {
 1216            OnMuteChannelError?.Invoke(msg.channelId, (ChannelErrorCode)msg.errorCode);
 1217        }
 218
 219        private void UpdateChannelSearchResults(ChannelSearchResultsPayload msg)
 220        {
 1221            var channelsResult = new Channel[msg.channels.Length];
 222
 6223            for (var i = 0; i < msg.channels.Length; i++)
 224            {
 2225                ChannelInfoPayload channelPayload = msg.channels[i];
 2226                string channelId = channelPayload.channelId;
 2227                Channel channel = channelPayload.ToChannel();
 228
 2229                if (channels.ContainsKey(channelId))
 0230                    channels[channelId].CopyFrom(channel);
 231                else
 2232                    channels[channelId] = channel;
 233
 2234                channelsResult[i] = channel;
 235            }
 236
 1237            OnChannelSearchResult?.Invoke(msg.since, channelsResult);
 1238        }
 239
 240        public void LeaveChannel(string channelId)
 241        {
 0242            apiBridge.LeaveChannel(channelId);
 0243            autoJoinChannelList.Remove(channelId);
 0244        }
 245
 246        public async UniTask<Channel> JoinOrCreateChannelAsync(string channelId, CancellationToken cancellationToken = d
 247        {
 0248            CancellationTokenSource linkedCancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellati
 0249            ChannelInfoPayload payload = await apiBridge.JoinOrCreateChannelAsync(channelId, linkedCancellationToken.Tok
 0250            Channel channel = payload.ToChannel();
 0251            channels[channel.ChannelId] = channel;
 0252            OnChannelJoined?.Invoke(channel);
 0253            return channel;
 0254        }
 255
 256        public void JoinOrCreateChannel(string channelId) =>
 0257            apiBridge.JoinOrCreateChannel(channelId);
 258
 259        public void GetChannelMessages(string channelId, int limit, string fromMessageId) =>
 0260            apiBridge.GetChannelMessages(channelId, limit, fromMessageId);
 261
 262        public void GetJoinedChannels(int limit, int skip) =>
 0263            apiBridge.GetJoinedChannels(limit, skip);
 264
 265        public async UniTask<(string, Channel[])> GetChannelsByNameAsync(int limit, string name, string paginationToken 
 266            CancellationToken cancellationToken = default)
 267        {
 0268            CancellationTokenSource linkedCancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellati
 0269            ChannelSearchResultsPayload searchResult = await apiBridge.GetChannelsAsync(limit, name, paginationToken, li
 0270            return (searchResult.since, searchResult.channels.Select(payload => payload.ToChannel()).ToArray());
 0271        }
 272
 273        public void GetChannelsByName(int limit, string name, string paginationToken = null) =>
 0274            apiBridge.GetChannels(limit, paginationToken, name);
 275
 276        public void GetChannels(int limit, string paginationToken) =>
 1277            apiBridge.GetChannels(limit, paginationToken, string.Empty);
 278
 279        public void MuteChannel(string channelId)
 280        {
 0281            if (channelId == NEARBY_CHANNEL_ID)
 282            {
 0283                var channel = GetAllocatedChannel(NEARBY_CHANNEL_ID);
 284
 0285                var payload = new ChannelInfoPayloads
 286                {
 287                    channelInfoPayload = new[]
 288                    {
 289                        new ChannelInfoPayload
 290                        {
 291                            description = channel.Description,
 292                            joined = channel.Joined,
 293                            channelId = channel.ChannelId,
 294                            muted = true,
 295                            name = channel.Name,
 296                            memberCount = channel.MemberCount,
 297                            unseenMessages = channel.UnseenMessages
 298                        }
 299                    }
 300                };
 301
 0302                UpdateChannelInfo(payload);
 303            }
 304            else
 0305                apiBridge.MuteChannel(channelId, true);
 0306        }
 307
 308        public void UnmuteChannel(string channelId)
 309        {
 0310            if (channelId == NEARBY_CHANNEL_ID)
 311            {
 0312                var channel = GetAllocatedChannel(NEARBY_CHANNEL_ID);
 313
 0314                var payload = new ChannelInfoPayloads
 315                {
 316                    channelInfoPayload = new[]
 317                    {
 318                        new ChannelInfoPayload
 319                        {
 320                            description = channel.Description,
 321                            joined = channel.Joined,
 322                            channelId = channel.ChannelId,
 323                            muted = false,
 324                            name = channel.Name,
 325                            memberCount = channel.MemberCount,
 326                            unseenMessages = channel.UnseenMessages
 327                        }
 328                    }
 329                };
 330
 0331                UpdateChannelInfo(payload);
 332            }
 333            else
 0334                apiBridge.MuteChannel(channelId, false);
 0335        }
 336
 337        public Channel GetAllocatedChannel(string channelId) =>
 7338            channels.ContainsKey(channelId) ? channels[channelId] : null;
 339
 340        public Channel GetAllocatedChannelByName(string channelName) =>
 0341            channels.Values.FirstOrDefault(x => x.Name == channelName);
 342
 343        public void GetPrivateMessages(string userId, int limit, string fromMessageId) =>
 0344            apiBridge.GetPrivateMessages(userId, limit, fromMessageId);
 345
 346        public void MarkChannelMessagesAsSeen(string channelId)
 347        {
 4348            if (channelId == NEARBY_CHANNEL_ID)
 349            {
 1350                UpdateTotalUnseenMessagesByChannel(NEARBY_CHANNEL_ID, 0);
 1351                OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 352            }
 353
 4354            apiBridge.MarkChannelMessagesAsSeen(channelId);
 4355        }
 356
 357        public void GetUnseenMessagesByUser() =>
 0358            apiBridge.GetUnseenMessagesByUser();
 359
 360        public void GetUnseenMessagesByChannel() =>
 0361            apiBridge.GetUnseenMessagesByChannel();
 362
 363        public int GetAllocatedUnseenMessages(string userId) =>
 5364            unseenMessagesByUser.ContainsKey(userId) ? unseenMessagesByUser[userId] : 0;
 365
 366        public int GetAllocatedUnseenChannelMessages(string channelId) =>
 5367            !string.IsNullOrEmpty(channelId)
 368                ? unseenMessagesByChannel.ContainsKey(channelId) ? unseenMessagesByChannel[channelId] : 0
 369                : 0;
 370
 371        public void CreateChannel(string channelId) =>
 0372            apiBridge.CreateChannel(channelId);
 373
 374        public void GetChannelInfo(string[] channelIds) =>
 1375            apiBridge.GetChannelInfo(channelIds);
 376
 377        public void GetChannelMembers(string channelId, int limit, int skip, string name) =>
 0378            apiBridge.GetChannelMembers(channelId, limit, skip, name);
 379
 380        public void GetChannelMembers(string channelId, int limit, int skip) =>
 1381            apiBridge.GetChannelMembers(channelId, limit, skip, string.Empty);
 382
 383        public void Send(ChatMessage message) =>
 0384            apiBridge.SendChatMessage(message);
 385
 386        public void MarkMessagesAsSeen(string userId) =>
 1387            apiBridge.MarkMessagesAsSeen(userId);
 388
 389        private void SendChannelWelcomeMessage(Channel channel)
 390        {
 3391            var message =
 392                new ChatMessage(ChatMessage.Type.SYSTEM, "", @$"This is the start of the channel #{channel.Name}.\n
 393Invite others to join by quoting the channel name in other chats or include it as a part of your bio.")
 394                {
 395                    recipient = channel.ChannelId,
 396                    timestamp = 0,
 397                    messageId = Guid.NewGuid().ToString()
 398                };
 399
 3400            AddMessages(new[] { message });
 3401        }
 402
 403        private void AddMessages(ChatMessage[] messages)
 404        {
 4405            if (messages == null) return;
 406
 4407            var nearbyUpdated = false;
 408
 4409            var nearbyUnseenMessages = unseenMessagesByChannel.ContainsKey(NEARBY_CHANNEL_ID)
 410                ? unseenMessagesByChannel[NEARBY_CHANNEL_ID]
 411                : 0;
 412
 20413            foreach (var message in messages)
 414            {
 6415                if (message.messageType != ChatMessage.Type.PUBLIC) continue;
 2416                if (!string.IsNullOrEmpty(message.recipient)) continue;
 417
 2418                nearbyUnseenMessages++;
 2419                nearbyUpdated = true;
 420            }
 421
 4422            if (nearbyUpdated)
 423            {
 1424                UpdateTotalUnseenMessagesByChannel(NEARBY_CHANNEL_ID, nearbyUnseenMessages);
 1425                OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 426            }
 427
 4428            OnAddMessage?.Invoke(messages);
 1429        }
 430
 431        private void UpdateTotalUnseenMessagesByChannel(string channelId, int count)
 432        {
 5433            unseenMessagesByChannel[channelId] = count;
 434
 5435            if (channels.ContainsKey(channelId))
 2436                channels[channelId].UnseenMessages = count;
 437
 5438            OnChannelUnseenMessagesUpdated?.Invoke(channelId, count);
 4439        }
 440    }
 441}

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ChatController/ChatControllerContextMenuUtility.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using Cysharp.Threading.Tasks;
 4using DCL.Interface;
 5using UnityEngine;
 6using Random = UnityEngine.Random;
 7
 8namespace DCL.Social.Chat
 9{
 10    public partial class ChatController
 11    {
 12        [ContextMenu("Fake Public Message")]
 13        public void FakePublicMessage()
 14        {
 015            UserProfile ownProfile = UserProfile.GetOwnUserProfile();
 16            const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 017            var bodyLength = Random.Range(5, 30);
 018            var bodyText = "";
 019            for (var i = 0; i < bodyLength; i++)
 020                bodyText += chars[Random.Range(0, chars.Length)];
 21
 022            var model = new UserProfileModel
 23            {
 24                userId = "test user 1",
 25                name = "test user 1",
 26            };
 27
 028            UserProfileController.i.AddUserProfileToCatalog(model);
 29
 030            var model2 = new UserProfileModel()
 31            {
 32                userId = "test user 2",
 33                name = "test user 2",
 34            };
 35
 036            UserProfileController.i.AddUserProfileToCatalog(model2);
 37
 038            var msg = new ChatMessage()
 39            {
 40                body = bodyText,
 41                sender = model.userId,
 42                messageType = ChatMessage.Type.PUBLIC,
 43                timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
 44            };
 45
 046            var msg2 = new ChatMessage()
 47            {
 48                body = bodyText,
 49                sender = ownProfile.userId,
 50                messageType = ChatMessage.Type.PUBLIC,
 51                timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
 52            };
 53
 054            AddMessages(new[] {msg, msg2});
 055        }
 56
 57        [ContextMenu("Fake Private Message")]
 58        public void FakePrivateMessage()
 59        {
 060            UserProfile ownProfile = UserProfile.GetOwnUserProfile();
 61
 062            var model = new UserProfileModel()
 63            {
 64                userId = "test user 1",
 65                name = "test user 1",
 66            };
 67
 068            UserProfileController.i.AddUserProfileToCatalog(model);
 69
 070            var model2 = new UserProfileModel()
 71            {
 72                userId = "test user 2",
 73                name = "test user 2",
 74            };
 75
 076            UserProfileController.i.AddUserProfileToCatalog(model2);
 77
 078            var msg = new ChatMessage()
 79            {
 80                body = "test message",
 81                sender = model.userId,
 82                recipient = ownProfile.userId,
 83                messageType = ChatMessage.Type.PRIVATE,
 84                timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
 85            };
 86
 087            var msg2 = new ChatMessage()
 88            {
 89                body = "test message 2",
 90                recipient = model2.userId,
 91                sender = ownProfile.userId,
 92                messageType = ChatMessage.Type.PRIVATE,
 93                timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
 94            };
 95
 096            AddMessages(new[] {msg, msg2});
 097        }
 98
 99        [ContextMenu("Add fake messages to nearby")]
 100        public async UniTask AddManyFakeMessagesToNearby()
 101        {
 0102            var users = new List<UserProfileModel>();
 103
 0104            for (var i = 0; i < 10; i++)
 105            {
 0106                var userId = Guid.NewGuid().ToString();
 0107                var userProfile = new UserProfileModel
 108                {
 109                    userId = userId,
 110                    name = $"TestUser{i}"
 111                };
 112
 0113                UserProfileController.i.AddUserProfileToCatalog(userProfile);
 0114                users.Add(userProfile);
 115            }
 116
 0117            for (var i = 0; i < 100; i++)
 118            {
 0119                var user = users[Random.Range(0, users.Count)];
 120
 0121                var msg = new ChatMessage
 122                {
 123                    body = "test message",
 124                    sender = user.userId,
 125                    recipient = null,
 126                    messageType = ChatMessage.Type.PUBLIC,
 127                    timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
 128                    messageId = Guid.NewGuid().ToString(),
 129                    senderName = user.name
 130                };
 131
 0132                AddMessages(new[] {msg});
 133                // for a real scenario, only one message is added by frame
 0134                await UniTask.NextFrame();
 135            }
 0136        }
 137
 138        [ContextMenu("Add fake messages to global")]
 139        public async UniTask AddManyFakeMessagesToUnityChannel()
 140        {
 0141            var users = new List<UserProfileModel>();
 142
 0143            for (var i = 0; i < 10; i++)
 144            {
 0145                var userId = Guid.NewGuid().ToString();
 0146                var userProfile = new UserProfileModel
 147                {
 148                    userId = userId,
 149                    name = $"TestUser{i}"
 150                };
 151
 0152                UserProfileController.i.AddUserProfileToCatalog(userProfile);
 0153                users.Add(userProfile);
 154            }
 155
 0156            for (var i = 0; i < 100; i++)
 157            {
 0158                var user = users[Random.Range(0, users.Count)];
 159
 0160                var msg = new ChatMessage
 161                {
 162                    body = "test message",
 163                    sender = user.userId,
 164                    recipient = GetAllocatedChannelByName("global").ChannelId,
 165                    messageType = ChatMessage.Type.PUBLIC,
 166                    timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
 167                    messageId = Guid.NewGuid().ToString(),
 168                    senderName = user.name
 169                };
 170
 0171                AddMessages(new[] {msg});
 172                // for a real scenario, only one message is added by frame
 0173                await UniTask.NextFrame();
 174            }
 0175        }
 176    }
 177}

Methods/Properties

ChatController(DCL.Social.Chat.IChatApiBridge, DCL.DataStore)
autoJoinChannelList()
TotalUnseenMessages()
IsInitialized()
Dispose()
Initialize()
Initialize(DCL.Chat.WebApi.InitializeChatPayload)
UpdateTotalUnseenMessages(DCL.Chat.WebApi.UpdateTotalUnseenMessagesPayload)
UpdateTotalUnseenMessagesByUser(System.ValueTuple`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][])
UpdateTotalUnseenMessagesByChannel(System.ValueTuple`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][])
UpdateChannelMembers(DCL.Chat.Channels.UpdateChannelMembersPayload)
JoinIntoChannel(DCL.Chat.Channels.ChannelInfoPayloads)
JoinChannelFailed(DCL.Chat.Channels.JoinChannelErrorPayload)
LeaveChannelFailed(DCL.Chat.Channels.JoinChannelErrorPayload)
UpdateChannelInfo(DCL.Chat.Channels.ChannelInfoPayloads)
MuteChannelFailed(DCL.Chat.Channels.MuteChannelErrorPayload)
UpdateChannelSearchResults(DCL.Chat.Channels.ChannelSearchResultsPayload)
LeaveChannel(System.String)
JoinOrCreateChannelAsync()
JoinOrCreateChannel(System.String)
GetChannelMessages(System.String, System.Int32, System.String)
GetJoinedChannels(System.Int32, System.Int32)
GetChannelsByNameAsync()
GetChannelsByName(System.Int32, System.String, System.String)
GetChannels(System.Int32, System.String)
MuteChannel(System.String)
UnmuteChannel(System.String)
GetAllocatedChannel(System.String)
GetAllocatedChannelByName(System.String)
GetPrivateMessages(System.String, System.Int32, System.String)
MarkChannelMessagesAsSeen(System.String)
GetUnseenMessagesByUser()
GetUnseenMessagesByChannel()
GetAllocatedUnseenMessages(System.String)
GetAllocatedUnseenChannelMessages(System.String)
CreateChannel(System.String)
GetChannelInfo(System.String[])
GetChannelMembers(System.String, System.Int32, System.Int32, System.String)
GetChannelMembers(System.String, System.Int32, System.Int32)
Send(DCL.Interface.ChatMessage)
MarkMessagesAsSeen(System.String)
SendChannelWelcomeMessage(DCL.Chat.Channels.Channel)
AddMessages(DCL.Interface.ChatMessage[])
UpdateTotalUnseenMessagesByChannel(System.String, System.Int32)
FakePublicMessage()
FakePrivateMessage()
AddManyFakeMessagesToNearby()
AddManyFakeMessagesToUnityChannel()