Exemple #1
0
 static async Task PublishRoomEventsAsync(RoomState room)
 {
     try
     {
         if (room.Action == RoomAction.Leave)
         {
             if (!room.TakenSeats.Any())
             {
                 room.Action = RoomAction.Enter;
             }
             else
             {
                 await LeaveSeatsAsync(room, random.Next(1, MaxLeaveSeatCount));
             }
         }
         else
         {
             if (!room.EmptySeats.Any())
             {
                 room.Action = RoomAction.Leave;
             }
             else
             {
                 await TakeSeatsAsync(room, random.Next(1, MaxTakeSeatCount));
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Failed to publish events for room '{room.RoomId}'. Details: {ex}");
     }
 }
Exemple #2
0
        private static Task LeaveSeatAsync(RoomState room)
        {
            // Pick an occupied seat.
            var seatNumber = room.TakenSeats[random.Next(room.TakenSeats.Count)];

            // Mark the seat as taken.
            room.TakenSeats.Remove(seatNumber);
            room.EmptySeats.Add(seatNumber);

            return(room.EventPublisher.PublishEventsAsync(room.RoomId, seatNumber, false));
        }
Exemple #3
0
        private static async Task TakeSeatsAsync(RoomState room, int count)
        {
            for (int i = 0; i < count; i++)
            {
                if (!room.EmptySeats.Any())
                {
                    return;
                }

                await TakeSeatAsync(room);
            }
        }