extern void client_resumed(struct client_node *client);
/* Related with Context-Aware service */
-extern int client_subscribe(struct client_node *client, const char *cluster, const char *category);
-extern int client_unsubscribe(struct client_node *client, const char *cluster, const char *category);
-extern int client_is_subscribed(struct client_node *client, const char *cluster, const char *category);
+extern int client_subscribe_group(struct client_node *client, const char *cluster, const char *category);
+extern int client_unsubscribe_group(struct client_node *client, const char *cluster, const char *category);
+extern int client_is_subscribed_group(struct client_node *client, const char *cluster, const char *category);
/* Related with category */
extern int client_subscribe_category(struct client_node *client, const char *category);
HAPI int client_subscribe_category(struct client_node *client, const char *category)
{
struct category_subscribe_item *item;
+ Eina_List *l;
+
+ EINA_LIST_FOREACH(client->category_subscribe_list, l, item) {
+ if (!strcasecmp(item->category, category)) {
+ DbgPrint("[%s] is already subscribed\n");
+ return DBOX_STATUS_ERROR_ALREADY;
+ }
+ }
item = malloc(sizeof(*item));
if (!item) {
return 0;
}
-HAPI int client_subscribe(struct client_node *client, const char *cluster, const char *category)
+HAPI int client_subscribe_group(struct client_node *client, const char *cluster, const char *category)
{
struct subscribe_item *item;
return DBOX_STATUS_ERROR_NONE;
}
-HAPI int client_unsubscribe(struct client_node *client, const char *cluster, const char *category)
+HAPI int client_unsubscribe_group(struct client_node *client, const char *cluster, const char *category)
{
struct subscribe_item *item;
Eina_List *l;
return DBOX_STATUS_ERROR_NOT_EXIST;
}
-HAPI int client_is_subscribed(struct client_node *client, const char *cluster, const char *category)
+HAPI int client_is_subscribed_group(struct client_node *client, const char *cluster, const char *category)
{
struct subscribe_item *item;
Eina_List *l;
cnt = 0;
EINA_LIST_FOREACH(s_info.client_list, l, client) {
- if (!client_is_subscribed(client, cluster, category)) {
+ if (!client_is_subscribed_group(client, cluster, category)) {
continue;
}
cnt = 0;
EINA_LIST_FOREACH(s_info.client_list, l, client) {
- cnt += !!client_is_subscribed(client, cluster, category);
+ cnt += !!client_is_subscribed_group(client, cluster, category);
}
return cnt;
* \note
* Instances are lives in the system cluster/sub-cluster
*/
- if (client_is_subscribed(client, instance_cluster(inst), instance_category(inst))) {
+ if (client_is_subscribed_group(client, instance_cluster(inst), instance_category(inst))
+ || client_is_subscribed_by_category(client, package_category(instance_package(inst))))
+ {
instance_unicast_created_event(inst, client);
DbgPrint("(Subscribed) Created package: %s\n", info->dbox_id);
}
EINA_LIST_FOREACH(s_info.pkg_list, l, info) {
EINA_LIST_FOREACH(info->inst_list, i_l, inst) {
- if (instance_client(inst)) {
+ if (instance_client(inst) == client) {
continue;
}
- if (!client_is_subscribed(client, instance_cluster(inst), instance_category(inst))) {
+ if (!client_is_subscribed_group(client, instance_cluster(inst), instance_category(inst))
+ && !client_is_subscribed_by_category(client, package_category(instance_package(inst))))
+ {
continue;
}