aboutsummaryrefslogtreecommitdiff
path: root/client/libacron/ids.c
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-07-20 18:12:22 -0700
committerTrumeet <yuuta@yuuta.moe>2022-07-20 18:12:22 -0700
commitb4afa06e383325f4a0c751a64ca896d769db07a8 (patch)
tree7647fdd73d4f487de778c27aea99bf890458b647 /client/libacron/ids.c
parentda14a17298c67d83e6da4732f47304954acc26fc (diff)
downloadacron-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.c80
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