-
Notifications
You must be signed in to change notification settings - Fork 461
API Internet
CokaCola edited this page Mar 8, 2014
·
11 revisions
This library wraps functionality of Internet cards.
-
internet.isHttpEnabled():boolean
Returns whether HTTP requests are allowed on the server (config setting). -
internet.request(url: string[, data: string or table]): function
Sends an HTTP request to the specified URL, with the specified POST data, if any. If no data is specified, a GET request will be made. The POST data can be in one of two formats: if it's a string, it will be sent as-is. If it's a table, it will be converted to a string by assuming that each key is the name of a POST variable, and it's associated value is the value for that variable. So, for example:
internet.request(url, {some = "variable", another = 1})
Will sendsome=variable&another=1.
The returned function is an iterator over the lines of the result, use it like so:
for line in internet.request(...) do stuff() end
Important: you should not callos.sleep,event.pullor any other functions that directly or indirectly consume signals while iterating the result lines, since the lines of the response are one signal each (to avoid running out of memory for large results). -
internet.isTcpEnabled():boolean
Returns whether TCP sockets are allowed on the server (config setting). -
internet.connect(address:string[, port:number]):number
Opens a new TCP connection. Returns the handle of the connection. The returned handle can be used to interact with the opened socket using the other callbacks. This can error if TCP sockets are not enabled, there are too many open connections or some other I/O error occurs. -
internet.close(handle:number)
Closes the socket with the specified handle.
This is an example of a basic IRC bot that echos back what you say to it, using the sockets in the internet api.
--config
local nickname = "myircbot"
local channel = "#mybotchannel"
local net = require("internet")
local con = net.open("irc.esper.net",6667) --define server / port here
function split(data, pat)
local ret = {}
for i in string.gmatch(data,pat) do
table.insert(ret,i)
end
return ret
end
local line,png,linesplt,msgfrom = ""
while(true) do
line = con:read()
print(line)
linesplt = split(line,"[^:]+")
if #linesplt >= 2 and string.find(linesplt[2], "No Ident response") ~= nil then
print("JOIN")
con:write("USER " + nickname +" 0 * :" + nickname + "\r\n")
con:write("NICK " + nickname + "\r\n")
con:write("JOIN :" + channel +"\r\n")
elseif linesplt[1] == "PING" or linesplt[1] == "PING " then
print("PING")
png = split(line,"[^:]+")
con:write("PONG :"..png[#png].."\r\n")
elseif string.find(linesplt[1], "PRIVMSG #") ~= nil then
msgfrom = split(linesplt[1],"[^ ]+")
msgfrom = msgfrom[3]
con:write("PRIVMSG "..msgfrom.." :"..linesplt[2].."\r\n")
end
end