static void deliveryServiceUnSubscribe( void *o, void *arg) { v_partition p = v_partition(o); v_deliveryServiceEntry e = v_deliveryServiceEntry(arg); v_kernel kernel; v_group g; c_value params[2]; c_iter list; assert(C_TYPECHECK(e,v_deliveryServiceEntry)); assert(C_TYPECHECK(p,v_partition)); params[0] = c_objectValue(p); params[1] = c_objectValue(e->topic); kernel = v_objectKernel(e); list = v_groupSetSelect(kernel->groupSet, "partition = %0 and topic = %1", params); while ((g = c_iterTakeFirst(list)) != NULL) { v_groupRemoveEntry(g,v_entry(e)); c_free(g); } c_iterFree(list); }
static c_bool unsubscribe( c_object entry, c_voidp partition) { v_partition p = v_partition(partition); v_deliveryServiceEntry e = v_deliveryServiceEntry(entry); deliveryServiceUnSubscribe(p, e); return TRUE; }
v_deliveryServiceEntry v_deliveryServiceEntryNew( v_deliveryService deliveryService, v_topic topic) { v_kernel kernel; v_deliveryServiceEntry e; assert(C_TYPECHECK(deliveryService,v_deliveryService)); assert(C_TYPECHECK(topic,v_topic)); kernel = v_objectKernel(deliveryService); e = v_deliveryServiceEntry(v_objectNew(kernel,K_DELIVERYSERVICEENTRY)); v_entryInit(v_entry(e), v_reader(deliveryService)); e->topic = c_keep(topic); return e; }
static void deliveryServiceSubscribe( void *o, void *arg) { v_partition p = v_partition(o); v_deliveryServiceEntry e = v_deliveryServiceEntry(arg); v_kernel kernel; v_group g; assert(C_TYPECHECK(e,v_deliveryServiceEntry)); assert(C_TYPECHECK(p,v_partition)); kernel = v_objectKernel(e); g = v_groupSetCreate(kernel->groupSet,p,e->topic); if(v_groupPartitionAccessMode(g) == V_ACCESS_MODE_READ_WRITE || v_groupPartitionAccessMode(g) == V_ACCESS_MODE_READ) { v_groupAddEntry(g,v_entry(e)); } c_free(g); }
v_writeResult v_entryWrite( v_entry e, v_message o, v_networkId writingNetworkId, v_instance *instance) { v_writeResult writeResult; assert(C_TYPECHECK(e,v_entry)); assert(C_TYPECHECK(o,v_message)); switch(v_objectKind(e->reader)) { case K_DATAREADER: writeResult = v_dataReaderEntryWrite(v_dataReaderEntry(e), o, instance, C_TIME_MIN_INFINITE); break; case K_NETWORKREADER: writeResult = v_networkReaderEntryWrite(v_networkReaderEntry(e), o, writingNetworkId); break; case K_DELIVERYSERVICE: writeResult = v_deliveryServiceEntryWrite(v_deliveryServiceEntry(e),o,instance); break; default: OS_REPORT_1(OS_ERROR, "v_entryWrite failed",0, "illegal reader kind (%d) specified", v_objectKind(e->reader)); assert(FALSE); return V_WRITE_UNDEFINED; } return writeResult; }