From b4afa06e383325f4a0c751a64ca896d769db07a8 Mon Sep 17 00:00:00 2001 From: Trumeet Date: Wed, 20 Jul 2022 18:12:22 -0700 Subject: libac: First Commit --- client/libacron/ids.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 client/libacron/ids.c (limited to 'client/libacron/ids.c') diff --git a/client/libacron/ids.c b/client/libacron/ids.c new file mode 100644 index 0000000..89fff9a --- /dev/null +++ b/client/libacron/ids.c @@ -0,0 +1,80 @@ +/* + * Created by yuuta on 7/19/22. + */ + +#include "log.h" +#include "common.h" +#include "libac.h" + +#include + +int ac_object_free(ac_obj_t *obj) { + switch (obj->type & 192 /* 0b11000000 */) { + case AC_TYPE_EVENT: { + switch (obj->type) { + case AC_EVENT_PLAYER_JOIN: { + ac_event_player_join_t *v = (ac_event_player_join_t *) obj; + if (v->player.name) free(v->player.name); + if (v->player.uuid) free(v->player.uuid); + goto ok; + } + case AC_EVENT_PLAYER_DISCONNECT: { + ac_event_player_disconnect_t *v = (ac_event_player_disconnect_t *) obj; + if (v->player.name) free(v->player.name); + if (v->player.uuid) free(v->player.uuid); + if (v->reason) free(v->reason); + goto ok; + } + case AC_EVENT_ENTITY_DEATH: { + ac_event_entity_death_t *v = (ac_event_entity_death_t *) obj; + if (v->entity.name) free(v->entity.name); + if (v->entity.uuid) free(v->entity.uuid); + if (v->message) free(v->message); + goto ok; + } + case AC_EVENT_PLAYER_MESSAGE: { + ac_event_player_message_t *v = (ac_event_player_message_t *) obj; + if (v->player.name) free(v->player.name); + if (v->player.uuid) free(v->player.uuid); + if (v->text) free(v->text); + goto ok; + } + case AC_EVENT_LAGGING: { + goto ok; + } + } + } + case AC_TYPE_REQUEST: + /* Request objects are user-allocated. Do not free them and report an error. */ + break; + case AC_TYPE_RESPONSE: { + switch (obj->type) { + case AC_RESPONSE_CMD_RESULT: { + goto ok; + } + case AC_RESPONSE_CMD_OUT: { + ac_response_cmd_out_t *v = (ac_response_cmd_out_t *) obj; + if (v->sender) free(v->sender); + if (v->out) free(v->out); + goto ok; + } + case AC_RESPONSE_ERROR: { + ac_response_error_t *v = (ac_response_error_t *) obj; + if (v->message) free(v->message); + goto ok; + } + case AC_RESPONSE_OK: { + goto ok; + } + } + break; + } + } + LOGE("Invalid type passed to ac_obj_free function."); + return AC_E_INVALID_REQUEST; + ok: + { + free(obj); + return AC_E_OK; + }; +} \ No newline at end of file -- cgit v1.2.3