mc-scripts/storage-net
2024-02-25 22:22:02 -06:00
..
common.lua Add initial stuff 2024-02-25 22:22:02 -06:00
deploy.sh Add initial stuff 2024-02-25 22:22:02 -06:00
masterconfig.lua Add initial stuff 2024-02-25 22:22:02 -06:00
README.md Update README 2024-02-25 22:14:08 -06:00
slaveconfig.lua Add initial stuff 2024-02-25 22:22:02 -06:00

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.

Slave nodes must have a modem attached and be within range of the GPS and master.

The master node must have a modem attached and be within range of all slave nodes.

  1. Deploy at least one slave node
  • The inventory it is to monitor must be above or in front of the unit
  • The unit should be able to drop below itself to push items to the master node

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