#LIB() local lastMessage = "" local nativepullEvent = os.pullEventRaw local tListen = { } return { #BEGINFUNCTION() #FUNCTION(closeAllPort) closeAllPort = function(modem) if modem.nOpenPorts <= 0 then return false end for _, nPort in pairs(modem.tOpenPorts) do modem.raw.close(nPort) end modem.nOpenPorts = 0 modem.tOpenPorts = { } return true end, #FUNCTION(closePort) closePort = function(modem, nPort) if modem.nOpenPorts > 0 and modem.tOpenPorts[nPort] then modem.raw.close(nPort) modem.nOpenPorts = modem.nOpenPorts - 1 modem.tOpenPorts[nPort] = false return true end return false end, #FUNCTION(listen) listen = function(modem, nPort) smodem = modem if not modem.tOpenPorts[nPort] then return false end tListen[modem.sSide][nPort] = math.random(1, 2147483646) return function() while tListen[modem.sSide][nPort] do local sEvent, vData, nRPort, nReplyPort, tMessage, nDistance = coroutine.yield("modem_message") if sEvent == "modem_message" and vData == modem.sSide and nRPort == nPort then os.queueEvent( "net_message", tListen[modem.sSide][nPort], nReplyPort, tMessage, nDistance) end end end, tListen[modem.sSide][nPort] end, listenEvent = "net_message", #FUNCTION(listenStop) listenStop = function(modem, nPort) tListen[modem.sSide][nPort] = nil end, #FUNCTION(listenStopAll) listenStopAll = function(modem) tListen[modem.sSide] = { } end, #FUNCTION(loadModem) loadModem = function(sSide) if peripheral.isPresent(sSide) and peripheral.getType(sSide) == "modem" then tListen[sSide] = { } return { isWireless = peripheral.call(sSide, "isWireless"), raw = peripheral.wrap(sSide), sSide = sSide, nOpenPorts = 0, tOpenPorts = { } } end return false end, #FUNCTION(openPort) openPort = function(modem, nPort) if modem.nOpenPorts < 128 and not modem.tOpenPorts[nPort] then modem.raw.open(nPort) modem.nOpenPorts = modem.nOpenPorts + 1 modem.tOpenPorts[nPort] = true return true end return false end, #FUNCTION(sendRaw) sendRaw = function( modem, nPort, nRepPort, vMessage) modem.raw.transmit(nPort, nRPort, vMessage) end, #FUNCTION(sendRednet) sendRednet = function( modem, nPort, replyPort, nRecipient, vMessage, sProtocol) if sProtocol == nil then sProtocol = "" end modem.raw.transmit(nPort, replyPort { nRecipient = nRecipient, message = vMessage, nMessageID = math.random(1, 2147483647), sProtocol = sProtocol }) return true end #ENDFUNCTION() }