/*
 * Copyright (c) 1996, 1997, 1999 The University of Utah and
 * the Computer Systems Laboratory at the University of Utah (CSL).
 *
 * This file is part of Flick, the Flexible IDL Compiler Kit.
 *
 * Flick is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * Flick is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Flick; see the file COPYING.  If not, write to
 * the Free Software Foundation, 59 Temple Place #330, Boston, MA 02111, USA.
 */

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <flick/link/suntcp.h>

#ifndef RPCGEN
#include "program-6-client.h"
#else
#include "program-6.h"
#endif

double curtime;

int main(int argc, char **argv) 
{
	CLIENT tmp, *c;
	FLICK_SERVER_LOCATION s;
	int i;
	int count, len;
	struct timeval start, stop;
	struct timezone tz;
	
	c = &tmp;
	
	if (argc != 5) {
		printf("Usage: %s <host> <# of calls> <# of elements in array> <s/i>\n",argv[0]);
		exit(1);
	}
	
	s.server_name = argv[1];
	s.prog_num = MATH;
	s.vers_num = ONE;
	create_client(c, s);
	
	count = atol(argv[2]);
	len = atol(argv[3]);
	
	tz.tz_minuteswest = tz.tz_dsttime = 0;
	
	if ((argv[4][0] == 's') || (argv[4][0] == 'S')) {
		int *retval;
		sb_list buf;
		
		buf.sb_list_len = len;
		buf.sb_list_val = (sb *)calloc(len, sizeof(sb));
		assert(buf.sb_list_val);
		
		/* Prime the pump. */
		retval = sb_test_50(&buf, c);
		if (!retval) {
			fprintf(stderr, "RPC failed!  Exiting...\n");
			free(buf.sb_list_val);
			exit(1);
		}
		
		/* Make the RPCs. */
		gettimeofday(&start, &tz);
		for (i = 0; i < count; i++)
			sb_test_50(&buf, c); /* XXX --- Check for errors! */
		gettimeofday(&stop, &tz);
		curtime = ((double)(stop.tv_sec  - start.tv_sec )) * 1000.0 +
			  ((double)(stop.tv_usec - start.tv_usec)) / 1000.0;
		
		free(buf.sb_list_val);
		
	} else {
		int *retval;
		long_list buf;
		
		buf.long_list_len = len;
		buf.long_list_val = (int *)calloc(len, sizeof(int));
		assert(buf.long_list_val);
		
		/* Prime the pump. */
		retval = long_test_50(&buf, c);
		if (!retval) {
			fprintf(stderr, "RPC failed!  Exiting...\n");
			free(buf.long_list_val);
			exit(1);
		}
		
		/* Make the RPCs. */
		gettimeofday(&start, &tz);
		for (i = 0; i < count; i++)
			long_test_50(&buf, c); /* XXX --- Check for errors! */
		gettimeofday(&stop, &tz);
		curtime = ((double)(stop.tv_sec  - start.tv_sec )) * 1000.0 +
			  ((double)(stop.tv_usec - start.tv_usec)) / 1000.0;
		
		free(buf.long_list_val);
	}
	
	printf("Completed in %f milliseconds.\n", curtime);  
	return 0;
}

/* End of file. */



syntax highlighted by Code2HTML, v. 0.9.1