diff options
author | Trumeet <yuuta@yuuta.moe> | 2022-07-20 18:12:22 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2022-07-20 18:12:22 -0700 |
commit | b4afa06e383325f4a0c751a64ca896d769db07a8 (patch) | |
tree | 7647fdd73d4f487de778c27aea99bf890458b647 /client/libacron/ids.c | |
parent | da14a17298c67d83e6da4732f47304954acc26fc (diff) | |
download | acron-b4afa06e383325f4a0c751a64ca896d769db07a8.tar acron-b4afa06e383325f4a0c751a64ca896d769db07a8.tar.gz acron-b4afa06e383325f4a0c751a64ca896d769db07a8.tar.bz2 acron-b4afa06e383325f4a0c751a64ca896d769db07a8.zip |
libac: First Commit
Diffstat (limited to 'client/libacron/ids.c')
-rw-r--r-- | client/libacron/ids.c | 80 |
1 files changed, 80 insertions, 0 deletions
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 <stdlib.h> + +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 |