Also implemented creating messages with arguments
This commit is contained in:
parent
647a3ad8b8
commit
4291bae1f9
|
@ -33,6 +33,7 @@ typedef enum _AppMessageType
|
||||||
|
|
||||||
/* functions */
|
/* functions */
|
||||||
AppMessage * appmessage_new_call(char const * method, ...);
|
AppMessage * appmessage_new_call(char const * method, ...);
|
||||||
|
AppMessage * appmessage_new_call_variables(char const * method, ...);
|
||||||
AppMessage * appmessage_new_deserialize(Buffer * buffer);
|
AppMessage * appmessage_new_deserialize(Buffer * buffer);
|
||||||
void appmessage_delete(AppMessage * appmessage);
|
void appmessage_delete(AppMessage * appmessage);
|
||||||
|
|
||||||
|
|
|
@ -51,19 +51,34 @@ AppMessage * appmessage_new_call(char const * method, ...)
|
||||||
{
|
{
|
||||||
AppMessage * message;
|
AppMessage * message;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
size_t i;
|
||||||
|
int type;
|
||||||
Variable * v;
|
Variable * v;
|
||||||
|
Variable ** p;
|
||||||
|
|
||||||
if((message = object_new(sizeof(*message))) == NULL)
|
if((message = object_new(sizeof(*message))) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
message->type = AMT_CALL;
|
message->type = AMT_CALL;
|
||||||
message->t.call.method = string_new(method);
|
message->t.call.method = string_new(method);
|
||||||
|
message->t.call.args = NULL;
|
||||||
|
message->t.call.args_cnt = 0;
|
||||||
/* copy the arguments */
|
/* copy the arguments */
|
||||||
va_start(ap, method);
|
va_start(ap, method);
|
||||||
while((v = va_arg(ap, Variable *)) != NULL)
|
for(i = 0; (type = va_arg(ap, int)) >= 0; i++)
|
||||||
;
|
{
|
||||||
|
if((p = realloc(message->t.call.args, sizeof(*p) * (i + 1)))
|
||||||
|
== NULL)
|
||||||
|
break;
|
||||||
|
message->t.call.args = p;
|
||||||
|
if((v = variable_new(type, va_arg(ap, void *))) == NULL)
|
||||||
|
break;
|
||||||
|
message->t.call.args = p;
|
||||||
|
message->t.call.args[i] = v;
|
||||||
|
message->t.call.args_cnt = i + 1;
|
||||||
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
/* check for errors */
|
/* check for errors */
|
||||||
if(message->t.call.method == NULL)
|
if(message->t.call.method == NULL || type >= 0)
|
||||||
{
|
{
|
||||||
appmessage_delete(message);
|
appmessage_delete(message);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -100,7 +100,7 @@ static int _transport(char const * protocol, char const * name)
|
||||||
plugin_delete(plugin);
|
plugin_delete(plugin);
|
||||||
return error_print("transport");
|
return error_print("transport");
|
||||||
}
|
}
|
||||||
transport.message = appmessage_new_call("hello");
|
transport.message = appmessage_new_call("hello", -1);
|
||||||
tv.tv_sec = 1;
|
tv.tv_sec = 1;
|
||||||
tv.tv_usec = 0;
|
tv.tv_usec = 0;
|
||||||
/* enter the main loop */
|
/* enter the main loop */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user