| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- /*
- * Copyright (C) 2019 Intel Corporation. All rights reserved.
- * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- */
- #include <stdio.h>
- #include <string.h>
- #include <pthread.h>
- #include <unistd.h>
- #include "host_api.h"
- #include "bi-inc/attr_container.h"
- #include "er-coap-constants.h"
- static char *
- read_file_to_buffer(const char *filename, int *ret_size);
- int send_request_to_applet_success = 0;
- const char *label_for_request = "request1";
- int event_listener_counter = 0;
- char *applet_buf[1024 * 1024];
- const char *host_agent_ip = "127.0.0.1";
- void
- f_aee_response_handler(void *usr_ctx, aee_response_t *response)
- {
- if (response == NULL) {
- printf("########## request timeout!!! \n");
- }
- else {
- char *str = (char *)usr_ctx;
- printf("#### dump response ####\n");
- printf("#### user data: %s \n", str);
- printf("#### status: %d \n", response->status);
- if (response->payload != NULL)
- attr_container_dump((attr_container_t *)response->payload);
- }
- }
- void
- f_aee_event_listener(const char *url, void *event, int fmt)
- {
- printf("######## event is received. url: %s, fmt:%d ############\n", url,
- fmt);
- attr_container_t *attr_obj = (attr_container_t *)event;
- attr_container_dump(attr_obj);
- /*
- if (0 == strcmp(url, "alert/overheat"))
- {
- event_listener_counter++;
- printf("event :%d \n", event_listener_counter);
- }
- */
- }
- static int
- print_menu_and_select(void)
- {
- char s[256];
- int choice;
- do {
- printf("\n");
- printf("1. Install TestApplet1\n");
- printf("2. Install TestApplet2\n");
- printf("3. Install TestApplet3\n");
- printf("4. Uninstall TestApplet1\n");
- printf("5. Uninstall TestApplet2\n");
- printf("6. Uninstall TestApplet3\n");
- printf("7. Send Request to TestApplet1\n");
- printf("8. Register Event to TestApplet1\n");
- printf("9. UnRegister Event to TestApplet1\n");
- printf("a. Query Applets\n");
- printf("t. Auto Test\n");
- printf("q. Exit\n");
- printf("Please Select: ");
- if (fgets(s, sizeof(s), stdin)) {
- if (!strncmp(s, "q", 1))
- return 0;
- if (!strncmp(s, "a", 1))
- return 10;
- if (!strncmp(s, "t", 1))
- return 20;
- choice = atoi(s);
- if (choice >= 1 && choice <= 9)
- return choice;
- }
- } while (1);
- return 0;
- }
- static void
- install_applet(int index)
- {
- char applet_name[64];
- char applet_file_name[64];
- char *buf;
- int size;
- int ret;
- printf("Installing TestApplet%d...\n", index);
- snprintf(applet_name, sizeof(applet_name), "TestApplet%d", index);
- snprintf(applet_file_name, sizeof(applet_file_name), "./TestApplet%d.wasm",
- index);
- buf = read_file_to_buffer(applet_file_name, &size);
- if (!buf) {
- printf("Install Applet failed: read file %s error.\n",
- applet_file_name);
- return;
- }
- // step2. install applet
- ret = aee_applet_install(buf, "wasm", size, applet_name, 5000);
- if (ret) {
- printf("%s install success\n", applet_name);
- }
- free(buf);
- }
- static void
- uninstall_applet(int index)
- {
- int ret;
- char applet_name[64];
- snprintf(applet_name, sizeof(applet_name), "TestApplet%d", index);
- ret = aee_applet_uninstall(applet_name, "wasm", 5000);
- if (ret) {
- printf("uninstall %s success\n", applet_name);
- }
- else {
- printf("uninstall %s failed\n", applet_name);
- }
- }
- static void
- send_request(int index)
- {
- char url[64];
- int ret;
- aee_request_t req;
- const char *user_context = "label for request";
- attr_container_t *attr_obj =
- attr_container_create("Send Request to Applet");
- attr_container_set_string(&attr_obj, "String key", "Hello");
- attr_container_set_int(&attr_obj, "Int key", 1000);
- attr_container_set_int64(&attr_obj, "Int64 key", 0x77BBCCDD11223344LL);
- // specify the target wasm app
- snprintf(url, sizeof(url), "/app/TestApplet%d/url1", index);
- // not specify the target wasm app
- // snprintf(url, sizeof(url), "url1");
- aee_request_init(&req, url, COAP_PUT);
- aee_request_set_payload(&req, attr_obj,
- attr_container_get_serialize_length(attr_obj),
- PAYLOAD_FORMAT_ATTRIBUTE_OBJECT);
- ret = aee_request_send(&req, f_aee_response_handler, (void *)user_context,
- 10000);
- if (ret) {
- printf("send request to TestApplet1 success\n");
- }
- }
- static void
- register_event(const char *event_path)
- {
- hostclient_register_event(event_path, f_aee_event_listener);
- }
- static void
- unregister_event(const char *event_path)
- {
- hostclient_unregister_event(event_path);
- }
- static void
- query_applets()
- {
- aee_applet_list_t applet_lst;
- aee_applet_list_init(&applet_lst);
- aee_applet_list(5000, &applet_lst);
- aee_applet_list_clean(&applet_lst);
- }
- static char *
- read_file_to_buffer(const char *filename, int *ret_size)
- {
- FILE *fl = NULL;
- char *buffer = NULL;
- int file_size = 0;
- if (!(fl = fopen(filename, "rb"))) {
- printf("file open failed\n");
- return NULL;
- }
- fseek(fl, 0, SEEK_END);
- file_size = ftell(fl);
- if (file_size == 0) {
- printf("file length 0\n");
- return NULL;
- }
- if (!(buffer = (char *)malloc(file_size))) {
- fclose(fl);
- return NULL;
- }
- fseek(fl, 0, SEEK_SET);
- if (!fread(buffer, 1, file_size, fl)) {
- printf("file read failed\n");
- return NULL;
- }
- fclose(fl);
- *ret_size = file_size;
- return buffer;
- }
- static void
- auto_test()
- {
- int i;
- int interval = 1000; /* ms */
- while (1) {
- uninstall_applet(1);
- uninstall_applet(2);
- uninstall_applet(3);
- install_applet(1);
- install_applet(2);
- install_applet(3);
- for (i = 0; i < 60 * 1000 / interval; i++) {
- query_applets();
- send_request(1);
- send_request(2);
- send_request(3);
- usleep(interval * 1000);
- }
- }
- }
- void
- exit_program()
- {
- hostclient_shutdown();
- exit(0);
- }
- int
- main()
- {
- bool ret;
- // step1. host client init
- ret = hostclient_initialize(host_agent_ip, 3456);
- if (!ret) {
- printf("host client initialize failed\n");
- return -1;
- }
- do {
- int choice = print_menu_and_select();
- printf("\n");
- if (choice == 0)
- exit_program();
- if (choice <= 3)
- install_applet(choice);
- else if (choice <= 6)
- uninstall_applet(choice - 3);
- else if (choice <= 7)
- send_request(1);
- else if (choice <= 8)
- register_event("alert/overheat");
- else if (choice <= 9)
- unregister_event("alert/overheat");
- else if (choice == 10)
- query_applets();
- else if (choice == 20)
- auto_test();
- } while (1);
- return 0;
- }
- // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
- // Debug program: F5 or Debug > Start Debugging menu
- // Tips for Getting Started:
- // 1. Use the Solution Explorer window to add/manage files
- // 2. Use the Team Explorer window to connect to source control
- // 3. Use the Output window to see build output and other messages
- // 4. Use the Error List window to view errors
- // 5. Go to Project > Add New Item to create new code files, or
- // Project > Add Existing Item to add existing code files to the project
- // 6. In the future, to open this project again, go to File > Open > Project
- // and select the .sln file
|