Philipp Horstenkamp 6f5729c12a
Some checks failed
Lint / pre-commit Linting (push) Has been cancelled
First development of the deploy action (#6)
Deploy js code to an instance of screeps.
Some debugging tools are implemented.

Reviewed-on: #6
Co-authored-by: Philipp Horstenkamp <philipp@horstenkamp.de>
Co-committed-by: Philipp Horstenkamp <philipp@horstenkamp.de>
2023-11-26 18:31:49 +01:00

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": ""
}
```