Rednet (API)
Please Note As of ComputerCraft 1.5, channels have been added, and no longer supports
transmitting data through Bundled Cables. However interacting with Bundled Cables is still available via the Redstone API |
The Rednet API allows computers to communicate between themselves without using redstone wires. In order to send and receive data, a modem is required. The data is received immediately after sending it, but only by computers within a certain range. That range depends on the altitude of the sending computer increasing with higher altitudes to a max of 384. NOTE: The distance variable that is sent/received through the Rednet API is based off of the computer location, not the modem location.
Method Name | Description |
rednet.open(string side) | Tells the computer that the side can be used for networking. |
rednet.close(string side) | Tells the computer that the side can no longer be used for networking. |
rednet.announce() | Broadcasts an empty rednet message. |
rednet.send(number receiverID, string message) | Sends a message to the computer using the opened sides. The receiver ID is the ID (number, not string) of the computer you're sending the message to. ID as nil will do the same as a broadcast. The message must be a string to send across rednet, if you are wanting to send a table see textutils.serialize |
rednet.broadcast(string message) | Sends the message to ALL connected and open computers. |
rednet.receive(number timeout) | Waits until it received a rednet message or timeout has passed. Leave args empty to wait for a message forever. |
rednet.isOpen(string side) | Returns true if the wireless modem is open. |
Events
Event Name | Description | Parameters |
---|---|---|
rednet_message | Fired when a rednet message is received (can be used as alternative for rednet.receive()) | number senderId, string message, number distance |
History
Before the creation of the in-game wireless networking API, the term "Rednet" referred to a system created by one of the ComputerCraft users based on bundled cables from a popular Minecraft mod - RedPower. It also allowed communication between computers, but the data was transferred slowly - every bit was converted to redstone signal, that lasted about 0,1 seconds. On the release of ComputerCraft 1.3, the system became useless, as the wireless networking was officially implemented to the mod.
Technical Details
Overview: Rednet functions by having a modem listen on the channel of the computers ID, and the rednet broadcast channel for messages. It uses the replyChannel parameter of the modem_message event as the senders, computer ID.
CHANNEL_BROADCAST: 65535
(local) tValidSides: Contains valid values of strings containing computer sides, used by open and close
rednet.open(sSide): Checks if sSide is a string, a valid side, and a side with a modem on it. Then it opens the modem on CHANNEL_BROADCAST and os.getComputerID()
rednet.close(sSide): Checks if sSide is a string, a valid side, and a side with a modem on it. Then it closes the modem on CHANNEL_BROADCAST and os.getComputerID()
rednet.isOpen(sSide): Checks if sSide is a string, a valid side, and if it is a side containing a modem, it returns true if the modem on sSide is open on both CHANNEL_BROADCAST and os.getComputerID()
rednet.send(nRecipient, sMessage): For each side sSide in rs.getSides(), it calls isOpen(sSide). If the result is true, it executes
peripheral.call( sSide, "transmit", nRecipient, os.getComputerID(), sMessage )
rednet.broadcast(sMessage): Calls send(CHANNEL_BROADCAST, sMessage)
rednet.receive(nTimeout): If nTimeout is there, it starts a timer for nTimeout seconds-stored in timer, and sets sFilter to nil. Otherwise, sFilter is set to "rednet_message". In a loop,
local e, p1, p2, p3, p4, p5 = os.pullEvent( sFilter )
is called. If e is "rednet_message" then it returns p1, p2, and p3, but if e is "timer", and p1 is timer then it returns nil.
(local) bRunning: false
rednet.run(): If bRunning is true, then it errors "rednet is already running". It then sets bRunning to true to indicate that it is running. Looping while bRunning, it pulls
local sEvent, sSide, sChannel, sReplyChannel, sMessage, nDistance = os.pullEventRaw( "modem_message" )
Then if sEvent is "modem_message", isOpen(sSide) is true, and sChannel is os.getComputerID() or it is CHANNEL_BROADCAST, then it queues
os.queueEvent( "rednet_message", sReplyChannel, sMessage, nDistance )