package edu.brown.benchmark.tpce.generators;
import java.util.Date;
import edu.brown.benchmark.tpce.util.EGenDate;
public class MEE {
private DriverMEESettings driverMEESettings;
private MEESUTInterface sut;
private BaseLogger logger;
private MEEPriceBoard priceBoard;
private MEETickerTape tickerTape;
private MEETradingFloor tradingFloor;
private Date baseTime;
private Date currentTime;
public static final int NO_OUTSTANDING_TRADES = MEETradingFloor.NO_OUTSTANDING_TRADES;
private void AutoSetRNGSeeds( long uniqueID ){
int baseYear, baseMonth, baseDay, millisec;
baseYear = EGenDate.getYear();
baseMonth = EGenDate.getMonth();
baseDay = EGenDate.getDay();
millisec = (EGenDate.getHour() * EGenDate.MinutesPerHour + EGenDate.getMinute()) * EGenDate.SecondsPerMinute + EGenDate.getSecond();
baseYear -= ( baseYear % 5 );
long Seed;
Seed = millisec / 100;
Seed <<= 11;
Seed += EGenDate.getDayNo(baseYear, baseMonth, baseDay) - EGenDate.getDayNo(baseYear, 1, 1);
Seed <<= 33;
Seed += uniqueID;
tickerTape.setRNGSeed( Seed );
driverMEESettings.cur_TickerTapeRNGSeed = Seed;
Seed |= 0x0000000100000000L;
tradingFloor.setRNGSeed( Seed );
driverMEESettings.cur_TradingFloorRNGSeed = Seed;
}
public MEE( int tradingTimeSoFar, MEESUTInterface pSUT, BaseLogger logger, SecurityHandler securityFile, long uniqueID, int configuredCustomerCount ){
driverMEESettings = new DriverMEESettings( uniqueID, 0, 0, 0 );
sut = pSUT;
this.logger = logger;
priceBoard = new MEEPriceBoard( tradingTimeSoFar, baseTime, currentTime, securityFile, configuredCustomerCount);
tickerTape = new MEETickerTape( pSUT, priceBoard, baseTime, currentTime );
tradingFloor = new MEETradingFloor( pSUT, priceBoard, tickerTape, baseTime, currentTime );
logger.sendToLogger("MEE object constructed using c'tor 1 (valid for publication: YES).");
AutoSetRNGSeeds( uniqueID );
this.logger.sendToLogger(driverMEESettings);
}
public MEE( int tradingTimeSoFar, MEESUTInterface pSUT, BaseLogger logger, SecurityHandler securityFile, long uniqueID, long tickerTapeRNGSeed, long tradingFloorRNGSeed, int configuredCustomerCount ){
driverMEESettings = new DriverMEESettings( uniqueID, 0, tickerTapeRNGSeed, tradingFloorRNGSeed );
sut = pSUT;
this.logger = logger;
priceBoard = new MEEPriceBoard( tradingTimeSoFar, baseTime, currentTime, securityFile, configuredCustomerCount);
tickerTape = new MEETickerTape( pSUT, priceBoard, baseTime, currentTime, tickerTapeRNGSeed );
tradingFloor = new MEETradingFloor( pSUT, priceBoard, tickerTape, baseTime, currentTime, tradingFloorRNGSeed );
this.logger.sendToLogger("MEE object constructed using c'tor 2 (valid for publication: NO).");
this.logger.sendToLogger(driverMEESettings);
}
public long getTickerTapeRNGSeed(){
return( tickerTape.getRNGSeed() );
}
public long getTradingFloorRNGSeed(){
return( tradingFloor.getRNGSeed() );
}
public void setBaseTime(){
baseTime = new Date();
}
public boolean disableTickerTape(){
boolean result;
result = tickerTape.DisableTicker();
return( result );
}
public boolean enableTickerTape(){
boolean result;
result = tickerTape.EnableTicker();
return( result );
}
public int generateTradeResult(){
int nextTime;
currentTime = new Date();
nextTime = tradingFloor.generateTradeResult( );
return( nextTime );
}
public int submitTradeRequest( TTradeRequest pTradeRequest ){
int nextTime;
currentTime = new Date();
nextTime = tradingFloor.submitTradeRequest( pTradeRequest );
return( nextTime );
}
}