lm_message.c
changeset 12 63f06a23c235
parent 11 a8c6460d612b
child 16 09b375e9ce32
equal deleted inserted replaced
11:a8c6460d612b 12:63f06a23c235
    67 	{ NULL,            0                                },
    67 	{ NULL,            0                                },
    68 };
    68 };
    69 
    69 
    70 /// lm.message.new
    70 /// lm.message.new
    71 /// Creates new message object.
    71 /// Creates new message object.
       
    72 /// Note: you can specify nil as to argument to send message to server.
    72 /// A: string (to), message type, message sub type (optional)
    73 /// A: string (to), message type, message sub type (optional)
    73 /// R: lm message object
    74 /// R: lm message object
    74 static int new_lm_message (lua_State *L)
    75 static int new_lm_message (lua_State *L)
    75 {
    76 {
    76 	const char *to   = luaL_checkstring (L, 1);
    77 	const char *to   = NULL;
    77 	int         type = luaL_checkenum (L, 2, type_lm_message);
    78 	int         type = luaL_checkenum (L, 2, type_lm_message);
    78 	LmMessage *message;
    79 	LmMessage *message;
       
    80 
       
    81 	if (lua_type (L, 1) != LUA_TNIL)
       
    82 		to = luaL_checkstring (L, 1);
    79 	if (lua_gettop (L) > 2)
    83 	if (lua_gettop (L) > 2)
    80 		message = lm_message_new_with_sub_type (to, type,
    84 		message = lm_message_new_with_sub_type (to, type,
    81 						luaL_checkenum (L, 3, sub_type_lm_message));
    85 						luaL_checkenum (L, 3, sub_type_lm_message));
    82 	else
    86 	else
    83 		message = lm_message_new (to, type);
    87 		message = lm_message_new (to, type);
   140 }
   144 }
   141 
   145 
   142 static const luaL_Reg reg_f_lm_message[] = {
   146 static const luaL_Reg reg_f_lm_message[] = {
   143 	{ "new",   new_lm_message       },
   147 	{ "new",   new_lm_message       },
   144 	{ "bless", bless_lua_lm_message },
   148 	{ "bless", bless_lua_lm_message },
   145 	{ NULL,    NULL                  },
   149 	{ NULL,    NULL                 },
   146 };
   150 };
   147 
   151 
   148 static const luaL_Reg reg_m_lm_message[] = {
   152 static const luaL_Reg reg_m_lm_message[] = {
   149 	{ "node",       node_lm_message            },
   153 	{ "node",       node_lm_message    },
   150 	{ "type",       kind_lm_message            },
   154 	{ "type",       kind_lm_message    },
   151 	// These methods are common for message and message node
   155 	// These methods are common for message and message node
   152 	{ "next",       next_lm_node       },
   156 	{ "next",       next_lm_node       },
   153 	{ "prev",       prev_lm_node       },
   157 	{ "prev",       prev_lm_node       },
   154 	{ "children",   children_lm_node   },
   158 	{ "children",   children_lm_node   },
   155 	{ "parent",     parent_lm_node     },
   159 	{ "parent",     parent_lm_node     },
   159 	{ "attribute",  attribute_lm_node  },
   163 	{ "attribute",  attribute_lm_node  },
   160 	{ "raw",        raw_lm_node        },
   164 	{ "raw",        raw_lm_node        },
   161 	{ "xml",        xml_lm_node        },
   165 	{ "xml",        xml_lm_node        },
   162 	{ "path",       path_lm_node       },
   166 	{ "path",       path_lm_node       },
   163 	// End common methods
   167 	// End common methods
   164 	{ "pointer",    pointer_lm_message         },
   168 	{ "pointer",    pointer_lm_message },
   165 	{ "__gc",       gc_lm_message              },
   169 	{ "__gc",       gc_lm_message      },
   166 	{ NULL,         NULL                        },
   170 	{ NULL,         NULL               },
   167 };
   171 };
   168 
   172 
   169 int luaopen_lm_message (lua_State *L)
   173 int luaopen_lm_message (lua_State *L)
   170 {
   174 {
   171 	luaL_newmetatable (L, "loudmouth.message");
   175 	luaL_newmetatable (L, "loudmouth.message");