|
||
---|---|---|
.github/workflows | ||
buildscripts | ||
config | ||
front | ||
lib/chessh | ||
presentation | ||
priv | ||
test | ||
.env.example | ||
.formatter.exs | ||
.gitignore | ||
.tool-versions | ||
Dockerfile | ||
mix.exs | ||
mix.lock | ||
package-lock.json | ||
README.md |
CheSSH
CheSSH is a distributed multiplayer implementation of the game of Chess over SSH, written in Elixir, with Discord integrations to deliver alerts when players are looking for opponents, or in games when it is one's turn.
Usage
Dependencies
npm
elixir
postgresql
redis
(which you can ignore if you only use the ETS backend for Hammer inconfig/dev.exs
[set by default])
Installation
Do something among the lines of:
git clone https://github.com/Simponic/chessh
cd chessh
cp .env.example .env
chmod 0700 .env
# In one shell (after filling in your .env), start CheSSH
export $(cat .env | xargs)
mix ecto.create
mix ecto.migrate
iex -S mix
# In another shell, start the frontend
export $(cat .env | xargs)
cd front
npm install
npm start
Architecture
The process of building the pi cluster is wholly contained in the awful
buildscripts
, which will individually ssh
into separate pi's and build the
services locally there as well as update the load balancer pi's configurations for nginx
and HAproxy.
More architecture talk of CheSSH can be found in my (albeit kinda cringe) FSLC presentation on Elixir: https://github.com/Simponic/chessh/blob/main/presentation/chessh.org
Environment Variables (mostly optional)
REACT_APP_DISCORD_INVITE
is the invite link to the discord server with the CheSSH botREACT_APP_DISCORD_OAUTH
is the link (after replacing the GET URL params) that will be used to initiate discord OAUTH from the frontendCLIENT_REDIRECT_AFTER_OAUTH
&SERVER_REDIRECT_URI
are self-explanatoryREACT_APP_SSH_SERVER
andREACT_APP_SSH_PORT
are used to build the .ssh config given to users on the home page of CheSSH after authenticationNEW_GAME_PINGABLE_ROLE_ID
is the role id of the role to ping when one is looking for an opponentREMIND_MOVE_CHANNEL_ID
is the channel id to create private threads with players for move reminders and other communicationsNEW_GAME_CHANNEL_ID
is similar to the aboveCLUSTER_NODES
is a comma-separated list of nodes accepting connections to connect with libclustre