Server that can be used to spin up "agents" or "bots" that act as players, but use an AI service to choose their moves. If no AI service URL is configured Agents will use a simple top-left to bottom-right attack strategy.
- Node.js v14
- npm v6
Local development uses a Docker container that mounts in the src/ directory.
You must set the AI_SERVER_URL
variable to a valid AI service URL:
AI_SERVER_URL=http://your-ai.service.com/ ./scripts/node.sh
Environment variables can be used to configure runtime behaviour:
- NODE_ENV - Set to
dev
orprod
- LOG_LEVEL - Set to
trace
,debug
,info
etc. Defaults toinfo
ifNODE_ENV=prod
, ortrace
ifNODE_ENV=dev
. - HTTP_PORT - Defaults to 8080. Local development overrides this.
- GAME_GRID_SIZE - Defaults to 5. This must match the corresponding game server value.
- GAME_SERVER_URL - A WebSocket URL to the game server. Defaults to
ws://shipwars-game-server.shipwars.svc.cluster.local:8080/game
- AI_SERVER_URL - A HTTP URL to the move prediction service.
- MIN_ATTACK_DELAY - Forces the Agent to "think" (wait) before sending an attack. Defaults to
3250
milliseconds. - AGENT_SEND_DELAY - A minimum delay placed on all outgoing WebSocket messages. Defaults to
1000
milliseconds.
Send a request to POST /agent
with a body using this format:
{
"uuid": "random-uuid",
"username": "random-username",
"gameId": "random-uuid"
}
This will create an Agent that connects to the Game WebSocket Server and return a 200 OK.
The body in the POST request must refer to a player that has been created and stored in the Infinispan cache by the Game WebSocket Server.
If the agent already exists then the request returns a 200 OK and a message stating that the Agent has already been created.
The scripts/bots.js can be used to create bots that play the game. This is useful for load testing the backend, testing AI models against one another, and generally simulating activity.
Usage:
# Optional LOG_LEVEL info/warn is best unless you need to track down a bug
export LOG_LEVEL=info
# URL to retrieve move predictions from
export AI_SERVER_URL=http://some-ai.server-on.openshiftapps.com
# Number of AI bots to create
export BOT_COUNT=5
# Game server to connect to
export BOT_WS_URL=ws://som-game.server-on.openshiftapps.com/game
# Compile the code and create $BOT_COUNT bots that will play against
# opponents (probably other bots!) on the $BOT_WS_URL game server
npm run bots