Some checks failed
Lint / pre-commit Linting (push) Failing after 42s
212 lines
5.7 KiB
Markdown
212 lines
5.7 KiB
Markdown
# Web sockets endpoints list
|
|
|
|
Currently known endpoints are listed below.
|
|
* This list is clearly not exhaustive and comes from empirical observations.
|
|
* If you want to add more data, feel free to make a pull request.
|
|
|
|
## Shards
|
|
|
|
Any subscription taking a room name is different on servers with shards,
|
|
the room name should be prefixed with the shard name ex `shard0/E0N0`.
|
|
|
|
Note that adding a shard to a server not expecting it may cause an error.
|
|
|
|
## Subscribing to web sockets endpoints
|
|
|
|
* Make sure you are authenticated (you should have called `api.auth(...).then(...)` first).
|
|
* Connect the socket and wait for connection establishment using `api.socket.connect().then(...)`.
|
|
* You can then subscribe to different endpoints using `api.socket.subscribe()`.
|
|
* The server will then send periodic events with requested information.
|
|
|
|
Complete example:
|
|
```javascript
|
|
const { ScreepsAPI } = require('screeps-api');
|
|
|
|
try {
|
|
// Setup
|
|
const api = new ScreepsAPI();
|
|
await api.auth("your_email", "your_password"); // authenticate
|
|
await api.socket.connect(); // connect socket
|
|
|
|
// Subscribe to 'cpu' endpoint and get events
|
|
api.socket.subscribe('cpu');
|
|
api.socket.on('cpu', event => {
|
|
console.log(event.data.cpu) // cpu used last tick
|
|
});
|
|
|
|
// You can also put a callback to subscribe()
|
|
api.socket.subscribe('console', event => {
|
|
event.data.messages.log // List of console.log output for tick
|
|
})
|
|
} catch(err) {
|
|
console.log(err);
|
|
}
|
|
```
|
|
|
|
|
|
## code
|
|
|
|
### Description:
|
|
|
|
Once subscribed, the server will send a new event with full code base every time code base changes.
|
|
|
|
### Parameters of `event.data`:
|
|
|
|
Name | Type | Description
|
|
--------- | ------ | ------------------
|
|
branch | String | Name of the updated branch
|
|
modules | Object | Map of files (using file name as key and file content as value)
|
|
timestamp | Number | Date of the modification expressed as the number of milli-seconds since 01/01/1970
|
|
hash | Number | Some kind of hash, I guess ? (don't ask me how to compute it #FIXME)
|
|
|
|
### Example:
|
|
|
|
```javascript
|
|
// Subscription
|
|
api.socket.subscribe('code', event => console.log(JSON.stringify(event.data)));
|
|
```
|
|
```javascript
|
|
// Results
|
|
{
|
|
"branch": "simulation",
|
|
"modules":{
|
|
"main":"console.log(\"Hello world!\");\n",
|
|
// other modules...
|
|
},
|
|
"timestamp": 1500930041802,
|
|
"hash": 424324
|
|
}
|
|
```
|
|
|
|
|
|
## console
|
|
|
|
### Description:
|
|
|
|
Once subscribed, the server will send a new event every tick with console logs and return value of commands (if any).
|
|
|
|
### Parameters of `event.data`:
|
|
|
|
Name | Type | Description
|
|
---------------- | ------ | ------------------
|
|
messages.log | Array | Lines shown in console (like if printed by `console.log()`)
|
|
messages.results | Array | Array of command results
|
|
|
|
### Example:
|
|
|
|
```javascript
|
|
// Subscription
|
|
api.socket.subscribe('console', event => console.log(JSON.stringify(event.data)));
|
|
```
|
|
```javascript
|
|
// Results after executing `Game.time` in game:
|
|
{
|
|
"messages": {
|
|
"log": [],
|
|
"results": ["16746996"]
|
|
}
|
|
}
|
|
// (`Game.time` does not show any log in the console, which is why `messages.log` is empty)
|
|
```
|
|
|
|
|
|
## cpu
|
|
|
|
### Description:
|
|
|
|
Once subscribed, the server will send a new event every tick with cpu and memory usage.
|
|
|
|
### Parameters of `event.data`:
|
|
|
|
Name | Type | Description
|
|
------ | ------ | ------------------
|
|
cpu | Number | Cpu used last tick
|
|
memory | Number | Current memory usage
|
|
|
|
### Example:
|
|
|
|
```javascript
|
|
// Subscription
|
|
api.socket.subscribe('cpu', event => console.log(JSON.stringify(event.data)));
|
|
```
|
|
```javascript
|
|
// Results every tick
|
|
{
|
|
"cpu": 32,
|
|
"memory": 126435
|
|
}
|
|
```
|
|
|
|
|
|
## room:ROOM_NAME
|
|
|
|
### Description:
|
|
|
|
Once subscribed, the server will send a new event every tick with the RoomObjects of present in selected room (`ROOM_NAME`).
|
|
RoomObjects seem to have the same properties as within game scripts.
|
|
|
|
**Atention**, only the first event actually returns the object full properties.
|
|
Subsequent events only return the modified properties.
|
|
|
|
### Parameters of `event.data`:
|
|
|
|
Name | Type | Description
|
|
-------- | ------ | ---------------------------------
|
|
objects | Object | Map of RoomObjects indexed by id
|
|
gameTime | Number | Current game tick
|
|
info | Object | Contains game mode (usually `"world"`)
|
|
visual | Object | Room visuals (contents currently unknown #FIXME)
|
|
|
|
### Example:
|
|
|
|
```javascript
|
|
// Subscription
|
|
api.socket.subscribe('room:W7N7', event => console.log(JSON.stringify(event.data))); // For non-sharded servers
|
|
api.socket.subscribe('room:shard0/W7N7', event => console.log(JSON.stringify(event.data))); // For sharded servers
|
|
```
|
|
```javascript
|
|
// First event results:
|
|
{
|
|
"objects": {
|
|
"58dbc28b8283ff5308a3c0ba": {
|
|
"_id": "58dbc28b8283ff5308a3c0ba",
|
|
"room": "W97S73",
|
|
"type": "source",
|
|
"x": 12, "y": 14,
|
|
"energy": 1908,
|
|
"energyCapacity": 3000,
|
|
"ticksToRegeneration": 300,
|
|
"nextRegenerationTime": 20308471,
|
|
"invaderHarvested": 45324
|
|
},
|
|
"59663a8e82b5ab1b911ca1a9": {
|
|
"_id": "59663a8e82b5ab1b911ca1a9",
|
|
"type": "road",
|
|
"x": 17,"y": 42,
|
|
"room": "W97S73",
|
|
"notifyWhenAttacked": true,
|
|
"hits": 22080,
|
|
"hitsMax": 25000,
|
|
"nextDecayTime": 20308833
|
|
},
|
|
// other RoomObjects...
|
|
},
|
|
"gameTime": 20307112,
|
|
"info": { "mode": "world" },
|
|
"visual": ""
|
|
}
|
|
```
|
|
```javascript
|
|
// Results for subsequent events:
|
|
{
|
|
"objects": {
|
|
"58dbc28b8283ff5308a3c0ba": { "energy": 948, "invaderHarvested": 34284 },
|
|
"5967d460eebe3d6404c26852": { "nextDecayTime": 20307861 },
|
|
// Other modified RoomObjects...
|
|
},
|
|
"gameTime": 20307112,
|
|
"info": { "mode": "world" },
|
|
"visual": ""
|
|
}
|
|
```
|