libApp
/* $Id$ */
/* Copyright (c) 2012-2020 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS System libApp */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef LIBAPP_APP_APPMESSAGE_H
# define LIBAPP_APP_APPMESSAGE_H
# include <System/buffer.h>
# include <System/string.h>
# include <System/variable.h>
# include "app.h"
# include "appstatus.h"
/* AppMessage */
/* types */
typedef enum _AppMessageType
{
AMT_STATUS_GET = 0,
AMT_STATUS_SET,
AMT_CALL,
AMT_ACKNOWLEDGEMENT
} AppMessageType;
# define AMT_CALLBACK AMT_CALL
typedef uint32_t AppMessageID;
/* calls */
typedef enum _AppMessageCallDirection
{
AMCD_IN = 1,
AMCD_OUT,
AMCD_IN_OUT
} AppMessageCallDirection;
typedef struct _AppMessageCallArgument
{
AppMessageCallDirection direction;
Variable * arg;
} AppMessageCallArgument;
/* macros */
# define AMCA(type, direction, variable) \
(type | (direction) << 8), (variable)
/* functions */
AppMessage * appmessage_new_deserialize(Buffer * buffer);
/* calls */
AppMessage * appmessage_new_call(String const * method,
AppMessageCallArgument * args, size_t args_cnt);
AppMessage * appmessage_new_callv(String const * method, ...);
AppMessage * appmessage_new_callv_variables(String const * method, ...);
/* status */
AppMessage * appmessage_new_status(AppStatus * status);
void appmessage_delete(AppMessage * appmessage);
/* accessors */
String const * appmessage_get_method(AppMessage * message);
AppMessageType appmessage_get_type(AppMessage * message);
/* useful */
int appmessage_serialize(AppMessage * message, Buffer * buffer);
#endif /* !LIBAPP_APP_APPMESSAGE_H */