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)); }
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)); }