From efae098833bf1740a98dedccd05ef9b416071e48 Mon Sep 17 00:00:00 2001 From: youngman Date: Wed, 11 Nov 2015 11:53:51 +0900 Subject: [PATCH] Rearrange CRUDN methods in "iotcon-test-basic" Change-Id: If084073a8cf196f1f09c63efe72d698e7917967e Signed-off-by: youngman --- lib/icl-resource.c | 4 +- test/iotcon-test-basic-client.c | 114 +++++++++++++++++++++++++--------------- test/iotcon-test-basic-server.c | 85 +++++++++++++++++++++++------- 3 files changed, 140 insertions(+), 63 deletions(-) diff --git a/lib/icl-resource.c b/lib/icl-resource.c index 04b1060..ec8f3ef 100644 --- a/lib/icl-resource.c +++ b/lib/icl-resource.c @@ -559,8 +559,8 @@ API int iotcon_resource_notify(iotcon_resource_h resource, else obs = icl_dbus_observers_to_gvariant(resource->observers); - ic_dbus_call_notify_sync(icl_dbus_get_object(), resource->handle, repr_gvar, obs, &ret, - NULL, &error); + ic_dbus_call_notify_sync(icl_dbus_get_object(), resource->handle, repr_gvar, obs, + &ret, NULL, &error); if (error) { ERR("ic_dbus_call_notify_sync() Fail(%s)", error->message); ret = icl_dbus_convert_dbus_error(error->code); diff --git a/test/iotcon-test-basic-client.c b/test/iotcon-test-basic-client.c index 8e21069..f753e69 100644 --- a/test/iotcon-test-basic-client.c +++ b/test/iotcon-test-basic-client.c @@ -29,26 +29,68 @@ static GList *device_id_list; static void _on_response(iotcon_remote_resource_h resource, iotcon_error_e err, iotcon_request_type_e request_type, iotcon_response_h response, void *user_data); -static void _on_response_notify(iotcon_remote_resource_h resource, iotcon_response_h response, - void *user_data) +static void _on_response_notify(iotcon_remote_resource_h resource, + iotcon_response_h response, void *user_data) { - INFO("_on_response_notify"); - + int ret; + bool opened; static int i = 0; - i++; + iotcon_state_h state; + iotcon_representation_h repr; + iotcon_response_result_e response_result; + + ret = iotcon_response_get_result(response, &response_result); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_response_get_result() Fail(%d)", ret); + return; + } + + if (IOTCON_RESPONSE_RESULT_OK != response_result) { + ERR("_on_response_observe Response error(%d)", response_result); + return; + } + + ret = iotcon_response_get_representation(response, &repr); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_response_get_representation() Fail(%d)", ret); + return; + } + + ret = iotcon_representation_get_state(repr, &state); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_representation_get_state() Fail(%d)", ret); + return; + } + + ret = iotcon_state_get_bool(state, "opened", &opened); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_state_get_bool() Fail(%d)", ret); + return; + } + + INFO("notify_cb information"); + switch (opened) { + case true: + INFO("[Door] opened."); + break; + case false: + INFO("[Door] closed."); + break; + default: + break; + } - if (2 == i) { + if (5 == i++) { iotcon_remote_resource_unset_notify_cb(resource); iotcon_remote_resource_destroy(resource); } } -static void _on_response_delete(iotcon_remote_resource_h resource, iotcon_response_h response, - void *user_data) +static void _on_response_delete(iotcon_remote_resource_h resource, + iotcon_response_h response, void *user_data) { int ret; iotcon_response_result_e response_result; - iotcon_remote_resource_h door_resource = user_data; ret = iotcon_response_get_result(response, &response_result); if (IOTCON_ERROR_NONE != ret) { @@ -65,16 +107,11 @@ static void _on_response_delete(iotcon_remote_resource_h resource, iotcon_respon /* delete callback operations */ - ret = iotcon_remote_resource_set_notify_cb(door_resource, IOTCON_OBSERVE_ALL, NULL, - _on_response, NULL); - if (IOTCON_ERROR_NONE != ret) - ERR("iotcon_remote_resource_set_notify_cb() Fail(%d)", ret); - iotcon_remote_resource_destroy(resource); } -static void _on_response_post(iotcon_remote_resource_h resource, iotcon_response_h response, - void *user_data) +static void _on_response_post(iotcon_remote_resource_h resource, + iotcon_response_h response, void *user_data) { iotcon_state_h recv_state; char *host, *created_uri_path; @@ -82,7 +119,7 @@ static void _on_response_post(iotcon_remote_resource_h resource, iotcon_response iotcon_connectivity_type_e connectivity_type; iotcon_response_result_e response_result; iotcon_resource_types_h types = NULL; - iotcon_remote_resource_h new_door_resource, door_resource; + iotcon_remote_resource_h new_door_resource; iotcon_representation_h recv_repr = NULL; ret = iotcon_response_get_result(response, &response_result); @@ -148,22 +185,12 @@ static void _on_response_post(iotcon_remote_resource_h resource, iotcon_response return; } - ret = iotcon_remote_resource_clone(resource, &door_resource); - if (IOTCON_ERROR_NONE != ret) { - ERR("iotcon_remote_resource_clone() Fail(%d)", ret); - iotcon_remote_resource_destroy(new_door_resource); - return; - } - - ret = iotcon_remote_resource_delete(new_door_resource, _on_response, door_resource); + ret = iotcon_remote_resource_delete(new_door_resource, _on_response, NULL); if (IOTCON_ERROR_NONE != ret) { ERR("iotcon_remote_resource_delete() Fail(%d)", ret); - iotcon_remote_resource_destroy(door_resource); iotcon_remote_resource_destroy(new_door_resource); return; } - - iotcon_remote_resource_destroy(resource); } static void _on_response_put(iotcon_remote_resource_h resource, iotcon_response_h response, @@ -257,7 +284,7 @@ static void _on_response_get(iotcon_remote_resource_h resource, return; } - ret = iotcon_state_set_bool(send_state, "opened", true); + ret = iotcon_state_set_bool(send_state, "opened", !opened); if (IOTCON_ERROR_NONE != ret) { ERR("iotcon_state_set_bool() Fail(%d)", ret); iotcon_state_destroy(send_state); @@ -533,36 +560,41 @@ static void _found_resource(iotcon_remote_resource_h resource, iotcon_error_e re strlen(DOOR_RESOURCE_URI_PREFIX))) { iotcon_query_h query; - ret = iotcon_query_create(&query); + ret = iotcon_remote_resource_clone(resource, &resource_clone); if (IOTCON_ERROR_NONE != ret) { - ERR("iotcon_query_create() Fail(%d)", ret); + ERR("iotcon_remote_resource_clone() Fail(%d)", ret); + iotcon_query_destroy(query); device_id_list = g_list_remove(device_id_list, door_resource_device_id); free(door_resource_device_id); return; } - ret = iotcon_query_add(query, "query_key", "query_value"); + /* Set NOTIFY callback */ + ret = iotcon_remote_resource_set_notify_cb(resource_clone, IOTCON_OBSERVE, NULL, + _on_response, NULL); if (IOTCON_ERROR_NONE != ret) { - ERR("iotcon_query_add() Fail(%d)", ret); - iotcon_query_destroy(query); + ERR("iotcon_remote_resource_set_notify_cb() Fail(%d)", ret); device_id_list = g_list_remove(device_id_list, door_resource_device_id); free(door_resource_device_id); return; } - ret = iotcon_remote_resource_clone(resource, &resource_clone); + ret = iotcon_query_create(&query); if (IOTCON_ERROR_NONE != ret) { - ERR("iotcon_remote_resource_clone() Fail(%d)", ret); - iotcon_query_destroy(query); + ERR("iotcon_query_create() Fail(%d)", ret); device_id_list = g_list_remove(device_id_list, door_resource_device_id); free(door_resource_device_id); return; } - /* get the resource host address */ - iotcon_remote_resource_get_host_address(resource_clone, &resource_host); - INFO("[%s] resource host : %s", resource_uri_path, resource_host); - + ret = iotcon_query_add(query, "query_key", "query_value"); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_query_add() Fail(%d)", ret); + iotcon_query_destroy(query); + device_id_list = g_list_remove(device_id_list, door_resource_device_id); + free(door_resource_device_id); + return; + } /* send GET Request */ ret = iotcon_remote_resource_get(resource_clone, query, _on_response, NULL); diff --git a/test/iotcon-test-basic-server.c b/test/iotcon-test-basic-server.c index 8d4e8e7..7891df7 100644 --- a/test/iotcon-test-basic-server.c +++ b/test/iotcon-test-basic-server.c @@ -277,31 +277,72 @@ static void _request_handler_put(door_resource_s *door, iotcon_request_h request iotcon_state_destroy(resp_state); ret = _send_response(response, resp_repr, IOTCON_RESPONSE_RESULT_OK); - if (0 != ret) + if (0 != ret) { ERR("_send_response() Fail(%d)", ret); + iotcon_representation_destroy(resp_repr); + return; + } + + /* notify */ + ret = iotcon_resource_notify(door->handle, resp_repr, door->observers); + if (IOTCON_ERROR_NONE != ret) + ERR("iotcon_resource_notify() Fail(%d)", ret); iotcon_representation_destroy(resp_repr); } -static gboolean _notifier(gpointer user_data) +static gboolean _door_state_changer(gpointer user_data) { int ret; static int i = 0; - door_resource_s *door; + door_resource_s *door = user_data; + iotcon_state_h state; iotcon_representation_h repr; - door = user_data; - - if ((5 == i++) || !(door->observers)) + if ((5 == i++) || NULL == door->observers) return G_SOURCE_REMOVE; - INFO("NOTIFY!"); + if (false == door->state) { + door->state = true; + INFO("[Door] closed -> opened"); + } else { + door->state = false; + INFO("[Door] opened -> closed"); + } + ret = iotcon_representation_create(&repr); if (IOTCON_ERROR_NONE != ret) { ERR("iotcon_representation_create() Fail(%d)", ret); return G_SOURCE_REMOVE; } + ret = iotcon_state_create(&state); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_state_create() Fail(%d)", ret); + iotcon_representation_destroy(repr); + return G_SOURCE_REMOVE; + } + + ret = iotcon_state_set_bool(state, "opened", door->state); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_state_set_bool() Fail(%d)", ret); + iotcon_state_destroy(state); + iotcon_representation_destroy(repr); + return G_SOURCE_REMOVE; + } + + ret = iotcon_representation_set_state(repr, state); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_representation_set_state() Fail(%d)", ret); + iotcon_state_destroy(state); + iotcon_representation_destroy(repr); + return G_SOURCE_REMOVE; + } + + iotcon_state_destroy(state); + + INFO("NOTIFY!"); + ret = iotcon_resource_notify(door->handle, repr, door->observers); if (IOTCON_ERROR_NONE != ret) { ERR("iotcon_resource_notify() Fail(%d)", ret); @@ -310,7 +351,6 @@ static gboolean _notifier(gpointer user_data) } iotcon_representation_destroy(repr); - return G_SOURCE_CONTINUE; } @@ -377,7 +417,7 @@ static void _request_handler_post(door_resource_s *door, iotcon_response_h respo iotcon_representation_destroy(resp_repr); /* add observe */ - g_timeout_add_seconds(5, _notifier, door); + g_timeout_add_seconds(5, _door_state_changer, door); } static void _request_handler_delete(iotcon_resource_h resource, @@ -428,7 +468,12 @@ static void _request_handler(iotcon_resource_h resource, iotcon_request_h reques RET_IF(NULL == request); - door = user_data; + ret = iotcon_request_get_host_address(request, &host_address); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_request_get_host_address() Fail(%d)", ret); + return; + } + INFO("host_address : %s", host_address); ret = iotcon_request_get_query(request, &query); if (IOTCON_ERROR_NONE != ret) { @@ -450,6 +495,8 @@ static void _request_handler(iotcon_resource_h resource, iotcon_request_h reques return; } + door = user_data; + if (IOTCON_REQUEST_GET & types) _request_handler_get(door, response); @@ -464,13 +511,6 @@ static void _request_handler(iotcon_resource_h resource, iotcon_request_h reques iotcon_response_destroy(response); - ret = iotcon_request_get_host_address(request, &host_address); - if (IOTCON_ERROR_NONE != ret) { - ERR("iotcon_request_get_host_address() Fail(%d)", ret); - return; - } - INFO("host_address : %s", host_address); - if (IOTCON_REQUEST_OBSERVE & types) { ret = iotcon_request_get_observe_action(request, &observe_action); if (IOTCON_ERROR_NONE != ret) { @@ -485,6 +525,10 @@ static void _request_handler(iotcon_resource_h resource, iotcon_request_h reques return; } ret = iotcon_observers_add(door->observers, observe_id); + if (IOTCON_ERROR_NONE != ret) { + ERR("iotcon_observers_add() Fail(%d)", ret); + return; + } } else if (IOTCON_OBSERVE_DEREGISTER == observe_action) { ret = iotcon_request_get_observe_id(request, &observe_id); if (IOTCON_ERROR_NONE != ret) { @@ -505,11 +549,11 @@ static gboolean _presence_timer(gpointer user_data) static int i = 0; i++; if (i % 2) - iotcon_start_presence(10); - else iotcon_stop_presence(); + else + iotcon_start_presence(10); - if (4 == i) + if (3 == i) return G_SOURCE_REMOVE; return G_SOURCE_CONTINUE; @@ -545,6 +589,7 @@ int main(int argc, char **argv) /* add presence */ g_timeout_add_seconds(10, _presence_timer, NULL); + iotcon_start_presence(10); /* create new door resource */ my_door.handle = _create_door_resource(my_door.uri_path, my_door.type, my_door.ifaces, -- 2.7.4