# Cards For Humanity Live at [https://humanity.cards](https://humanity.cards) A game master server for the popular game [Cards Against Humanity](https://www.cardsagainsthumanity.com/) using data from [Chris Hallberg](https://crhallberg.com/)'s project [JSON Against Humanity](https://github.com/crhallberg/json-against-humanity) (everyone say "Thanks, Chris!") This started as a problem trying to play games with friends who are all on different platforms. This shall be as cross-platform as it gets. I want it to work on anything that can establish a connection and allow anyone to write any front-end they can dream up whether it be a web page, chat bot, VR, etc. Any clients who share a master server can play together across any platform. ## Test/Dev: ### Server With auto-reload: - [Install cargo-watch](https://github.com/watchexec/cargo-watch?tab=readme-ov-file#install) Then: ```sh ./test ``` Without auto-reload: ```sh cargo run -p server ``` Use `-b ` or `--bind ` to bind the server to a specific address. Default is 127.0.0.1:3030. You can also pass arguments to the test script. ### Client - [Install Trunk](https://trunkrs.dev/#install) Then: ```sh trunk serve --open ``` ## Build: ### Client ```sh trunk build --release ``` ### Server ```sh cargo build --release ``` --- - The server automatically serves the built client from `/dist` at `127.0.0.1:3030`. When building for release the client automatically points to the live server. - Configure any custom clients to connect to `ws://127.0.0.1:3030/websocket` for local testing or `wss://humanity.cards/websocket` to use my server. ## Tools: There is a tool named socket_blaster used for stress testing the server. Run ```sh cargo run -p socket_blaster -- -h ``` to see available options. Then ```sh cargo run -p socket_blaster -- [COMMAND] ``` to run a command. ## TODO: - prevent zombie users after browser crash - figure out proper auth - client's problem? - use db - test bincode and probably move away from json - make typescript sdk - support card text editing - prevent import of cards that have been seen already and edited - handle duplicates - efficiency - make demo clients for multiple platforms and screens