package senseiTests.testerGMNS;
import sensei.gmns.*;
import sensei.util.*;
import sensei.middleware.gms.*;
import sensei.middleware.gmns.*;
import sensei.util.Error;
import java.io.IOException;
import java.util.Random;
import java.util.Vector;
public class Tester implements ErrorHandler
{
public Tester(Parameters parameters) throws ParameterException, Exception
{
Error.setErrorHandler(this);
GroupMembershipNamingService service = GroupMembershipNamingServiceFactory.load();
if (service==null)
{
System.out.println("GroupMembershipNamingService is not available");
System.exit(0);
}
else
{
createGroupMembers(service);
}
}
void createGroupMembers(GroupMembershipNamingService service)
{
//on times randomly from 0 to 5 seconds, a new member is created.
//they will live randomly up to 60 seconds
Random random = new Random();
String groups[]={"Antwerpen","Bonn","Collado-Mediano","Dublin","Ludwigsburg","Madrid","Ocean City",
"Sheffield","Stuttgart"};
String members[]={"Keizerstraat","Manantiales","Mar de Aral","Santa Virgilia","New Road Place","AdenauerAllee",
"SchuetzenStrasse", "VaihingenStrasse","La Bodeguita","Cirque Royal","Le Sud", "Alcatel", "IONA",
"T-Mobil","Telefonica","CPS","UCM"};
int groupsLength = groups.length;
int membersLength = members.length;
try
{
while(true)
{
int randomGroup = random.nextInt(groupsLength);
int randomMember = random.nextInt(membersLength);
int randomLive = random.nextInt(MAX_LIFE);
int randomSleep = random.nextInt(MAX_SLEEP);
String group = groups[randomGroup];
String name = members[randomMember];
joinMember(service, group, name, randomLive);
Thread.sleep(randomSleep*1000);
}
}
catch(Exception ex)
{
Error.unhandledException("",ex);
}
}
void joinMember(GroupMembershipNamingService service, String group, String name, int live) throws Exception
{
GroupMember member = new TestGroupMember(group, name, live).theGroupMember();
GroupHandlerFactory ghFactory=new GroupHandlerFactoryImpl(member).theGroupHandlerFactory();
service.findAndJoinGroup(group, ghFactory, name, null);
}
//*************************************************************************************
//**************************** ERRORS *************************************************
//*************************************************************************************
public boolean handleError(String area, String reason)
{
System.out.println("ERROR on "+area+": " + reason);
return false;
}
public boolean handleException(String area, Exception exception)
{
exception.printStackTrace();
return handleError(area,exception.toString());
}
//*************************************************************************************
//**************************** READ ARGS **********************************************
//*************************************************************************************
/**
* Reads the command line arguments, and initializes the
* Configuration singleton class; arguments are translated into the Parameter class and
* returned.
* It returns null if arguments are incorrect or they do not require any GMNS processing
**/
public static Parameters readArgs(String args[])
{
Parameters ret = null;
try
{
Vector params=new Vector();
params.add(CONF);
params.add(HELP);
ret = new Parameters(args, params, null,0,0);
if (ret.hasParameter(HELP))
help();
else
{
if (ret.hasParameter(CONF))
Configuration.getSingleton(ret.getParameter(CONF), ret.getDefinitions());
else
Configuration.getSingleton(ret.getDefinitions());
}
}
catch (ParameterException pex)
{
System.err.println("Arguments error: " + pex.getMessage());
help();
}
catch (IOException ioex)
{
System.err.println("Error reading the configuration file: " + ioex.getMessage());
}
return ret;
}
//*************************************************************************************
//**************************** HELP ***************************************************
//*************************************************************************************
static void help()
{
System.out.println("arguments: [options...]\n\tOptions:\n\t\t"
+ CONF + "=configuration file\n\t\t\t--> sensei properties file \n\t\t"
+ HELP + "\n\t\t\t--> shows this brief help \n\n\t"
);
}
//*************************************************************************************
//**************************** DATA MEMBERS *******************************************
//*************************************************************************************
static final String CONF = "config";
static final String HELP = "help";
static final int MAX_LIFE = 20;
static final int MAX_SLEEP = 5;
}