[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Lua and networking - possibly basic question
- From: Torsten Karwoth <agonizer@...>
- Date: Wed, 26 Oct 2005 22:57:49 +0200
Hello,
> So I'm struggling to understand how to approach implementation
> I want to allow users to be able to do:
>
> socket = connect( "host", port );
> send( socket, "GET / HTTP/1.0\n\n" );
> header = read( socket );
> data = read( socket );
> close( socket );
>
[...]
> How do other people approach this problem? (In composing this
> mail I did a few searchs and see the existance of LuaSocket - this
> might help me, if I can embed it within my code. Too soon to tell,
> but my natural reaction is to think that is overkill ...)
Currently i'm embedding lua as an scripting language in an irc bot
based on the 'energymech'. For scripting purposes i made a 'Socket'
library which uses the bots 'infrastructure' for socket handling.
This socket code doesn't support binary data.
Currently implemented socket-functions for scripts are:
n = Socket.Connect (s:host, n:port, s:function [, s:vhost])
n = Socket.Listen (n:port, s:function [, b:perm])
Socket.Close (n:sockID [, b:flag])
n, b = Socket.Status (n:sockID)
b, s = Socket.Write (n:sockID, s:message)
s = Socket.Read (n:sockID)
to open an incoming (listening) socket you would write:
lsock = Socket.Listen(40001, "mySockFunc", true);
if not lsock then [error opening listener] end;
(the 'true' flag keeps the listener socket open, this means every
client which connects will create a new socket id). The function
"mySockFunc" will be called if a client connects, disconnects
or sends data, with three parameters: The sockID, a (message)
string, and a status code:
-- this function will just reply the incoming message
-- back to the sender until we receive 'CIAO':
function mySockFunc(sid, msg, stat)
if stat < 0 then
Socket.Close(sid)
return
elseif stat > 0 then
Socket.Write(sid,"Welcome!")
return
end
-- stat is 0 here
if not msg then return end
Socket.Write(sid, msg) -- send the message back
if string.upper(msg) == "CIAO" then
Socket.Close(sid)
return
end
end
so you just can "telnet <host> 40001" and type CIAO to disconnect ;)
If you're interested i can prepare an archive with the documentation
and source code (however, there will be changes to the final version).
Bye,
Torsten