poker

Game description
poker is a planing poker game limiting vote influence between the players. The goal is to collect an independent vote from each player and to improve the vote experience of distributed teams.
- vote progress is shared without showing vote values to avoid influence between players,
- only when vote is closed vote values are revealed and the vote distribution is displayed,
- players can join or leave at any time.

Client console
Each player starts a console client to join the team server and play the game.
Client main features:
- display available commands
- allow mouse and keyboard user inputs
- user defined or generated player name
- commands: quit game, start new vote, send vote, modify vote, close the vote session
- display vote progress during vote session
- display distribution of votes when vote session is closed
- content is driven by the server to maintain consistency between players
Server
The server broadcasts a shared vision to all clients in real time.
Server main features:
- start single game to host client players
- share vote and available commands to all users
- add connected user
- remove disconnected user
- broadcast vote status per user during vote session
- broadcast votes when all votes are available or vote is manually closed
- reset vote values when a new vote starts
- close vote when all players have voted
Usage
The same binary file is used to start the server and console clients. Various platform are supported. See latest release page for more details.
Start a single server instance (dedicated for one team):
$ ./poker server
subcommand 'server'
websocket: localhost:8080
- or specifying the websocket to open:
$ ./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:
$ ./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:
./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.
This section provides technical information for developers.
High level design
HTTP websocket is used for "real-time" communication between clients and the server. Messages are in JSON format and contain Room
and Participant
information.
A server instance maintains a single Room
that contains:
- a
Participant
for each player,
- the status of the game: vote open or closed.
The Room
content changes when a client sends a command or is disconnected. Each change is broadcasted to all clients.
Each Participant
contains information about a player:
- player name,
- commands available to the user,
- vote value.
A Participant
can be updated by local user actions or updates sent from the server.
Low level design
Server and console client are written in pure Go language.
The same binary is used with different parameters to start a server or console client instance.
It should be possible to write other client implementations using other languages supporting websocket and JSON.
Default websocket is localhost:8080
when the value is not provided on the command line.