author | Tero Marttila <terom@fixme.fi> |
Tue, 31 Mar 2009 20:57:07 +0300 | |
changeset 97 | d3bc82ee76cb |
parent 96 | a07d917adec1 |
child 98 | f357f835f0d5 |
permissions | -rw-r--r-- |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include "lua_objs.h" |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
#include <lua5.1/lua.h> |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
#include <lua5.1/lualib.h> |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
#include <lua5.1/lauxlib.h> |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
/** |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
8 |
* Convenience function to register a new metatable for a type, this leaves the metatable on the stack |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
9 |
*/ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
10 |
static void lua_obj_create_type (lua_State *L, const char *name, const struct luaL_Reg methods[]) |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
11 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
12 |
luaL_newmetatable(L, name); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
13 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
14 |
// set the metatable __index to itself |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
15 |
lua_pushvalue(L, -1); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
16 |
lua_setfield(L, -1, "__index"); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
17 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
18 |
// register the methods to the metatable |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
19 |
luaL_register(L, NULL, methods); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
20 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
21 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
22 |
/** |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
23 |
* Convenience function to create a new userdata with the given type metatable name, return the pointer, and keep it |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
24 |
* on the stack |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
25 |
*/ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
26 |
static void* lua_obj_create_obj (lua_State *L, const char *name, size_t size) |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
27 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
28 |
// create the new userdata on the stack |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
29 |
void *ud = lua_newuserdata(L, size); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
30 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
31 |
// get the type and set it |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
32 |
luaL_getmetatable(L, name); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
33 |
lua_setmetatable(L, -2); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
34 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
35 |
// ok |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
36 |
return ud; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
37 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
38 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
39 |
/** |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
40 |
* Convenience function to get a userdata with the given type metatable name as the first argument for a function |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
41 |
*/ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
42 |
static void* lua_obj_get_obj (lua_State *L, const char *func, const char *name) |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
43 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
44 |
void *ud; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
45 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
46 |
// validate the userdata arg |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
47 |
if ((ud = luaL_checkudata(L, 1, name)) == NULL) { |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
48 |
luaL_error(L, "bad type argument to %s: `%s` expected", func, name); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
49 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
50 |
} else { |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
51 |
// ok |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
52 |
return ud; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
53 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
54 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
55 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
56 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
57 |
/** |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
58 |
* Our lua wrapper for irc_chan |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
59 |
*/ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
60 |
struct lua_chan { |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
61 |
struct irc_chan *chan; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
62 |
}; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
63 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
64 |
/** |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
65 |
* Create a lua_chan userdata from the given irc_chan and leave it on the stack, returning 1 |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
66 |
*/ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
67 |
static int lua_chan_create (lua_State *L, struct irc_chan *chan) |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
68 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
69 |
// create the new obj |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
70 |
struct lua_chan *lua_chan = lua_obj_create_obj(L, "evirc.chan", sizeof(*lua_chan)); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
71 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
72 |
// initialize |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
73 |
lua_chan->chan = chan; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
74 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
75 |
// ok |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
76 |
return 1; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
77 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
78 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
79 |
/** |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
80 |
* Return the channel name as a lua string |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
81 |
*/ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
82 |
static int lua_chan_tostring (lua_State *L) |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
83 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
84 |
struct lua_chan *lua_chan = lua_obj_get_obj(L, __func__, "evirc.chan"); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
85 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
86 |
lua_pushfstring(L, "<irc_chan %s>", irc_chan_name(lua_chan->chan)); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
87 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
88 |
return 1; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
89 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
90 |
|
97
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
91 |
/** |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
92 |
* Send a PRIVMSG to the channel |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
93 |
*/ |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
94 |
static int lua_chan_say (lua_State *L) |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
95 |
{ |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
96 |
err_t err; |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
97 |
|
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
98 |
struct lua_chan *lua_chan = lua_obj_get_obj(L, __func__, "evirc.chan"); |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
99 |
|
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
100 |
// the message |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
101 |
const char *message = luaL_checkstring(L, 2); |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
102 |
|
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
103 |
// send |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
104 |
if ((err = irc_chan_PRIVMSG(lua_chan->chan, message))) |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
105 |
return luaL_error(L, "irc_chan_PRIVMSG: '%s': %s", message, error_name(err)); |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
106 |
|
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
107 |
// ok |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
108 |
return 0; |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
109 |
} |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
110 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
111 |
static const struct luaL_Reg lua_chan_methods[] = { |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
112 |
{ "__tostring", &lua_chan_tostring }, |
97
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
96
diff
changeset
|
113 |
{ "say", &lua_chan_say }, |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
114 |
{ NULL, NULL }, |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
115 |
}; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
116 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
117 |
/** |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
118 |
* Initialize the lua_chan object type |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
119 |
*/ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
120 |
static void lua_chan_init (lua_State *L) |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
121 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
122 |
lua_obj_create_type(L, "evirc.chan", lua_chan_methods); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
123 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
124 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
125 |
/** |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
126 |
* Our lua wrapper for irc_net |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
127 |
*/ |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
128 |
struct lua_net { |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
129 |
struct irc_net *net; |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
130 |
}; |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
131 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
132 |
/** |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
133 |
* Create a lua_net userdata from the given irc_net and push it onto the stack, returning 1. |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
134 |
*/ |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
135 |
static int lua_net_create (lua_State *L, struct irc_net *net) |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
136 |
{ |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
137 |
// create the new obj |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
138 |
struct lua_net *lua_net = lua_obj_create_obj(L, "evirc.net", sizeof(*lua_net)); |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
139 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
140 |
// initialize |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
141 |
lua_net->net = net; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
142 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
143 |
// ok |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
144 |
return 1; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
145 |
} |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
146 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
147 |
/** |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
148 |
* Return the network name as a lua string |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
149 |
*/ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
150 |
static int lua_net_tostring (lua_State *L) |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
151 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
152 |
struct lua_net *lua_net = lua_obj_get_obj(L, __func__, "evirc.net"); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
153 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
154 |
lua_pushfstring(L, "<irc_net %s>", irc_net_name(lua_net->net)); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
155 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
156 |
return 1; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
157 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
158 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
159 |
/** |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
160 |
* Join a new channel, returning the lua_chan |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
161 |
*/ |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
162 |
static int lua_net_join (lua_State *L) |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
163 |
{ |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
164 |
struct lua_net *lua_net = lua_obj_get_obj(L, __func__, "evirc.net"); |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
165 |
struct irc_chan_info chan_info; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
166 |
struct irc_chan *chan; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
167 |
struct error_info err; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
168 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
169 |
// the channel name |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
170 |
chan_info.channel = luaL_checkstring(L, 2); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
171 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
172 |
// add it |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
173 |
if (irc_net_add_chan(lua_net->net, &chan, &chan_info, &err)) |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
174 |
return luaL_error(L, "irc_net_add_chan: %s: %s", chan_info.channel, error_msg(&err)); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
175 |
|
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
176 |
// return it |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
177 |
return lua_chan_create(L, chan); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
178 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
179 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
180 |
/** |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
181 |
* Look up a channel by name, returning the lua_chan |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
182 |
*/ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
183 |
static int lua_net_get_chan (lua_State *L) |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
184 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
185 |
struct lua_net *lua_net = lua_obj_get_obj(L, __func__, "evirc.net"); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
186 |
struct irc_chan *chan; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
187 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
188 |
// the channel name |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
189 |
const char *channel = luaL_checkstring(L, 2); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
190 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
191 |
// lookup the irc_chan |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
192 |
if ((chan = irc_net_get_chan(lua_net->net, channel)) == NULL) |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
193 |
return luaL_error(L, "irc_net_get_chan: no such channel: %s", channel); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
194 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
195 |
// wrap it |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
196 |
return lua_chan_create(L, chan); |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
197 |
} |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
198 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
199 |
static const struct luaL_Reg lua_net_methods[] = { |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
200 |
{ "__tostring", &lua_net_tostring }, |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
201 |
{ "join", &lua_net_join }, |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
202 |
{ "channel", &lua_net_get_chan }, |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
203 |
{ NULL, NULL } |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
204 |
}; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
205 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
206 |
/** |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
207 |
* Initialize the lua_net object type |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
208 |
*/ |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
209 |
static void lua_net_init (lua_State *L) |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
210 |
{ |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
211 |
lua_obj_create_type(L, "evirc.net", lua_net_methods); |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
212 |
} |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
213 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
214 |
/** |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
215 |
* Wrapper for irc_client |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
216 |
*/ |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
217 |
struct lua_client { |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
218 |
struct irc_client *client; |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
219 |
}; |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
220 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
221 |
static int lua_client_quit (lua_State *L) |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
222 |
{ |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
223 |
struct lua_client *lua_client = lua_obj_get_obj(L, __func__, "evirc.client"); |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
224 |
err_t err; |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
225 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
226 |
// the message |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
227 |
const char *message = luaL_checkstring(L, 2); |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
228 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
229 |
// execute |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
230 |
if ((err = irc_client_quit(lua_client->client, message))) |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
231 |
return luaL_error(L, "irc_client_quit: %s", error_name(err)); |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
232 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
233 |
// ok |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
234 |
return 0; |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
235 |
} |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
236 |
|
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
237 |
static int lua_client_get_network (lua_State *L) |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
238 |
{ |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
239 |
struct lua_client *lua_client = lua_obj_get_obj(L, __func__, "evirc.client"); |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
240 |
struct irc_net *net; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
241 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
242 |
// the network name |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
243 |
const char *network = luaL_checkstring(L, 2); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
244 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
245 |
// lookup the irc_net |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
246 |
if ((net = irc_client_get_net(lua_client->client, network)) == NULL) |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
247 |
return luaL_error(L, "irc_client_get_net: no such network: %s", network); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
248 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
249 |
// wrap it |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
250 |
return lua_net_create(L, net); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
251 |
} |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
252 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
253 |
static const struct luaL_Reg lua_client_methods[] = { |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
254 |
{ "quit", &lua_client_quit }, |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
255 |
{ "network", &lua_client_get_network }, |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
256 |
{ NULL, NULL } |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
257 |
}; |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
258 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
259 |
/** |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
260 |
* Initializes a lua_irc_client wrapper for the given client in the give lua state. This registers a set of globals for |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
261 |
* 'client' and 'networks'. |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
262 |
*/ |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
263 |
static void lua_client_init (lua_State *L, struct irc_client *client) |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
264 |
{ |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
265 |
// allocate the global "client" object |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
266 |
// XXX: mem errors? |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
267 |
struct lua_client *lua_client = lua_newuserdata(L, sizeof(*lua_client)); |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
268 |
|
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
269 |
// create the type metatable |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
270 |
lua_obj_create_type(L, "evirc.client", lua_client_methods); |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
271 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
272 |
// set the client userdata's metatable |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
273 |
lua_setmetatable(L, -2); |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
274 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
275 |
// initialize it |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
276 |
lua_client->client = client; |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
277 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
278 |
// store it as a global |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
279 |
lua_setglobal(L, "client"); |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
280 |
} |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
281 |
|
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
282 |
err_t lua_objs_init (lua_State *L, struct nexus *nexus) |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
283 |
{ |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
284 |
// init the various bits |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
285 |
lua_client_init(L, nexus->client); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
286 |
lua_net_init(L); |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
287 |
lua_chan_init(L); |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
288 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
289 |
return SUCCESS; |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
290 |
} |