Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Библиотека OpenNet для WiFi-клиента
- local component=require("component")
- local event = require("event")
- local ser = require("serialization").serialize
- local uns = require("serialization").unserialize
- local opennet = {}
- local ONcard
- local LocalIP
- local Router
- local ONport=1
- local ONlong=2
- local maxPacketSize
- function opennet.ver()
- return "3.1"
- end
- function opennet.getIP()
- if not component.isAvailable("modem") then
- ONcard=nil
- return nil, "Сетевая карта не обнаружена"
- end
- ONcard=component.modem
- ONcard.open(ONport)
- ONcard.open(ONlong)
- maxPacketSize=ONcard.maxPacketSize()-100
- local ok,err=ONcard.broadcast(ONport,"", "", "getip")
- if not ok then return ok, err end
- local Dist=math.huge
- LocalIP=nil
- Router=nil
- while true do
- local ev, addr, rout, _, dist, locip, _, mess = event.pull(1,"modem_message")
- if ev then
- if dist<Dist and addr == ONcard.address and mess == "setip" then
- LocalIP=locip Router=rout Dist=dist
- end
- else
- if LocalIP then return LocalIP, Dist
- else return nil, "Нет ответа от WiFi роутера" end
- end
- end
- end
- function opennet.send(recIP, ... )
- if not ONcard or not Router then
- return nil, "Сетевая карта не инициализирована"
- end
- return ONcard.send(Router, ONport, recIP, LocalIP, ...)
- end
- function opennet.Lsend(recIP, ... )
- if not ONcard or not Router then
- return nil, "Сетевая карта не инициализирована"
- end
- local data=ser({...})
- repeat
- ONcard.send(Router, ONlong, recIP, LocalIP, data:sub(1,maxPacketSize), #data<=maxPacketSize)
- data=data:sub(maxPacketSize+1)
- until #data==0
- end
- function opennet.receive(timeout)
- local ev
- repeat
- ev = {event.pull(timeout,"modem_message")}
- if not ev[1] then return nil end
- until ev[2] == ONcard.address
- return table.unpack(ev,7)
- end
- function opennet.Lreceive(timeout)
- local ev
- local data=""
- repeat
- ev = {event.pull(timeout,"modem_message")}
- localAdr, senderAdr, port, dist, recIP, sendIP, dat, finish= ev[2], ev[3], ev[4], ev[5], ev[6], ev[7], ev[8], ev[9]
- if not ev[1] then return nil end
- until ev[2] == ONcard.address
- return table.unpack(ev,7)
- end
- function opennet.sendrec(recIP, ... )
- local ok,err=opennet.send(recIP, ... )
- if ok then
- return opennet.receive(3)
- else
- return ok,err
- end
- end
- function opennet.Lsendrec(recIP, ... )
- local ok,err=opennet.send(recIP, ... )
- if ok then
- return opennet.Lreceive(3)
- else
- return ok,err
- end
- end
- -----------------------------------------------------------------------
- return opennet
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement