Exemple #1
0
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;
		}
	}
}
Exemple #2
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;
}
Exemple #3
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;
}