author | Tero Marttila <terom@fixme.fi> |
Tue, 31 Mar 2009 19:56:18 +0300 | |
changeset 94 | 05a96b200d7b |
parent 93 | 42ade8285570 |
child 96 | a07d917adec1 |
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 |
/** |
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
|
8 |
* 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
|
9 |
*/ |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
10 |
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
|
11 |
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
|
12 |
}; |
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
|
13 |
|
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
|
14 |
/** |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
15 |
* 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
|
16 |
*/ |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
17 |
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
|
18 |
{ |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
19 |
// create the new userdata on the stack |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
20 |
struct lua_net *lua_net = lua_newuserdata(L, sizeof(*lua_net)); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
21 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
22 |
// get the type and set it |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
23 |
luaL_getmetatable(L, "evirc.net"); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
24 |
lua_setmetatable(L, -2); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
25 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
26 |
// initialize |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
27 |
lua_net->net = net; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
28 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
29 |
// ok |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
30 |
return 1; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
31 |
} |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
32 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
33 |
/** |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
34 |
* 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
|
35 |
*/ |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
36 |
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
|
37 |
{ |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
38 |
struct lua_net *lua_net; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
39 |
struct irc_chan_info chan_info; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
40 |
struct irc_chan *chan; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
41 |
struct error_info err; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
42 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
43 |
// validate the lua_net arg |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
44 |
if ((lua_net = luaL_checkudata(L, 1, "evirc.net")) == NULL) |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
45 |
return luaL_argerror(L, 1, "`evirc.net` expected"); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
46 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
47 |
// the channel name |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
48 |
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
|
49 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
50 |
// add it |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
51 |
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
|
52 |
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
|
53 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
54 |
// XXX: wrap it |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
55 |
return 0; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
56 |
} |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
57 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
58 |
static const struct luaL_Reg lua_net_methods[] = { |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
59 |
{ "join", &lua_net_join }, |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
60 |
{ NULL, NULL } |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
61 |
}; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
62 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
63 |
/** |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
64 |
* Initialize the lua_net object type |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
65 |
*/ |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
66 |
static err_t lua_net_init (lua_State *L) |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
67 |
{ |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
68 |
luaL_newmetatable(L, "evirc.net"); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
69 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
70 |
// set the metatable __index to itself |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
71 |
lua_pushvalue(L, -1); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
72 |
lua_setfield(L, -1, "__index"); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
73 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
74 |
// register the methods to the metatable |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
75 |
luaL_register(L, NULL, lua_net_methods); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
76 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
77 |
return SUCCESS; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
78 |
} |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
79 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
80 |
/** |
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
|
81 |
* 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
|
82 |
*/ |
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
|
83 |
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
|
84 |
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
|
85 |
}; |
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
|
86 |
|
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
|
87 |
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
|
88 |
{ |
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
|
89 |
struct lua_client *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
|
90 |
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
|
91 |
|
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
|
92 |
// validate the lua_client arg |
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
|
93 |
if ((lua_client = luaL_checkudata(L, 1, "evirc.client")) == NULL) |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
94 |
return luaL_argerror(L, 1, "`evirc.client` expected"); |
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
|
95 |
|
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
|
96 |
// 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
|
97 |
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
|
98 |
|
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
|
99 |
// 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
|
100 |
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
|
101 |
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
|
102 |
|
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
|
103 |
// 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
|
104 |
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
|
105 |
} |
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
|
106 |
|
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
107 |
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
|
108 |
{ |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
109 |
struct lua_client *lua_client; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
110 |
struct irc_net *net; |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
111 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
112 |
// validate the lua_client arg |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
113 |
if ((lua_client = luaL_checkudata(L, 1, "evirc.client")) == NULL) |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
114 |
return luaL_argerror(L, 1, "`evirc.client` expected"); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
115 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
116 |
// the network name |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
117 |
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
|
118 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
119 |
// lookup the irc_net |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
120 |
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
|
121 |
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
|
122 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
123 |
// wrap it |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
124 |
return lua_net_create(L, net); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
125 |
} |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
126 |
|
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
127 |
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
|
128 |
{ "quit", &lua_client_quit }, |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
129 |
{ "network", &lua_client_get_network }, |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
130 |
{ 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
|
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 |
|
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
|
133 |
/** |
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
|
134 |
* 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
|
135 |
* '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
|
136 |
*/ |
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
|
137 |
static err_t lua_client_init (lua_State *L, 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
|
138 |
{ |
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
|
139 |
// 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
|
140 |
// XXX: mem errors? |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
141 |
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
|
142 |
|
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
|
143 |
// push a new metatable to identify the 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
|
144 |
luaL_newmetatable(L, "evirc.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
|
145 |
|
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
|
146 |
// set the metatable __index to itself |
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
|
147 |
lua_pushvalue(L, -1); |
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
|
148 |
lua_setfield(L, -1, "__index"); |
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
|
149 |
|
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
|
150 |
// register the methods to the metatable |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
151 |
luaL_register(L, NULL, 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
|
152 |
|
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
|
153 |
// 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
|
154 |
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
|
155 |
|
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
|
156 |
// 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
|
157 |
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
|
158 |
|
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
|
159 |
// 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
|
160 |
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
|
161 |
|
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
|
162 |
// 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
|
163 |
return SUCCESS; |
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
|
164 |
} |
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
|
165 |
|
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
|
166 |
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
|
167 |
{ |
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
|
168 |
// init the various bits |
94
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
169 |
lua_client_init(L, nexus->client); |
05a96b200d7b
wrap irc_net and add lua_net_join
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
170 |
lua_net_init(L); |
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 |
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
|
173 |
} |