Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require "component"
- local event = require "event"
- local link = {
- ["Link"] = {},
- ["nextHope"] = {},
- ["callback"] = {},
- ["addLink"] =
- function (self,localAddress, remoteAddress )
- if self.Link[ remoteAddress ] then
- table.insert( self.Link[ remoteAddress ] localAddress )
- else
- self.Link[ remoteAddress ] = { localAddress }
- end
- if self.Link[ localAddress ] then
- table.insert( self.Link[ localAddress ], remoteAddress )
- else
- self.Link[ localAddress ] = { remoteAddress }
- end
- end,
- ["discoverLink"] =
- function( self )
- for address,_ in pairs( component.list("modem",true) ) do
- local modem = component.proxy( address )
- if modem.isWireless() then
- modem.setStrength( 256 )
- end
- for i,v in pairs( self.PORT ) do
- modem.open( v )
- end
- modem.broadcast( self.PORT.discovery_request, "discovery_request", address )
- end
- for address,_ in pairs( component.list("tunnel",true) ) do
- local tunnel = component.proxy( "tunnel" )
- tunnel.send( self.PORT.discovery_request, "discovery_request", address )
- end
- end,
- ["discoverRoute"] =
- function( self )
- end,
- ["addDatagram"] =
- function ( self, name, port, callback )
- if self.port.by_port[ port ] then return false
- self.port.by_port[ port ] = name
- self.callback[ name ] = callback
- return true
- end
- ["listen"] =
- function( self )
- local e = {10,event.pull("modem_message")}
- name = e[1]
- if name ~= "modem_message" then return end
- receiver = e[2]
- sender = e[3]
- port = e[4]
- local isTunnel = component.proxy(receiver).type == "tunnel"
- if isTunnel then
- port = e[6]
- end
- args = {table.unpack( e, 6 )}
- if isTunnel then args = {table.unpack( e, 7 )}
- local validDatagram = false
- for i,v in pairs( self.port.by_Port ) do
- if i == port and args[1] == v then
- validDatagram = true
- break
- end
- end
- if not validDatagram then return end
- self.callback[ args[1] ]( table.unpack( args, 2 ) )
- if port == self.PORT["link_discovery_request"] then
- if args[1] ~= "link_discovery_request" or sender ~= args[2] then return end
- self:addLink( receiver, sender )
- component.invoke( receiver ,"send", sender, self.PORT.discovery_response, "link_discovery_response", receiver )
- return
- end
- if port == self.PORT["link_discovery_response"] then
- if args[1] ~= "link_discovery_response" or sender ~= args[2] then return end
- self:addLink( receiver, sender )
- return
- end
- end,
- ["send"] =
- function( self, addr, port, ... )
- local next_hope = self.NextHope[ addr ] or addr
- local interface = Link[ next_hope ]
- end,
- ["port"] =
- {
- ["by_Name"] =
- {
- ["link_discovery_request"] = 25652,
- ["link_discovery_response"] = 65256
- },
- ["by_Port"] = {}
- }
- }
- return link
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement