From 370b746a884f3b26cc99c0f482cb0e1b3ca08c81 Mon Sep 17 00:00:00 2001 From: Florent CARRE <{ID}+{username}@users.noreply.github.com> Date: Sat, 2 Mar 2024 23:41:25 +0100 Subject: [PATCH] update doc for v2 --- 4players.gif | Bin 64103 -> 0 bytes CONTRIBUTING.md | 123 +++++++++--------------------------------------- README.md | 31 +----------- 3 files changed, 24 insertions(+), 130 deletions(-) delete mode 100644 4players.gif diff --git a/4players.gif b/4players.gif deleted file mode 100644 index 3a9de8835d0399293a60015c9a4d1c71286ff156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64103 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%0DhC{eU@@+1+k^)pnGU+LWXNhm~T1 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 Dd^H+p diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 680a573..4d9b383 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,16 +3,27 @@ This page provide technical information to facilitate future maintenance of the project. - [Contributing](#contributing) + - [Building the frontend and the backed](#building-the-frontend-and-the-backed) - [Building backend from sources](#building-backend-from-sources) - - [Deployments methods](#deployments-methods) - - [Use CLI in console mode](#use-cli-in-console-mode) - - [Deploy the game for Web based access](#deploy-the-game-for-web-based-access) - [Information for developers](#information-for-developers) - - [Client console](#client-console) + - [Web client](#web-client) - [Server](#server) - [High level design](#high-level-design) - [Low level design](#low-level-design) - [Debug log](#debug-log) + - [Code coverage](#code-coverage) + +## Building the frontend and the backed + +Prerequisites: + +- install node.js and ionic CLI +- install go 1.21 + +```bash +make ionic-build +make docker-build +``` ## Building backend from sources @@ -38,107 +49,18 @@ go vet -v ./... go test -v ./... ``` -## Deployments methods - -The are different ways of deploying this client/server game: - -- using CLI in console mode (recommended for development or native client on a wide range of platforms), -- with Web based access for better user experience (recommended for end users), - -### Use CLI in console mode - -The same binary file is used to start the server and console clients. Various platform are supported. See [latest release page](https://github.com/fc92/poker/releases/latest) for more details. For example to use the Windows terminal natively without Docker use the corresponding binary file. - -Start a single server instance (dedicated for one team): - -- using default websocket: - -```bash -./poker server -subcommand 'server' - websocket: localhost:8080 -``` - -- or specifying the websocket to open: - -```bash -./poker server -websocket 127.0.0.1:7878 -subcommand 'server' - websocket: 127.0.0.1:7878 -``` - -When the server is started, start a client for each player. It must be able to communicate with the server. - -- example of client specifying a player name and the websocket value: - -```bash -./poker client -name Player1 -websocket 127.0.0.1:7878 -subcommand 'client' - name: Player1 - server websocket: 127.0.0.1:7878 -``` - -- example of client using a generated name and default websocket: - -```bash -./poker client -subcommand 'client' - name: snowy-cloud - server websocket: localhost:8080 -``` - -Each player can navigate the client console and send commands using keyboard and mouse. - -NB: in mobaXterm mouse events are not always correctly handled - -This binary file is located in `/poker` in the docker image and can be used with `docker run` on a limited number of supported platforms. - -### Deploy the game for Web based access - -In production the docker image is used to provide both server and client processes. This is described in the [README page](/README.md). - -For development outside of docker the manual steps to work with the `poker` binary are described here. This binary is the result of the `go build -o poker cmd/poker.go` command and can also be found in `/poker` of the docker image. - -Prerequisite: server with docker and [tty2web](https://github.com/kost/tty2web) binary (tested on Linux x86_64). - -To simplify the user experience it is recommended to: - -- start the server in a docker container: - -```bash -docker run -p 192.168.0.1:8080:8080/tcp ghcr.io/fc92/poker:main /poker server -websocket 8080 -``` - -to expose the server on address 192.168.0.1 port TCP 8080 - -- provide user access in a web browser using [tty2web](https://github.com/kost/tty2web): - -```bash -tty2web --title-format Poker --permit-arguments -a 192.168.0.1 -p 8081 -w docker run -it --rm ghcr.io/fc92/poker:main /poker client -websocket 192.168.0.1:8080 -``` - -so that users can connect to to join the game in a browser with player name *Mary*. - -There are multiple benefits with this tty2web deployment method: - -- users only need a web browser with proper network access to play the game, -- users can play on platforms that are not natively supported like iOS or Android, -- the server and each player process run inside a restricted container for security. - - ## Information for developers This section provides technical information for developers. -### Client console +### Web client -Each player starts a console client to join the team server and play the game. +Each player starts vue.js application in a browser. Client main features: -- [X] display available commands -- [X] allow mouse and keyboard user inputs -- [X] user defined or generated player name +- [X] enter player name +- [X] choose poker room - [X] commands: quit game, start new vote, send vote, modify vote, close the vote session - [X] display vote progress during vote session - [X] display distribution of votes when vote session is closed @@ -180,15 +102,14 @@ A `Participant` can be updated by local user actions or updates sent from the se ### Low level design -Server and console client are written in pure Go language. - -The software is packaged as a single binary file for each supported platform. The same file is used with different parameters to start a server or a client instance from a text console. +Server is written in pure Go language. Client is written in TypeScript using vue.js and ionic framework. -It should be possible to write other client implementations using other languages supporting websocket and JSON. The focus of this project is pure GO so far. +The software is packaged as a single binary file for each supported platform. ## Debug log Server debug logs can be activated using the `-debug` flag ### Code coverage + ![Codecov graph](https://codecov.io/github/fc92/poker/graphs/sunburst.svg?token=R4OZKBC13P "Codecov graph") diff --git a/README.md b/README.md index bd437cd..cd3e2dd 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,6 @@ - [poker](#poker) - [Game description](#game-description) - [Install](#install) - - [Standard deployment](#standard-deployment) - - [Custom HTTP port deployment](#custom-http-port-deployment) ## Game description @@ -22,36 +20,11 @@ - Vote values are revealed only when the vote session is closed, and the vote distribution is displayed. - Players can join or leave at any time. -Early version in console: -![short demo](4players.gif) - ## Install The most common usage is to deploy: -- deploy a container for one poker room on server side, +- the helm chart and a tls secret `poker-tls` in a Kubernetes namespace, - use a modern browser on client side to join the room for the game. -### Standard deployment - -- Server using default HTTP port 8081: - -```bash -docker run -p 8081:8081 -td ghcr.io/fc92/poker:main -``` - -- Browser URL to connect as player *Mary*: -`http://server_ip:8081/?arg=-name&arg=Mary` - -### Custom HTTP port deployment - -The port can be modified, to add a second poker room for example: - -- Server using non default HTTP port 8083 and room name "TeamOne": - -```bash -docker run -p 8083:8083 -td ghcr.io/fc92/poker:main ./clients.sh 8083 TeamOne -``` - -- Browser URL to connect as player *Mary*: -`http://server_ip:8083/?arg=-name&arg=Mary` +The list of rooms can be customized using the ROOM_LIST environment variable of the container.