jni_participant jni_participantNew( const c_char* uri, const char* name, long domainId, v_qos qos) { jni_participant p; u_participant up; up = u_participantNew(uri, 0, name, qos, TRUE); p = NULL; if(up != NULL){ p = jni_participant(os_malloc((size_t)(C_SIZEOF(jni_participant)))); p->uparticipant = up; p->domainId = domainId; p->publishers = c_iterNew(NULL); p->subscribers = c_iterNew(NULL); p->topics = c_iterNew(NULL); p->partitions = c_iterNew(NULL); } return p; }
c_char* cmx_participantNew( const c_char* uri, const c_char* domainId, c_long timeout, const c_char* name, const c_char* qos) { u_participant p; u_result ur; u_domainId_t did; int pos; c_char* result; const c_char* context; if (*domainId == '\0') { did = U_DOMAIN_ID_ANY; } else if (sscanf (domainId,"%d%n", &did, &pos) != 1 || domainId[pos] != '\0') { OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "cmx_participantNew failed (reason: illegal argument: domainId \"%s\").", domainId); return NULL; } p = u_participantNew(uri, did, timeout > 0 ? (unsigned)timeout : 0, name, NULL, TRUE); if(p == NULL){ /* Error reported by u_participantNew() */ goto err_u_participantNew; } if(qos && *qos){ if((ur = u_entitySetXMLQos(u_entity(p), qos)) != U_RESULT_OK) { context = "u_entitySetXMLQos"; goto err_entity; } } if((ur = u_entityEnable(u_entity(p))) != U_RESULT_OK) { context = "u_entityEnable"; goto err_entity; } if((ur = cmx_entityRegister(u_object(p), NULL, &result)) != U_RESULT_OK) { context = "cmx_entityRegister"; goto err_entity; } return result; /* Error handling */ err_entity: OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "cmx_participantNew failed (reason: %s returned %u).", context, ur); u_objectFree(u_object(p)); err_u_participantNew: return NULL; }
int main (int argc, char *argv[]) { int opt; int interval = 3000; int sampleCount = 0; c_bool extended = FALSE; c_bool raw = FALSE; c_bool delta = FALSE; c_bool preallocated = FALSE; char *uri = ""; u_result ur; u_participant participant; v_participantQos pqos; int no_break = TRUE; char c; int lost; const char* sddsURI = NULL; monitorMode selectedAction = memoryStats; monitor_ms msData = NULL; monitor_trc trcData = NULL; monitor_orc orcData = NULL; int delay = 0; int trigger = 0; int sample = 0; c_long objectCountLimit = 0; char *filterExpression = NULL; HANDLE handle = GetStdHandle(STD_INPUT_HANDLE); INPUT_RECORD buffer[1]; DWORD events; orderKind selectedOrdering = NO_ORDERING; int orderCount = INT_MAX; while (((opt = getopt (argc, argv, optflags)) != -1) && !errno) { switch (opt) { case 'i': if (!(sscanf (optarg, "%d", &interval)) > 0) { fprintf(stderr, "mmstat: Not a valid interval.\n"); print_usage(); exit(-1); } break; case 's': if (!(sscanf (optarg, "%d", &sampleCount)) > 0) { fprintf(stderr, "mmstat: Not a valid sample count.\n"); print_usage(); exit(-1); } break; case 'l': if (!(sscanf (optarg, "%d", &objectCountLimit)) > 0) { fprintf(stderr, "mmstat: Not a valid limit.\n"); print_usage(); exit(-1); } break; case 'f': filterExpression = optarg; break; case 'e': extended = TRUE; break; case 'r': raw = TRUE; break; case 'a': preallocated = TRUE; break; case 'm': selectedAction = memoryStats; break; case 'M': selectedAction = memoryStats; delta = TRUE; break; case 't': selectedAction = typeRefCount; break; case 'T': selectedAction = typeRefCount; delta = TRUE; break; case 'o': if (selectedOrdering == NO_ORDERING && strlen(optarg) == 1) { switch (optarg[0]) { case 'C': selectedOrdering = ORDER_BY_COUNT; break; case 'S': selectedOrdering = ORDER_BY_SIZE; break; case 'T': selectedOrdering = ORDER_BY_TOTAL; break; default: fprintf(stderr, "mmstat: Unknown ordering kind.\n"); print_usage(); exit(-1); } } else { fprintf(stderr, "mmstat: Cannot specify multiple orderings at the same time.\n"); print_usage(); exit(-1); } break; case 'n': if (!(sscanf (optarg, "%d", &orderCount)) > 0) { fprintf(stderr, "mmstat: Not a valid ordering nrEntries.\n"); print_usage(); exit(-1); } break; #ifdef OBJECT_WALK case 'r': selectedAction = objectRefCount; break; case 'R': selectedAction = objectRefCount; delta = TRUE; break; #endif case 'h': case '?': default: print_usage (); exit(0); break; } } if (errno) { fprintf(stderr, strerror(errno)); fprintf(stderr, "\n"); print_usage(); exit (-1); } if ((argc - optind) > 1) { fprintf(stderr, "Too many arguments"); print_usage (); exit (-1); } if (selectedAction == memoryStats) { if (objectCountLimit > 0) { fprintf(stderr, "Can't use object limit in memory stats mode.\n"); print_usage(); exit(-1); } if (filterExpression != NULL) { fprintf(stderr, "Can't use filter expression in memory stats mode.\n"); print_usage(); exit(-1); } } else { if (extended) { fprintf(stderr, "Extended mode can only be used in memory stats mode.\n"); print_usage(); exit(-1); } if (preallocated) { fprintf(stderr, "Preallocated memory can only be shown in memory stats mode.\n"); print_usage(); exit(-1); } } if ((argc - optind) == 1) { uri = argv[optind]; } if( !raw) { if(strlen(uri) > 0) { sddsURI = uri; } else { sddsURI = os_getenv ("OSPL_URI"); if(!sddsURI) { sddsURI = DOMAIN_NAME; } } printf("Trying to open connection with the OpenSplice system using URI:\n" \ "'%s'...\n", sddsURI); } else { sddsURI = uri; } ur = u_userInitialise(); if(ur == U_RESULT_OK) { pqos = u_participantQosNew(NULL); participant = u_participantNew(sddsURI, 30, "mmstat", (v_qos)pqos, TRUE); u_participantQosFree(pqos); if(participant) { if( !raw ) { printf("Connection established.\n\n"); } lost = 0; switch (selectedAction) { case memoryStats: msData = monitor_msNew (extended, raw, delta, preallocated); break; case typeRefCount: trcData = monitor_trcNew (objectCountLimit, filterExpression, selectedOrdering, orderCount, delta); break; case objectRefCount: orcData = monitor_orcNew (objectCountLimit, filterExpression, delta); break; } while (no_break && !lost) { if (delay <= 0 || trigger) { switch (selectedAction) { case memoryStats: ur = u_entityAction(u_entity(participant), monitor_msAction, msData); break; case typeRefCount: ur = u_entityAction(u_entity(participant), monitor_trcAction, trcData); break; case objectRefCount: ur = u_entityAction(u_entity(participant), monitor_orcAction, orcData); break; } fflush (stdout); sample++; if (trigger) { trigger = 0; } else { delay = interval; } } if(ur == U_RESULT_OK) { if (_isatty(_fileno(stdin)) && !raw) { c = '\0'; PeekConsoleInput( handle, buffer, 1, &events ); if(events > 0) { ReadConsoleInput(handle, buffer, 1, &events); if(buffer[0].EventType == KEY_EVENT && buffer[0].Event.KeyEvent.bKeyDown) { c = buffer[0].Event.KeyEvent.uChar.AsciiChar; } } if (c == 'q' || c == '\03' /* ^C */) { no_break = FALSE; } else if (c == 't') { trigger = 1; } PeekConsoleInput( handle, buffer, 1, &events ); if(events > 0) { ReadConsoleInput(handle, buffer, 1, &events); if(buffer[0].EventType == KEY_EVENT && buffer[0].Event.KeyEvent.bKeyDown) { c = buffer[0].Event.KeyEvent.uChar.AsciiChar; } } } if (no_break && interval) { delay -= 100; os_nanoSleep (SLEEP_INTERVAL); } } else { /* Participant is no longer accessible, terminate now... */ no_break = 0; lost = TRUE; } if (sampleCount && (sample == sampleCount)) { printf ("\nsample_count limit reached\n"); no_break = 0; } } PeekConsoleInput( handle, buffer, 1, &events ); if(events > 0) { ReadConsoleInput(handle, buffer, 1, &events); if(buffer[0].EventType == KEY_EVENT && buffer[0].Event.KeyEvent.bKeyDown) { c = buffer[0].Event.KeyEvent.uChar.AsciiChar; } } if(lost) { printf("\nConnection with domain lost. The OpenSplice system has\n" \ "probably been shut down.\n"); } u_participantFree(participant); } else { printf("Connection could NOT be established (creation of participant failed).\n"); printf("Is the OpenSplice system running?\n"); OS_REPORT(OS_ERROR,"mmstat", 0, "Creation of participant failed."); } u_userDetach(); switch (selectedAction) { case memoryStats: monitor_msFree (msData); break; case typeRefCount: monitor_trcFree (trcData); break; case objectRefCount: monitor_orcFree (orcData); break; } } else { printf("Connection could NOT be established (could not initialise).\n"); printf("Is the OpenSplice system running?\n"); OS_REPORT(OS_ERROR,"mmstat", 0, "Failed to initialise."); } printf("\nExiting now...\n"); return 0; }