NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *)1 : NULL);
}
+void NSConsumerHandleSubscribeSucceed(NSProvider_internal * provider)
+{
+ NS_VERIFY_NOT_NULL_V(provider);
+
+ NSResult ret = NSProviderCacheUpdate(provider);
+ NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
+}
+
void NSConsumerHandleRecvProviderChanged(NSMessage * msg)
{
NS_VERIFY_NOT_NULL_V(msg);
if (provider->connection->next == NULL && provider->accessPolicy == NS_SELECTION_CONSUMER)
{
NS_LOG(DEBUG, "call back to user");
- NSProviderChanged((NSProvider *) provider, (NSResponse) msg->messageId);
+ NSProvider * prov = NSCopyProvider(provider);
+ NSProviderChanged(prov, (NSResponse) msg->messageId);
+ NSRemoveProvider_internal(provider);
}
}
NSResult ret = NSProviderCacheUpdate(provider);
NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
- if (provider->connection->next == NULL)
- {
- NS_LOG(DEBUG, "call back to user");
- NSProviderChanged((NSProvider *) provider, (NSResponse) NS_TOPIC);
- }
+ NS_LOG(DEBUG, "call back to user");
+ NSProvider * prov = NSCopyProvider(provider);
+ NSProviderChanged((NSProvider *) prov, (NSResponse) NS_TOPIC);
}
void NSConsumerInternalTaskProcessing(NSTask * task)
NS_LOG_V(DEBUG, "Receive Event : %d", (int)task->taskType);
switch (task->taskType)
{
- //case TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED:
+ case TASK_CONSUMER_SENT_REQ_OBSERVE:
+ {
+ NS_LOG(DEBUG, "Receive Subscribe succeed from provider.");
+ NSConsumerHandleSubscribeSucceed((NSProvider_internal *)task->taskData);
+ NSRemoveProvider_internal((NSProvider_internal *)task->taskData);
+ break;
+ }
case TASK_CONSUMER_RECV_PROVIDER_CHANGED:
{
- //NS_LOG(DEBUG, "Receive Subscribe confirm from provider.");
NS_LOG(DEBUG, "Receive Provider Changed");
NSConsumerHandleRecvProviderChanged((NSMessage *)task->taskData);
NSRemoveMessage((NSMessage *)task->taskData);