The diplomacy-server package

[Tags:bsd3, program]

[Skip to Readme]


Dependencies aeson (==0.9.*), async (==2.0.*), base (==4.7.*), bytestring (==0.10.*), containers (==0.5.*), deepseq (==1.3.*), diplomacy (==0.1.*), filepath (==1.3.*), hourglass (==0.2.*), json-schema (==0.7.*), mtl (==2.1.*), optparse-applicative (==0.11.*), parsec (==3.1.*), random (==1.1.*), rest-core (==0.36.*), rest-wai (==0.1.*), stm (==2.4.*), Stream (==0.4.*), text (==1.2.*), transformers (==0.3.*), transformers-compat (==0.4.*), TypeNat (==0.4.*), wai (==3.0.*), warp (==3.0.*), warp-tls (==3.0.*) [details]
License BSD3
Author Alexander Vieth
Stability Unknown
Home page
Uploaded Thu Aug 20 23:20:05 UTC 2015 by alexvieth
Distributions NixOS:
Downloads 124 total (5 in the last 30 days)
0 []
Status Docs not available [build log]
Last success reported on 2015-08-20 [all 7 reports]


Maintainer's Corner

For package maintainers and hackage trustees

Readme for diplomacy-server

Readme for diplomacy-server-


Play the board game Diplomacy over HTTP. Players may participate via their own private devices, so long as they have network capabilities and a good web browser.

Quick start

Start by installing the program.

``bash git clone cd diplomacy-server cabal install

In order to get up and running you need a public/private key pair and
certificate, because the web
server uses secure HTTP. Here's how to create a key pair and self-sign a
certificate using OpenSSL.
Note that your browser will warn of an untrusted certificate when you connect
to the server.

openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.pem -days 365 -nodes

When running the server, the key and certificate file locations can be
specified using `-k` and `-c` respectively; the defaults are `./server.key` and
`./server.pem`. When running the server you must also give a username and
password for the administrator. These credentials allows you to create, start,
advance, pause, and destroy games.

./Main -u <username> -p <password>

The default port is `4347`, but this can be changed using `--port`. With
the server running, navigate to `https://<host>:4347/v1.0.0/diplomacy` to
begin playing via the simple but effective web client. The workflow is as

1. Administartor creates a game, choosing a password for it.
2. Players join the game using the administartor's chosen password.
3. Adminstrator starts the game.
4. Players use their own devices (smartphones, laptops) to view game state and
   issue orders.

The game will advance automatically unless the adminstrator pauses the game.
In this case, the game will advance only when the adminstrator explicitly
advances it, at which point the automatic advance feature kicks in again.
This is useful for putting a game on indefinite hiatus.

## The simple client

The file `client.html` is a barebones, not-so-user-friendly interface for
players and administrators (game-masters, if you will). It *should* provide
all necessary functionality to play a complete match, and *should* work
properly on all smartphones and personal computers with up-to-date web browsers.

To input typical and retreat phase orders using this client, one must type the
order object as it would be written in a pen-and-paper game; the map is not
interactive, but this would be a nice improvement.

A better HTML/JavaScript client, or even native iOS and Android clients,
would be *very* nice to have. Ideally, we could use the definitions of the
[diplomacy]( Haskell library to produce
these clients. This way, we don't need to reproduce the basic definitions like
those related to provinces and their adjacency, and we could also use order
validation definitions to give helpful feedback when the user attempts to input
a new order (highlighting valid move targets or support subjects, for instance).

## A note on REST

This program uses the rest package, but it doesn't give a RESTful API; the
server *is* stateful. This package was chosen because it was relatively
quick and easy. It ought to be swapped out for something which

1. Does not claim to be RESTful.
2. Allows us to easily reuse handlers for HTTP and Email input.