예제 #1
0
        public async Task <IActionResult> Index(string threadId)
        {
            if (threadId == null)
            {
                return(this.RedirectToAction(nameof(this.Error)));
            }

            if (!Guid.TryParse(threadId, out var threadGuid))
            {
                return(this.RedirectToAction(nameof(this.Error)));
            }

            var thread = await _threadDbReader.SearchThreadModelAsync(threadGuid);

            if (thread == null)
            {
                return(this.RedirectToAction(nameof(this.Error)));
            }

            var threadRoomViewModel = new ThreadRoomViewModel(thread.ThreadTitle, thread.ThreadId, HttpContext.Request.Host.Value);

            return(this.View(threadRoomViewModel));
        }
예제 #2
0
        public async Task EnterThreadRoom(Guid threadId)
        {
            var thread = await _threadDbReader.SearchThreadModelAsync(threadId);

            if (thread == null)
            {
                await Clients.Caller.EnterRoomResultAsync(false, Array.Empty <ThreadMessage>());
            }

            string groupName = threadId.ToString();

            await Groups.AddToGroupAsync(Context.ConnectionId, groupName);

            var group = new Group(groupName, threadId);

            _connectionGroupCache.Add(Context.ConnectionId, group);

            var comments = await _commentAccessor.ReadCommentAsync(group.ThreadId);

            var messages = comments.Select(x => new ThreadMessage(x.Message)).ToArray();

            await Clients.Caller.EnterRoomResultAsync(true, messages);
        }