Add prelim stuff
This commit is contained in:
parent
76e0731ad1
commit
8f7e7b4d01
72
storage-net/README.md
Normal file
72
storage-net/README.md
Normal file
@ -0,0 +1,72 @@
|
||||
# Computercraft Storage Network
|
||||
|
||||
This is an implementation of a centralized storage network architecture that uses just ComputerCraft and vanilla Minecraft.
|
||||
|
||||
## Deployment
|
||||
|
||||
A GPS will need to be established and be accurate within range of the entire network to the block.
|
||||
|
||||
## Communication Protocol
|
||||
|
||||
Port 42914 is used for Master => Slave broadcasting
|
||||
Port 42915 is used for Slave => Master return broadcasting
|
||||
|
||||
### Packet Format
|
||||
|
||||
Packet format is uniform between master <-> slaves and is structured like so:
|
||||
|
||||
```
|
||||
{
|
||||
// Metadata
|
||||
magic: str("ccstoragenet")
|
||||
networkid: int()
|
||||
sourceid: int()
|
||||
destid: int()
|
||||
|
||||
// Payload
|
||||
type: str()
|
||||
|
||||
// Optional Arguments
|
||||
itemname: str()
|
||||
itemquant: int()
|
||||
destination: int()
|
||||
location: [int(),int(),int()]
|
||||
}
|
||||
```
|
||||
|
||||
| Name | Required? | Type | Description
|
||||
| :-- | :--: | :-- | :--
|
||||
| `magic` | true | string | Must be `ccstoragenet`. If it is not, the packet is immediately discarded |
|
||||
| `networkid` | true | int | The ID of the network |
|
||||
| `sourceid` | true | int | The CC ID of the machine sending the packet |
|
||||
| `destid` | true | int | The CC ID of the intended recipient of the packet |
|
||||
| `type` | true | string | An arbitrary string literal corresponding to the type of the request. Common examplse include `ping`, `query`, etc. |
|
||||
| `itemname` | false | string | The unlocalized name of an item. Used for querying, crafting, movement, etc. |
|
||||
| `itemquant` | false | int | Quantity of the aforementioned item |
|
||||
| `destination` | false | int | The CC ID of the intended recipient of the item |
|
||||
|
||||
### Slave Node Initialization
|
||||
|
||||
* The slave starts up
|
||||
* The slave receives a `ping` packet from a master server. The slave compares it to any stored `/pairednetwork` file in the root of the filesystem:
|
||||
* If the file exists and the ID does not match, processing is halted
|
||||
* The `networkid` of the packet is stored as `/pairednetwork`
|
||||
* The slave responds with a `pong` packet.
|
||||
|
||||
### Master Node Initialization
|
||||
|
||||
* The master node starts up
|
||||
* The master node sends a packet with type `ping` and `networkid` initialized to its CC ID.
|
||||
* The master node listens for `pong` packets for a configurable timeout.
|
||||
* The `sourceid` of all `pong` packets is recorded for statistics displays. This cached data is only used for user display. Node availability is evaluated at request time.
|
||||
|
||||
### Inventory Search (query)
|
||||
|
||||
* A sender node (master or slave) sends out a `ping`
|
||||
* All available slaves respond with `pong`
|
||||
* The sender node sends a packet with type `query`. Field `itemname` is populated with an item to query for.
|
||||
* Each available slave responds with type `query`.
|
||||
* `itemname` is populated with data from the previous packet
|
||||
* `itemquantity` is populated with the quantity of that item attached to storages the slave has access to.
|
||||
* The requester waits for a response from each slave that responded to the `ping` or until a configurable timeout is reached.
|
||||
* Results are consumed
|
Loading…
Reference in New Issue
Block a user