< Summary

Class:DCL.Social.Chat.ChatController
Assembly:ChatController
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ChatController/ChatController.cs
/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ChatController/ChatControllerContextMenuUtility.cs
Covered lines:124
Uncovered lines:79
Coverable lines:203
Total lines:578
Line coverage:61% (124 of 203)
Covered branches:0
Total branches:0

Metrics

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

File(s)

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

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using DCL.Chat.Channels;
 5using DCL.Chat.WebApi;
 6using DCL.Interface;
 7
 8namespace DCL.Social.Chat
 9{
 10    public partial class ChatController : IChatController
 11    {
 12        private const string NEARBY_CHANNEL_DESCRIPTION =
 13            "Talk to the people around you. If you move far away from someone you will lose contact. All whispers will b
 14
 15        private const string NEARBY_CHANNEL_ID = "nearby";
 16
 1317        public static ChatController i { get; private set; }
 18
 1819        private readonly Dictionary<string, int> unseenMessagesByUser = new Dictionary<string, int>();
 1820        private readonly Dictionary<string, int> unseenMessagesByChannel = new Dictionary<string, int>();
 1821        private readonly Dictionary<string, Channel> channels = new Dictionary<string, Channel>();
 822        private HashSet<string> autoJoinChannelList => dataStore.HUDs.autoJoinChannelList.Get();
 23        private bool chatAlreadyInitialized;
 24        private int totalUnseenMessages;
 25        private readonly DataStore dataStore;
 26        private readonly IChatApiBridge apiBridge;
 27
 28        public event Action<Channel> OnChannelUpdated;
 29        public event Action<Channel> OnChannelJoined;
 30        public event Action<Channel> OnAutoChannelJoined;
 31        public event Action<string, ChannelErrorCode> OnJoinChannelError;
 32        public event Action<string> OnChannelLeft;
 33        public event Action<string, ChannelErrorCode> OnChannelLeaveError;
 34        public event Action<string, ChannelErrorCode> OnMuteChannelError;
 35        public event Action OnInitialized;
 36        public event Action<ChatMessage[]> OnAddMessage;
 37        public event Action<int> OnTotalUnseenMessagesUpdated;
 38        public event Action<string, int> OnUserUnseenMessagesUpdated;
 39        public event Action<string, ChannelMember[]> OnUpdateChannelMembers;
 40        public event Action<string, Channel[]> OnChannelSearchResult;
 41        public event Action<string, int> OnChannelUnseenMessagesUpdated;
 42        public event Action<string> OnAskForJoinChannel;
 43
 44        // since kernel does not calculate the #nearby channel unseen messages, it is handled on renderer side
 1045        public int TotalUnseenMessages => totalUnseenMessages
 46                                          + (unseenMessagesByChannel.ContainsKey(NEARBY_CHANNEL_ID)
 47                                              ? unseenMessagesByChannel[NEARBY_CHANNEL_ID]
 48                                              : 0);
 49
 050        public bool IsInitialized => chatAlreadyInitialized;
 51
 1852        public ChatController(IChatApiBridge apiBridge,
 53            DataStore dataStore)
 54        {
 1855            this.dataStore = dataStore;
 1856            this.apiBridge = apiBridge;
 57
 1858            channels[NEARBY_CHANNEL_ID] = new Channel(NEARBY_CHANNEL_ID, NEARBY_CHANNEL_ID, 0, 0, true, false,
 59                NEARBY_CHANNEL_DESCRIPTION);
 60
 1861            apiBridge.OnInitialized += Initialize;
 1862            apiBridge.OnAddMessage += AddMessages;
 1863            apiBridge.OnTotalUnseenMessagesChanged += UpdateTotalUnseenMessages;
 1864            apiBridge.OnUserUnseenMessagesChanged += UpdateTotalUnseenMessagesByUser;
 1865            apiBridge.OnChannelUnseenMessagesChanged += UpdateTotalUnseenMessagesByChannel;
 1866            apiBridge.OnChannelMembersUpdated += UpdateChannelMembers;
 1867            apiBridge.OnChannelJoined += JoinIntoChannel;
 1868            apiBridge.OnChannelJoinFailed += JoinChannelFailed;
 1869            apiBridge.OnChannelLeaveFailed += LeaveChannelFailed;
 1870            apiBridge.OnChannelsUpdated += UpdateChannelInfo;
 1871            apiBridge.OnMuteChannelFailed += MuteChannelFailed;
 1872            apiBridge.OnChannelSearchResults += UpdateChannelSearchResults;
 1873        }
 74
 75        public static void CreateSharedInstance(IChatApiBridge apiBridge, DataStore dataStore)
 76        {
 277            i = new ChatController(apiBridge, dataStore);
 278        }
 79
 80        private void Initialize(InitializeChatPayload msg)
 81        {
 182            if (chatAlreadyInitialized)
 083                return;
 84
 185            totalUnseenMessages = msg.totalUnseenMessages;
 186            OnInitialized?.Invoke();
 187            OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 188            chatAlreadyInitialized = true;
 89
 190            if (!string.IsNullOrEmpty(msg.channelToJoin))
 091                OnAskForJoinChannel?.Invoke($"#{msg.channelToJoin.ToLower()}");
 192        }
 93
 94        private void UpdateTotalUnseenMessages(UpdateTotalUnseenMessagesPayload msg)
 95        {
 396            totalUnseenMessages = msg.total;
 397            OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 398        }
 99
 100        private void UpdateTotalUnseenMessagesByUser((string userId, int count)[] userUnseenMessages)
 101        {
 10102            foreach (var unseenMessages in userUnseenMessages)
 103            {
 4104                var userId = unseenMessages.userId;
 4105                var count = unseenMessages.count;
 4106                unseenMessagesByUser[userId] = count;
 4107                OnUserUnseenMessagesUpdated?.Invoke(userId, count);
 108            }
 1109        }
 110
 111        private void UpdateTotalUnseenMessagesByChannel((string channelId, int count)[] unseenChannelMessages)
 112        {
 8113            foreach (var unseenMessages in unseenChannelMessages)
 3114                UpdateTotalUnseenMessagesByChannel(unseenMessages.channelId, unseenMessages.count);
 1115        }
 116
 117        private void UpdateChannelMembers(UpdateChannelMembersPayload msg) =>
 1118            OnUpdateChannelMembers?.Invoke(msg.channelId, msg.members);
 119
 120        private void JoinIntoChannel(ChannelInfoPayloads msg)
 121        {
 2122            if (msg.channelInfoPayload.Length == 0) return;
 123
 10124            foreach (var channelInfo in msg.channelInfoPayload)
 125            {
 3126                var channel = new Channel(channelInfo.channelId, channelInfo.name, channelInfo.unseenMessages,
 127                    channelInfo.memberCount, channelInfo.joined, channelInfo.muted, channelInfo.description);
 3128                var channelId = channel.ChannelId;
 129
 3130                if (channels.ContainsKey(channelId))
 0131                    channels[channelId].CopyFrom(channel);
 132                else
 3133                    channels[channelId] = channel;
 134
 3135                if (autoJoinChannelList.Contains(channelId))
 1136                    OnAutoChannelJoined?.Invoke(channel);
 137                else
 2138                    OnChannelJoined?.Invoke(channel);
 139
 3140                OnChannelUpdated?.Invoke(channel);
 3141                autoJoinChannelList.Remove(channelId);
 142
 3143                SendChannelWelcomeMessage(channel);
 144            }
 145
 146            // TODO (responsibility issues): extract to another class
 2147            AudioScriptableObjects.joinChannel.Play(true);
 2148        }
 149
 150        private void JoinChannelFailed(JoinChannelErrorPayload msg)
 151        {
 1152            OnJoinChannelError?.Invoke(msg.channelId, (ChannelErrorCode) msg.errorCode);
 1153            autoJoinChannelList.Remove(msg.channelId);
 1154        }
 155
 156        private void LeaveChannelFailed(JoinChannelErrorPayload msg)
 157        {
 1158            OnChannelLeaveError?.Invoke(msg.channelId, (ChannelErrorCode) msg.errorCode);
 1159            autoJoinChannelList.Remove(msg.channelId);
 1160        }
 161
 162        private void UpdateChannelInfo(ChannelInfoPayloads msg)
 163        {
 3164            var anyChannelLeft = false;
 165
 12166            foreach (var channelInfo in msg.channelInfoPayload)
 167            {
 3168                var channelId = channelInfo.channelId;
 3169                var channel = new Channel(channelId, channelInfo.name, channelInfo.unseenMessages,
 170                    channelInfo.memberCount,
 171                    channelInfo.joined, channelInfo.muted, channelInfo.description);
 3172                var justLeft = !channel.Joined;
 173
 3174                if (channels.ContainsKey(channelId))
 175                {
 1176                    justLeft = channels[channelId].Joined && !channel.Joined;
 1177                    channels[channelId].CopyFrom(channel);
 178                }
 179                else
 2180                    channels[channelId] = channel;
 181
 3182                if (justLeft)
 183                {
 1184                    OnChannelLeft?.Invoke(channelId);
 1185                    anyChannelLeft = true;
 186                }
 187
 3188                if (anyChannelLeft)
 189                {
 190                    // TODO (responsibility issues): extract to another class
 1191                    AudioScriptableObjects.leaveChannel.Play(true);
 192                }
 193
 3194                OnChannelUpdated?.Invoke(channel);
 195            }
 3196        }
 197
 198        private void MuteChannelFailed(MuteChannelErrorPayload msg)
 199        {
 1200            OnMuteChannelError?.Invoke(msg.channelId, (ChannelErrorCode) msg.errorCode);
 1201        }
 202
 203        private void UpdateChannelSearchResults(ChannelSearchResultsPayload msg)
 204        {
 1205            var channelsResult = new Channel[msg.channels.Length];
 206
 6207            for (var i = 0; i < msg.channels.Length; i++)
 208            {
 2209                var channelPayload = msg.channels[i];
 2210                var channelId = channelPayload.channelId;
 2211                var channel = new Channel(channelId, channelPayload.name, channelPayload.unseenMessages,
 212                    channelPayload.memberCount,
 213                    channelPayload.joined, channelPayload.muted, channelPayload.description);
 214
 2215                if (channels.ContainsKey(channelId))
 0216                    channels[channelId].CopyFrom(channel);
 217                else
 2218                    channels[channelId] = channel;
 219
 2220                channelsResult[i] = channel;
 221            }
 222
 1223            OnChannelSearchResult?.Invoke(msg.since, channelsResult);
 1224        }
 225
 226        public void LeaveChannel(string channelId)
 227        {
 0228            apiBridge.LeaveChannel(channelId);
 0229            autoJoinChannelList.Remove(channelId);
 0230        }
 231
 0232        public void JoinOrCreateChannel(string channelId) => apiBridge.JoinOrCreateChannel(channelId);
 233
 234        public void GetChannelMessages(string channelId, int limit, string fromMessageId) =>
 0235            apiBridge.GetChannelMessages(channelId, limit, fromMessageId);
 236
 0237        public void GetJoinedChannels(int limit, int skip) => apiBridge.GetJoinedChannels(limit, skip);
 238
 239        public void GetChannelsByName(int limit, string name, string paginationToken = null) =>
 0240            apiBridge.GetChannels(limit, paginationToken, name);
 241
 242        public void GetChannels(int limit, string paginationToken) =>
 1243            apiBridge.GetChannels(limit, paginationToken, string.Empty);
 244
 245        public void MuteChannel(string channelId)
 246        {
 0247            if (channelId == NEARBY_CHANNEL_ID)
 248            {
 0249                var channel = GetAllocatedChannel(NEARBY_CHANNEL_ID);
 0250                var payload = new ChannelInfoPayloads
 251                {
 252                    channelInfoPayload = new[]
 253                    {
 254                        new ChannelInfoPayload
 255                        {
 256                            description = channel.Description,
 257                            joined = channel.Joined,
 258                            channelId = channel.ChannelId,
 259                            muted = true,
 260                            name = channel.Name,
 261                            memberCount = channel.MemberCount,
 262                            unseenMessages = channel.UnseenMessages
 263                        }
 264                    }
 265                };
 266
 0267                UpdateChannelInfo(payload);
 268            }
 269            else
 0270                apiBridge.MuteChannel(channelId, true);
 0271        }
 272
 273        public void UnmuteChannel(string channelId)
 274        {
 0275            if (channelId == NEARBY_CHANNEL_ID)
 276            {
 0277                var channel = GetAllocatedChannel(NEARBY_CHANNEL_ID);
 0278                var payload = new ChannelInfoPayloads
 279                {
 280                    channelInfoPayload = new[]
 281                    {
 282                        new ChannelInfoPayload
 283                        {
 284                            description = channel.Description,
 285                            joined = channel.Joined,
 286                            channelId = channel.ChannelId,
 287                            muted = false,
 288                            name = channel.Name,
 289                            memberCount = channel.MemberCount,
 290                            unseenMessages = channel.UnseenMessages
 291                        }
 292                    }
 293                };
 294
 0295                UpdateChannelInfo(payload);
 296            }
 297            else
 0298                apiBridge.MuteChannel(channelId, false);
 0299        }
 300
 301        public Channel GetAllocatedChannel(string channelId) =>
 7302            channels.ContainsKey(channelId) ? channels[channelId] : null;
 303
 304        public Channel GetAllocatedChannelByName(string channelName) =>
 0305            channels.Values.FirstOrDefault(x => x.Name == channelName);
 306
 307        public void GetPrivateMessages(string userId, int limit, string fromMessageId) =>
 0308            apiBridge.GetPrivateMessages(userId, limit, fromMessageId);
 309
 310        public void MarkChannelMessagesAsSeen(string channelId)
 311        {
 4312            if (channelId == NEARBY_CHANNEL_ID)
 313            {
 1314                UpdateTotalUnseenMessagesByChannel(NEARBY_CHANNEL_ID, 0);
 1315                OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 316            }
 317
 4318            apiBridge.MarkChannelMessagesAsSeen(channelId);
 4319        }
 320
 0321        public void GetUnseenMessagesByUser() => apiBridge.GetUnseenMessagesByUser();
 322
 0323        public void GetUnseenMessagesByChannel() => apiBridge.GetUnseenMessagesByChannel();
 324
 325        public int GetAllocatedUnseenMessages(string userId) =>
 5326            unseenMessagesByUser.ContainsKey(userId) ? unseenMessagesByUser[userId] : 0;
 327
 328        public int GetAllocatedUnseenChannelMessages(string channelId) =>
 5329            !string.IsNullOrEmpty(channelId)
 330                ? unseenMessagesByChannel.ContainsKey(channelId) ? unseenMessagesByChannel[channelId] : 0
 331                : 0;
 332
 0333        public void CreateChannel(string channelId) => apiBridge.CreateChannel(channelId);
 334
 0335        public void GetChannelInfo(string[] channelIds) => apiBridge.GetChannelInfo(channelIds);
 336
 337        public void GetChannelMembers(string channelId, int limit, int skip, string name) =>
 0338            apiBridge.GetChannelMembers(channelId, limit, skip, name);
 339
 340        public void GetChannelMembers(string channelId, int limit, int skip) =>
 0341            apiBridge.GetChannelMembers(channelId, limit, skip, string.Empty);
 342
 0343        public void Send(ChatMessage message) => apiBridge.SendChatMessage(message);
 344
 1345        public void MarkMessagesAsSeen(string userId) => apiBridge.MarkMessagesAsSeen(userId);
 346
 347        private void SendChannelWelcomeMessage(Channel channel)
 348        {
 3349            var message =
 350                new ChatMessage(ChatMessage.Type.SYSTEM, "", @$"This is the start of the channel #{channel.Name}.\n
 351Invite others to join by quoting the channel name in other chats or include it as a part of your bio.")
 352                {
 353                    recipient = channel.ChannelId,
 354                    timestamp = 0,
 355                    isChannelMessage = true,
 356                    messageId = Guid.NewGuid().ToString()
 357                };
 358
 3359            AddMessages(new[] {message});
 3360        }
 361
 362        private void AddMessages(ChatMessage[] messages)
 363        {
 4364            if (messages == null) return;
 365
 4366            var nearbyUpdated = false;
 4367            var nearbyUnseenMessages = unseenMessagesByChannel.ContainsKey(NEARBY_CHANNEL_ID)
 368                ? unseenMessagesByChannel[NEARBY_CHANNEL_ID]
 369                : 0;
 370
 20371            foreach (var message in messages)
 372            {
 6373                if (message.messageType != ChatMessage.Type.PUBLIC) continue;
 2374                if (!string.IsNullOrEmpty(message.recipient)) continue;
 375
 2376                nearbyUnseenMessages++;
 2377                nearbyUpdated = true;
 378            }
 379
 4380            if (nearbyUpdated)
 381            {
 1382                UpdateTotalUnseenMessagesByChannel(NEARBY_CHANNEL_ID, nearbyUnseenMessages);
 1383                OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 384            }
 385
 4386            OnAddMessage?.Invoke(messages);
 1387        }
 388
 389        private void UpdateTotalUnseenMessagesByChannel(string channelId, int count)
 390        {
 5391            unseenMessagesByChannel[channelId] = count;
 392
 5393            if (channels.ContainsKey(channelId))
 2394                channels[channelId].UnseenMessages = count;
 395
 5396            OnChannelUnseenMessagesUpdated?.Invoke(channelId, count);
 3397        }
 398    }
 399}

/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                    isChannelMessage = true,
 129                    messageId = Guid.NewGuid().ToString(),
 130                    senderName = user.name
 131                };
 132
 0133                AddMessages(new[] {msg});
 134                // for a real scenario, only one message is added by frame
 0135                await UniTask.NextFrame();
 136            }
 0137        }
 138
 139        [ContextMenu("Add fake messages to global")]
 140        public async UniTask AddManyFakeMessagesToUnityChannel()
 141        {
 0142            var users = new List<UserProfileModel>();
 143
 0144            for (var i = 0; i < 10; i++)
 145            {
 0146                var userId = Guid.NewGuid().ToString();
 0147                var userProfile = new UserProfileModel
 148                {
 149                    userId = userId,
 150                    name = $"TestUser{i}"
 151                };
 152
 0153                UserProfileController.i.AddUserProfileToCatalog(userProfile);
 0154                users.Add(userProfile);
 155            }
 156
 0157            for (var i = 0; i < 100; i++)
 158            {
 0159                var user = users[Random.Range(0, users.Count)];
 160
 0161                var msg = new ChatMessage
 162                {
 163                    body = "test message",
 164                    sender = user.userId,
 165                    recipient = GetAllocatedChannelByName("global").ChannelId,
 166                    messageType = ChatMessage.Type.PUBLIC,
 167                    timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
 168                    isChannelMessage = true,
 169                    messageId = Guid.NewGuid().ToString(),
 170                    senderName = user.name
 171                };
 172
 0173                AddMessages(new[] {msg});
 174                // for a real scenario, only one message is added by frame
 0175                await UniTask.NextFrame();
 176            }
 0177        }
 178    }
 179}

Methods/Properties

i()
i(DCL.Social.Chat.ChatController)
ChatController(DCL.Social.Chat.IChatApiBridge, DCL.DataStore)
autoJoinChannelList()
TotalUnseenMessages()
IsInitialized()
CreateSharedInstance(DCL.Social.Chat.IChatApiBridge, DCL.DataStore)
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)
JoinOrCreateChannel(System.String)
GetChannelMessages(System.String, System.Int32, System.String)
GetJoinedChannels(System.Int32, System.Int32)
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()