3.0 KiB
3.0 KiB
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
andnetworkid
initialized to its CC ID. - The master node listens for
pong
packets for a configurable timeout. - The
sourceid
of allpong
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
. Fielditemname
is populated with an item to query for. - Each available slave responds with type
query
.itemname
is populated with data from the previous packetitemquantity
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