src/lua_objs.c
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--
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
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
}