public async Task <bool> Handle(OnDisconnectCommand request, CancellationToken cancellationToken)
        {
            // Get User from Cache
            CacheUser cacheUser = await _chatCacheModule.GetUserAsync(request.ConnectionId, cancellationToken);

            if (cacheUser == null)
            {
                throw new Exception("User doesnt exist");
            }

            // Leave From Previous Room
            if (cacheUser.ConnectedRoomId != null)
            {
                await _mediator.Send(
                    new LeaveFromRoomCommand()
                {
                    ConnectionId = request.ConnectionId, DateTime = request.DateTime
                },
                    cancellationToken);
            }

            // Logout
            await _chatCacheModule.RemoveUserAsync(request.ConnectionId, cancellationToken);

            // Publish
            await _mediator.Publish(
                new UserDisconnectedNotification()
            {
                ConnectionId = request.ConnectionId
            }, cancellationToken);

            return(await Task.FromResult(true));
        }
        public async Task <bool> Handle(LeaveFromRoomCommand request, CancellationToken cancellationToken)
        {
            // Get User from Cache
            CacheUser cacheUser = await _chatCacheModule.GetUserAsync(request.ConnectionId, cancellationToken);

            if (cacheUser == null)
            {
                throw new Exception("User doesnt exist. Please login");
            }

            // Set User's Room
            if (cacheUser.ConnectedRoomId == null)
            {
                throw new Exception("User didnt join any room. Please join to a room");
            }

            var userLeftNotification = new UserLeftNotification()
            {
                NickName = cacheUser.NickName, RoomId = cacheUser.ConnectedRoomId, ConnectionId = request.ConnectionId
            };

            cacheUser.ConnectedRoomId = null;
            await _chatCacheModule.SetUserAsync(cacheUser, cancellationToken);

            // Publish
            await _mediator.Publish(
                userLeftNotification,
                cancellationToken);

            return(await Task.FromResult(true));
        }
Ejemplo n.º 3
0
        public async Task <CacheRoom> Handle(JoinToRoomCommand request, CancellationToken cancellationToken)
        {
            // Get User from Cache
            CacheUser cacheUser = await _chatCacheModule.GetUserAsync(request.ConnectionId, cancellationToken);

            if (cacheUser == null)
            {
                throw new Exception("User doesnt exist. Please login");
            }

            // Leave From Previous Room
            if (cacheUser.ConnectedRoomId != null)
            {
                await _mediator.Send(
                    new LeaveFromRoomCommand()
                {
                    ConnectionId = request.ConnectionId, DateTime = request.DateTime
                },
                    cancellationToken);
            }

            // Update User's Room
            cacheUser.ConnectedRoomId = request.RoomId;
            await _chatCacheModule.SetUserAsync(cacheUser, cancellationToken);

            // Publish
            await _mediator.Publish(
                new UserJoinedNotification()
            {
                NickName     = cacheUser.NickName,
                RoomId       = cacheUser.ConnectedRoomId,
                ConnectionId = request.ConnectionId
            }
                , cancellationToken);

            // Get Room
            return(await _chatCacheModule.GetRoomAsync(request.RoomId, cancellationToken));
        }
Ejemplo n.º 4
0
        public async Task <bool> Handle(SendMessageCommand request, CancellationToken cancellationToken)
        {
            // Get User from Cache
            CacheUser cacheUser = await _chatCacheModule.GetUserAsync(request.ConnectionId, cancellationToken);

            if (cacheUser == null)
            {
                throw new Exception("User doesnt exist. Please login");
            }

            // Get User's Room from Cache
            if (cacheUser.ConnectedRoomId == null)
            {
                throw new Exception("User didnt join any room. Please join to a room");
            }
            CacheRoom cacheRoom = await _chatCacheModule.GetRoomAsync(cacheUser.ConnectedRoomId, cancellationToken);

            // Set Room Message
            CacheMessage cacheMessage = new CacheMessage()
            {
                Message = request.Message, DateTime = request.DateTime, SenderNickName = cacheUser.NickName
            };

            cacheRoom.Messages.Add(cacheMessage);
            await _chatCacheModule.SetRoomAsync(cacheRoom, cancellationToken);

            // Publish
            await _mediator.Publish(
                new ReceiveMessageNotification()
            {
                RoomId = cacheUser.ConnectedRoomId, ConnectionId = request.ConnectionId, CacheMessage = cacheMessage
            },
                cancellationToken);

            return(await Task.FromResult(true));
        }