horizontally scalable 📈 multiplayer 👩‍💻 🧑‍💻 chess ♟️ over ssh 🖥️ https://chessh.linux.usu.edu
Go to file
2023-02-24 15:59:42 -07:00
.github/workflows Update elixir.yml 2023-01-24 12:43:08 -07:00
buildscripts Format buildscripts (pretty unsubstantial but needed to happen :3) 2023-02-11 23:37:47 -07:00
config Show previous move in message body, which notification is now instant, add check highlighting 2023-02-08 22:06:58 -07:00
front Remove trailing quotation 2023-02-12 01:04:38 -07:00
lib/chessh Render currently connected node on main menu 2023-02-22 11:44:23 -07:00
presentation Better README 2023-02-24 15:59:42 -07:00
priv Discord threads (#16) 2023-02-01 22:55:06 -07:00
test Discord notifs (#14) 2023-02-01 14:57:14 -07:00
.env.example Better README 2023-02-24 15:59:42 -07:00
.formatter.exs Initial commit! 2022-12-19 01:39:10 -07:00
.gitignore Elixir cluster! 2023-01-31 19:07:47 -07:00
.tool-versions Presentation (#17) 2023-02-23 19:52:25 -07:00
Dockerfile Multicast instead of .hosts.erlang 2023-02-01 08:51:20 -07:00
mix.exs Elixir cluster! 2023-01-31 19:07:47 -07:00
mix.lock Elixir cluster! 2023-01-31 19:07:47 -07:00
package-lock.json Web Client (#11) 2023-01-19 14:04:10 -07:00
README.md Better README 2023-02-24 15:59:42 -07:00

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 a player's turn.

Usage

Dependencies

  • npm
  • elixir
  • postgresql
  • redis (which you can ignore if you only use the ETS backend for Hammer for config/dev.exs)

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

Environment Variables (mostly optional)

  • REACT_APP_DISCORD_INVITE is the invite link to the discord server with the CheSSH bot
  • REACT_APP_DISCORD_OAUTH is the link (after replacing the GET params) that will be used to start OAUTH from the frontend
  • CLIENT_REDIRECT_AFTER_OAUTH & SERVER_REDIRECT_URI are self-explanatory
  • REACT_APP_SSH_SERVER and REACT_APP_SSH_PORT are used to build the .ssh config given to users on the home page of CheSSH after authentication
  • NEW_GAME_PINGABLE_ROLE_ID is the role id of the role to ping when a player is looking for an opponent
  • REMIND_MOVE_CHANNEL_ID is the channel id to create private threads with players for move reminders and other communications
  • NEW_GAME_CHANNEL_ID is similar to the above

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 as well as update the load balancer pi's configurations for nginx and HAproxy.

More brief architecture talk of CheSSH can be in my (albeit kinda cringe) FSLC presentation on Elixir: https://github.com/Simponic/chessh/blob/main/presentation/chessh.org