├── .dockerignore ├── src ├── main │ ├── webapp │ │ └── resources │ │ │ ├── img │ │ │ ├── button.png │ │ │ ├── favicon.png │ │ │ ├── bigBlind.png │ │ │ └── smallBlind.png │ │ │ ├── modules │ │ │ ├── table │ │ │ │ ├── ActionOnTimer.tsx │ │ │ │ ├── MyCards.tsx │ │ │ │ ├── CardData.ts │ │ │ │ ├── CommonCards.tsx │ │ │ │ ├── SeatContainer.tsx │ │ │ │ ├── Seat.tsx │ │ │ │ └── tableStateSubscriber.ts │ │ │ ├── signup │ │ │ │ ├── sign-up-step-2-success.tsx │ │ │ │ ├── sign-up-step-1-success.tsx │ │ │ │ ├── sign-up-step-2-form.tsx │ │ │ │ ├── sign-up-step-1-form.tsx │ │ │ │ ├── sign-up-step-1.tsx │ │ │ │ └── sign-up-step-2.tsx │ │ │ ├── home │ │ │ │ ├── Chat │ │ │ │ │ ├── ChatLine.tsx │ │ │ │ │ └── selectors.ts │ │ │ │ ├── InterceptRedirect.tsx │ │ │ │ ├── GameTabs │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── GameTab.tsx │ │ │ │ ├── Logout.ts │ │ │ │ ├── MainTabs.tsx │ │ │ │ └── Navigation │ │ │ │ │ └── index.tsx │ │ │ ├── game │ │ │ │ └── GamePage.tsx │ │ │ ├── lobby │ │ │ │ ├── Lobby.tsx │ │ │ │ ├── GameList │ │ │ │ │ └── index.tsx │ │ │ │ ├── JoinGameDialog │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── JoinGameDialog.tsx │ │ │ │ └── CreateGameDialog │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── CreateGameDialog.tsx │ │ │ ├── webSocket │ │ │ │ ├── WebSocketService.ts │ │ │ │ └── WebSocketSubscriptionManager.ts │ │ │ └── login │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ └── main.css │ ├── kotlin │ │ └── com │ │ │ └── flexpoker │ │ │ ├── exception │ │ │ └── FlexPokerException.kt │ │ │ ├── game │ │ │ ├── command │ │ │ │ ├── StaticGameData.kt │ │ │ │ ├── repository │ │ │ │ │ ├── GameEventRepository.kt │ │ │ │ │ └── InMemoryGameEventRepository.kt │ │ │ │ ├── aggregate │ │ │ │ │ └── eventproducers │ │ │ │ │ │ ├── IncrementBlindsEventProducer.kt │ │ │ │ │ │ └── CreateGameEventProducer.kt │ │ │ │ ├── commands │ │ │ │ │ └── GameCommands.kt │ │ │ │ ├── handlers │ │ │ │ │ ├── CreateGameCommandHandler.kt │ │ │ │ │ ├── JoinGameCommandHandler.kt │ │ │ │ │ ├── IncrementBlindsCommandHandler.kt │ │ │ │ │ └── AttemptToStartNewHandCommandHandler.kt │ │ │ │ └── commandreceivers │ │ │ │ │ └── InMemoryAsyncGameCommandReceiver.kt │ │ │ └── query │ │ │ │ ├── repository │ │ │ │ ├── GamePlayerRepository.kt │ │ │ │ ├── GameListRepository.kt │ │ │ │ ├── OpenGameForPlayerRepository.kt │ │ │ │ └── impl │ │ │ │ │ ├── InMemoryGamePlayerRepository.kt │ │ │ │ │ └── RedisGamePlayerRepository.kt │ │ │ │ ├── dto │ │ │ │ └── GameQueryDTOs.kt │ │ │ │ └── handlers │ │ │ │ ├── PlayerBustedGameEventHandler.kt │ │ │ │ ├── BlindsIncreasedEventHandler.kt │ │ │ │ └── GameCreatedEventHandler.kt │ │ │ ├── framework │ │ │ ├── processmanager │ │ │ │ └── ProcessManager.kt │ │ │ ├── event │ │ │ │ ├── subscriber │ │ │ │ │ └── EventSubscriber.kt │ │ │ │ └── Interfaces.kt │ │ │ ├── command │ │ │ │ └── Interfaces.kt │ │ │ └── pushnotifier │ │ │ │ └── Interfaces.kt │ │ │ ├── table │ │ │ ├── query │ │ │ │ ├── repository │ │ │ │ │ ├── TableRepository.kt │ │ │ │ │ ├── CardsUsedInHandRepository.kt │ │ │ │ │ └── impl │ │ │ │ │ │ └── RedisTableRepository.kt │ │ │ │ ├── handlers │ │ │ │ │ ├── HandCompletedEventHandler.kt │ │ │ │ │ ├── PlayerBustedTableEventHandler.kt │ │ │ │ │ ├── WinnersDeterminedEventHandler.kt │ │ │ │ │ ├── RoundCompletedEventHandler.kt │ │ │ │ │ ├── PotClosedEventHandler.kt │ │ │ │ │ ├── ActionOnChangedEventHandler.kt │ │ │ │ │ ├── PotAmountIncreasedEventHandler.kt │ │ │ │ │ ├── PotCreatedEventHandler.kt │ │ │ │ │ ├── TurnCardDealtEventHandler.kt │ │ │ │ │ ├── RiverCardDealtEventHandler.kt │ │ │ │ │ └── FlopCardsDealtEventHandler.kt │ │ │ │ └── dto │ │ │ │ │ └── TableQueryDTOs.kt │ │ │ └── command │ │ │ │ ├── service │ │ │ │ ├── CardService.kt │ │ │ │ └── HandEvaluatorService.kt │ │ │ │ ├── repository │ │ │ │ ├── TableEventRepository.kt │ │ │ │ ├── InMemoryTableEventRepository.kt │ │ │ │ └── RedisTableEventRepository.kt │ │ │ │ ├── aggregate │ │ │ │ ├── eventproducers │ │ │ │ │ ├── TableUtils.kt │ │ │ │ │ ├── hand │ │ │ │ │ │ ├── FinishHandIfAppropriateEventProducer.kt │ │ │ │ │ │ ├── HandUtils.kt │ │ │ │ │ │ ├── DetermineWinnersIfAppropriate.kt │ │ │ │ │ │ ├── DealCommonCardsIfAppropriateEventProducer.kt │ │ │ │ │ │ └── HandlePotAndRoundCompleteEventProducer.kt │ │ │ │ │ ├── PauseResumeTableEventProducer.kt │ │ │ │ │ ├── CreateTableEventProducer.kt │ │ │ │ │ └── AddRemovePlayerEventProducer.kt │ │ │ │ └── RandomNumberGenerator.kt │ │ │ │ ├── handlers │ │ │ │ ├── TickActionOnTimerCommandHandler.kt │ │ │ │ ├── PauseCommandHandler.kt │ │ │ │ ├── CallCommandHandler.kt │ │ │ │ ├── FoldCommandHandler.kt │ │ │ │ ├── ResumeCommandHandler.kt │ │ │ │ ├── CheckCommandHandler.kt │ │ │ │ ├── CreateTableCommandHandler.kt │ │ │ │ ├── RaiseCommandHandler.kt │ │ │ │ ├── RemovePlayerCommandHandler.kt │ │ │ │ ├── AutoMoveHandForwardCommandHandler.kt │ │ │ │ ├── ExpireActionOnTimerCommandHandler.kt │ │ │ │ └── AddPlayerCommandHandler.kt │ │ │ │ ├── StaticTableData.kt │ │ │ │ └── eventpublishers │ │ │ │ └── InMemoryAsyncTableEventPublisher.kt │ │ │ ├── web │ │ │ ├── dto │ │ │ │ ├── OutgoingWebDTOs.kt │ │ │ │ └── IncomingWebDTOs.kt │ │ │ ├── controller │ │ │ │ ├── HomeController.kt │ │ │ │ └── LoginController.kt │ │ │ └── commandsenders │ │ │ │ ├── InMemoryAsyncGameCommandSender.kt │ │ │ │ └── InMemoryAsyncTableCommandSender.kt │ │ │ ├── Application.kt │ │ │ ├── util │ │ │ ├── PasswordUtils.kt │ │ │ ├── PCollectionExtensions.kt │ │ │ └── MessagingConstants.kt │ │ │ ├── chat │ │ │ ├── repository │ │ │ │ └── ChatRepository.kt │ │ │ └── service │ │ │ │ └── ChatService.kt │ │ │ ├── login │ │ │ └── repository │ │ │ │ └── LoginRepository.kt │ │ │ ├── signup │ │ │ ├── repository │ │ │ │ └── SignUpRepository.kt │ │ │ └── SignUpUser.kt │ │ │ ├── config │ │ │ ├── WebConfig.kt │ │ │ ├── ProfileNames.kt │ │ │ ├── WebSocketConfig.kt │ │ │ └── SecurityConfig.kt │ │ │ ├── pushnotificationhandlers │ │ │ ├── ChatSentPushNotificationHandler.kt │ │ │ ├── TickActionOnTimerPushNotificationHandler.kt │ │ │ ├── GameListUpdatedPushNotificationHandler.kt │ │ │ ├── TableUpdatedPushNotificationHandler.kt │ │ │ ├── OpenTableForUserPushNotificationHandler.kt │ │ │ ├── SendUserPocketCardsPushNotificationHandler.kt │ │ │ └── OpenGamesForPlayerUpdatedPushNotificationHandler.kt │ │ │ ├── processmanagers │ │ │ ├── PauseTableProcessManager.kt │ │ │ ├── ResumeTableProcessManager.kt │ │ │ ├── AttemptToStartNewHandForExistingTableProcessManager.kt │ │ │ ├── StartNewHandForExistingTableProcessManager.kt │ │ │ ├── StartFirstHandProcessManager.kt │ │ │ ├── CreateInitialTablesForGameProcessManager.kt │ │ │ ├── MovePlayerBetweenTablesProcessManager.kt │ │ │ ├── AutoMoveHandForwardProcessManager.kt │ │ │ └── IncrementBlindsCountdownProcessManager.kt │ │ │ └── pushnotifications │ │ │ └── PushNotifications.kt │ └── resources │ │ ├── redis-scripts │ │ └── check-and-set.lua │ │ └── index.html └── test │ └── kotlin │ └── com │ └── flexpoker │ ├── test │ └── util │ │ ├── TestContainersUtils.kt │ │ ├── datageneration │ │ ├── DeckGenerator.kt │ │ └── CardGenerator.kt │ │ ├── TestClassAnnotations.kt │ │ └── CommonAssertions.kt │ ├── table │ ├── command │ │ ├── aggregate │ │ │ ├── testhelpers │ │ │ │ └── TestRandomNumberGenerator.kt │ │ │ ├── DefaultRandomNumberGeneratorTest.kt │ │ │ ├── pot │ │ │ │ └── PotTestUtils.kt │ │ │ ├── generic │ │ │ │ ├── PauseTableTest.kt │ │ │ │ └── RemovePlayerFromTableTest.kt │ │ │ └── TableUtilsTest.kt │ │ ├── repository │ │ │ ├── InMemoryTableEventRepositoryTest.kt │ │ │ └── RedisTableEventRepositoryTest.kt │ │ └── service │ │ │ └── DefaultCardServiceTest.kt │ └── query │ │ └── repository │ │ └── impl │ │ ├── InMemoryCardsUsedInHandRepositoryTest.kt │ │ ├── RedisCardsUsedInHandRepositoryTest.kt │ │ ├── InMemoryTableRepositoryTest.kt │ │ └── RedisTableRepositoryTest.kt │ ├── chat │ └── repository │ │ ├── InMemoryChatRepositoryTest.kt │ │ └── RedisChatRepositoryTest.kt │ ├── game │ ├── query │ │ └── repository │ │ │ └── impl │ │ │ ├── InMemoryGamePlayerRepositoryTest.kt │ │ │ ├── RedisGamePlayerRepositoryTest.kt │ │ │ ├── InMemoryOpenGameForPlayerRepositoryTest.kt │ │ │ ├── SharedGamePlayerRepositoryTest.kt │ │ │ ├── InMemoryGameListRepositoryTest.kt │ │ │ ├── RedisOpenGameForPlayerRepositoryTest.kt │ │ │ └── RedisGameListRepositoryTest.kt │ └── command │ │ ├── aggregate │ │ ├── tablebalancer │ │ │ ├── TableBalancerTestUtils.kt │ │ │ └── TableBalancerResumedTableTest.kt │ │ ├── CreateNewGameTest.kt │ │ └── BlindScheduleTest.kt │ │ └── repository │ │ └── InMemoryGameEventRepositoryTest.kt │ ├── login │ └── repository │ │ ├── InMemoryLoginRepositoryTest.kt │ │ ├── RedisLoginRepositoryTest.kt │ │ └── SharedLoginRepositoryTest.kt │ ├── archtest │ ├── ServiceArchTests.kt │ ├── ControllerArchTests.kt │ └── Utils.kt │ └── signup │ └── repository │ ├── InMemorySignUpRepositoryTest.kt │ └── RedisSignUpRepositoryTest.kt ├── tsconfig.json ├── .gitignore ├── Dockerfile ├── package.json └── webpack.config.js /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | node_modules/ 3 | target/ 4 | -------------------------------------------------------------------------------- /src/main/webapp/resources/img/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cwoolner/flex-poker/HEAD/src/main/webapp/resources/img/button.png -------------------------------------------------------------------------------- /src/main/webapp/resources/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cwoolner/flex-poker/HEAD/src/main/webapp/resources/img/favicon.png -------------------------------------------------------------------------------- /src/main/webapp/resources/img/bigBlind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cwoolner/flex-poker/HEAD/src/main/webapp/resources/img/bigBlind.png -------------------------------------------------------------------------------- /src/main/webapp/resources/img/smallBlind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cwoolner/flex-poker/HEAD/src/main/webapp/resources/img/smallBlind.png -------------------------------------------------------------------------------- /src/main/webapp/resources/modules/table/ActionOnTimer.tsx: -------------------------------------------------------------------------------- 1 | export default ({actionOnTick}) => { 2 | return ( 3 |
Email sent to {email} (TODO: not working yet)
6 | 7 | > 8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /src/main/kotlin/com/flexpoker/table/command/repository/TableEventRepository.kt: -------------------------------------------------------------------------------- 1 | package com.flexpoker.table.command.repository 2 | 3 | import com.flexpoker.table.command.events.TableEvent 4 | import java.util.UUID 5 | 6 | interface TableEventRepository { 7 | fun fetchAll(id: UUID): List{seat.name}
11 |{seat.chipsInFront}
12 |{seat.chipsInBack}
13 | {seat.isButton ?
: null}
14 | {seat.isSmallBlind ?
: null}
15 | {seat.isBigBlind ?
: null}
16 |