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) {
/* 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;
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);
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,
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);
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);
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);
}
iotcon_representation_destroy(repr);
-
return G_SOURCE_CONTINUE;
}
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,
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) {
return;
}
+ door = user_data;
+
if (IOTCON_REQUEST_GET & types)
_request_handler_get(door, response);
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) {
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) {
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;
/* 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,