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));
        }
Beispiel #2
0
 public async Task SetRoomAsync(CacheRoom cacheRoom, CancellationToken cancellationToken)
 {
     await _cacheDatabase.AddAsync(ROOM_KEY + cacheRoom.RoomId, cacheRoom, cancellationToken);
 }
Beispiel #3
0
 public void SetRoom(CacheRoom cacheRoom)
 {
     _cacheDatabase.Add(ROOM_KEY + cacheRoom.RoomId, cacheRoom);
 }