struct nh_cmd_desc *nhnet_get_commands(int *count) { int i, defkey, altkey; json_t *jmsg, *jarr, *jobj; struct nh_cmd_desc *cmdlist = NULL; const char *name, *desc; if (!nhnet_active()) return nh_get_commands(count); if (!api_entry()) return 0; jmsg = json_object(); jmsg = send_receive_msg("get_commands", jmsg); if (json_unpack(jmsg, "{so!}", "cmdlist", &jarr) == -1 || !json_is_array(jarr)) { print_error("Incorrect return object in nhnet_restore_game"); } else { *count = json_array_size(jarr); cmdlist = xmalloc(*count * sizeof(struct nh_cmd_desc)); for (i = 0; i < *count; i++) { jobj = json_array_get(jarr, i); json_unpack(jobj, "{ss,ss,si,si,si!}", "name", &name, "desc", &desc, "def", &defkey, "alt", &altkey, "flags", &cmdlist[i].flags); strcpy(cmdlist[i].name, name); strcpy(cmdlist[i].desc, desc); cmdlist[i].defkey = defkey; cmdlist[i].altkey = altkey; } } json_decref(jmsg); api_exit(); return cmdlist; }
static void ccmd_get_commands(json_t * params) { void *iter; int cmdcount, i; json_t *jarr, *jobj; struct nh_cmd_desc *cmdlist; iter = json_object_iter(params); if (iter) exit_client("non-empty parameter list for get_commands"); cmdlist = nh_get_commands(&cmdcount); jarr = json_array(); for (i = 0; i < cmdcount; i++) { jobj = json_pack("{ss,ss,si,si,si}", "name", cmdlist[i].name, "desc", cmdlist[i].desc, "def", cmdlist[i].defkey, "alt", cmdlist[i].altkey, "flags", cmdlist[i].flags); json_array_append_new(jarr, jobj); } client_msg("get_commands", json_pack("{so}", "cmdlist", jarr)); }