Skip to content

ivan1993spb/snake-server

Repository files navigation

Snake-Server

Build Status GitHub release Go Report Card Docker Pulls

Snake-Server is a server for multiplayer snake game. You can play with your friends! The special feature is that you can eat small snakes!

Take a look at a working instance here - https://snakeonline.xyz

Game demo

Usage

  1. docker run --rm -p 8080:8080 ivan1993spb/snake-server --enable-web
  2. Open in the browser http://localhost:8080/.

How to play?

  • You control a snake
  • You need to grow the biggest snake
  • You can eat apples, mice, watermelons, small and dead snakes
  • If the snake dies, you will have to start over

Installation

  • Go get

    go get github.com/ivan1993spb/snake-server@latest
    snake-server -h
    
  • Docker

    Check out the repo.

    docker pull ivan1993spb/snake-server
    
    docker run --rm -p 8080:8080 ivan1993spb/snake-server --enable-web
    
    docker run --rm ivan1993spb/snake-server -h
  • Download and install the binary

    Take a look at the release page

    Curl:

    • Set VERSION, PLATFORM and ARCHITECTURE:
      VERSION=v4.3.0
      # darwin or linux or windows
      PLATFORM=linux
      # amd64 or 386
      ARCHITECTURE=amd64
    • Download and install the binary to /usr/local/bin/:
      curl -sL "https://github.com/ivan1993spb/snake-server/releases/download/${VERSION}/snake-server-${VERSION}-${PLATFORM}-${ARCHITECTURE}.tar.gz" |\
        tar xvz -C /usr/local/bin/
  • Deploy the server using the ansible playbook

    https://github.com/ivan1993spb/snake-ansible.

CLI options

Use snake-server -h for more information.

Options:

  • --address - string - sets an address to listen and serve (default: :8080). For example: :8080, localhost:7070
  • --conns-limit - integer - to limit the number of opened web-socket connections (default: 1000)
  • --groups-limit - integer - to limit the number of games for a server instance (default: 100)
  • --enable-web - bool - to enable the embedded web client (default: false)
  • --enable-broadcast - bool - to enable the broadcasting API method (default: false)
  • --forbid-cors - bool - to forbid cross-origin resource sharing (default: false)
  • --log-json - bool - to enable JSON log output format (default: false)
  • --log-level - string - to set the log level: panic, fatal, error, warning (warn), info or debug (default: info)
  • --seed - integer - to specify a random seed (default: the number of nanoseconds elapsed since January 1, 1970 UTC)
  • --sentry-enable - bool - to enable sending logs to sentry (default: false)
  • --sentry-dsn - string - sentry's DSN (default: ""). For example: https://public@sentry.example.com/44
  • --tls-cert - string - to specify a path to a certificate file
  • --tls-enable - bool - to enable TLS
  • --tls-key - string - to specify a path to a key file
  • --debug - bool - to enable profiling routes

Clients

There is an embedded JavaScript web client compiled into the server. You can enable it with CLI flag --enable-web.

You are always welcome to create your own client!

You can find examples here:

See documentation docs/api.md and docs/websocket.md.

REST API specification: openapi.yaml.

License

See LICENSE.