Exemplo n.º 1
0
void *th_dispatch (void *arg)
{
	evs_error_t result;
	evs_handle_t handle = *(evs_handle_t *)arg;

	printf ("THREAD DISPATCH starting.\n");
	result = evs_dispatch (handle, EVS_DISPATCH_BLOCKING);
	printf ("THREAD DISPATCH return result is %d\n", result);
	return (0);
}
int main (void)
{
	evs_handle_t handle;
	evs_error_t result;
	int i = 0;
	int fd;
	unsigned int member_list[32];
	unsigned int local_nodeid;
	unsigned int member_list_entries = 32;

	result = evs_initialize (&handle, &callbacks);
	if (result != EVS_OK) {
		printf ("Couldn't initialize EVS service %d\n", result);
		exit (0);
	}
	
	result = evs_membership_get (handle, &local_nodeid,
		member_list, &member_list_entries);
	printf ("Current membership from evs_membership_get entries %d\n",
		member_list_entries);
	for (i = 0; i < member_list_entries; i++) {
		printf ("member [%d] is %x\n", i, member_list[i]);
	}
	printf ("local processor from evs_membership_get %x\n", local_nodeid);

	printf ("Init result %d\n", result);
	result = evs_join (handle, groups, 3);
	printf ("Join result %d\n", result);
	result = evs_leave (handle, &groups[0], 1);
	printf ("Leave result %d\n", result);
	delivery_string = "evs_mcast_joined";

	/*
	 * Demonstrate evs_mcast_joined
	 */
	for (i = 0; i < 500; i++) {
		sprintf (buffer, "evs_mcast_joined: This is message %d", i);
#ifdef COMPILE_OUT
		sprintf (buffer,
		"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
			i, i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,
			i, i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i,  i);
#endif
try_again_one:
		result = evs_mcast_joined (handle, EVS_TYPE_AGREED,
			&iov, 1);
		if (result == EVS_ERR_TRY_AGAIN) {
//printf ("try again\n");
			goto try_again_one;
		}
		result = evs_dispatch (handle, EVS_DISPATCH_ALL);
	}

	do {
		result = evs_dispatch (handle, EVS_DISPATCH_ALL);
	} while (deliveries < 20);
	/*
	 * Demonstrate evs_mcast_joined
	 */
	delivery_string = "evs_mcast_groups";
	for (i = 0; i < 500; i++) {
		sprintf (buffer, "evs_mcast_groups: This is message %d", i);
try_again_two:
		result = evs_mcast_groups (handle, EVS_TYPE_AGREED,
			 &groups[1], 1, &iov, 1);
		if (result == EVS_ERR_TRY_AGAIN) {
			goto try_again_two;
		}
	
		result = evs_dispatch (handle, EVS_DISPATCH_ALL);
	}
	/*
	 * Flush any pending callbacks
	 */
	do {
		result = evs_dispatch (handle, EVS_DISPATCH_ALL);
	} while (deliveries < 900);

	evs_fd_get (handle, &fd);
	
	evs_finalize (handle);

	return (0);
}