static int runPitcher() { AmsModule me; AmsEvent evt; AmsStateType state; AmsChangeType change; int zn, nn, rn, dcn, dzn, sn, pr, textlen; unsigned char fl; AmsSequence sequence; AmsDiligence diligence; char buffer[80]; isprintf(buffer, sizeof buffer, "Hello from %d.", (int) getpid()); textlen = strlen(buffer) + 1; oK(ams_register(NULL, NULL, "amsdemo", "test", "", "pitch", &me)); while (1) { if (ams_get_event(me, AMS_BLOCKING, &evt) < 0) return 0; ams_parse_notice(evt, &state, &change, &zn, &nn, &rn, &dcn, &dzn, &sn, &pr, &fl, &sequence, &diligence); ams_recycle_event(evt); if (state == AmsInvitationState && sn == 1) { printf("%d sending '%s'.\n", (int) getpid(), buffer); fflush(stdout); ams_send(me, -1, zn, nn, 1, 0, 0, textlen, buffer, 0); ams_unregister(me); return 0; } } }
static int runCatcher() { AmsModule me; AmsEvent evt; int cn, zn, nn, sn, len, ct, pr; unsigned char fl; AmsMsgType mt; char *txt; oK(ams_register(NULL, NULL, "amsdemo", "test", "", "catch", &me)); ams_invite(me, 0, 0, 0, 1, 8, 0, AmsArrivalOrder, AmsAssured); while (1) { if (ams_get_event(me, AMS_BLOCKING, &evt) < 0) return 0; if (ams_get_event_type(evt) == AMS_MSG_EVT) break; else ams_recycle_event(evt); } ams_parse_msg(evt, &cn, &zn, &nn, &sn, &len, &txt, &ct, &mt, &pr, &fl); printf("%d received '%s'.\n", (int) getpid(), txt); fflush(stdout); ams_recycle_event(evt); ams_unregister(me); return 0; }
int amsbenchs(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int count = a1; int size = a2; #else int main(int argc, char **argv) { int count = (argc > 1 ? atoi(argv[1]) : 0); int size = (argc > 2 ? atoi(argv[2]) : 0); #endif char *application = "amsdemo"; char *authority = "test"; char *buffer; AmsNode me; AmsEventMgt rules; int subjectNbr; int content; if (count < 1 || size < 4 || size > 65535) { PUTS("Usage: amsbenchs <# of msgs to send> <msg length>"); return 0; } buffer = malloc(size); if (buffer == NULL) { putSysErrmsg("No memory for amsbenchs.", NULL); return 0; } memset(buffer, ' ', size); if (ams_register("amsmib.xml", NULL, NULL, NULL, 0, application, authority, "", "benchs", &me) < 0) { putSysErrmsg("amsbenchs can't register", NULL); return -1; } memset((char *) &rules, 0, sizeof(AmsEventMgt)); rules.errHandler = reportError; if (ams_set_event_mgr(me, &rules) < 0) { ams_unregister(me); putSysErrmsg("amsbenchs can't set event manager", NULL); return -1; } subjectNbr = ams_lookup_subject_nbr(me, "bench"); if (subjectNbr < 0) { ams_unregister(me); putErrmsg("Subject 'bench' is unknown.", NULL); return -1; } snooze(1); /* Wait for subscriptions to arrive. */ while (count > 0) { content = htonl(count); memcpy(buffer, (char *) &content, sizeof(int)); if (ams_publish(me, subjectNbr, 0, 0, size, buffer, 0) < 0) { putErrmsg("Unable to publish message.", NULL); break; } count--; } writeErrmsgMemos(); PUTS("Message publication ended; press ^C when test is done."); signal(SIGINT, handleQuit); snooze(3600); ams_unregister(me); return 0; }