PDA

View Full Version : Refactoring parte 1: Eliminazione Log


Ufo13
03-11-2006, 22:02
Sto guardando il codice e ho iniziato a eliminare la parte di logging.

Il fatto è che non conosco bene questa parte, qualcuno mi vuole dare una mano? Non vorrei lasciare cose inutilizzate :)

jappilas
03-11-2006, 23:56
archivio con la directory che prima stava sotto ..\Diamonds\src\it\diamonds\
(ex package it.diamonds.log )
per un eventuale futuro riuso del materiale ;)

credo che il package si possa rimuovere in modo safe a patto di eliminare anche le occorrenze del logwriter in grid e gameloop e i test ;)

Ufo13
04-11-2006, 00:07
Ok credo di avere finito, per favore chi aveva lavorato al logging può dare un'occhiata?

jappilas
18-11-2006, 01:40
Ok credo di avere finito, per favore chi aveva lavorato al logging può dare un'occhiata?
purtroppo il codice che aveva a che fare con il logging era più pervasivo di quanto apparisse a prima vista :eek:

In GameLoop i metodi:
private void startPlayLogging()
{
playFieldOne.createLogFile("playerOne.log");
playFieldTwo.createLogFile("playerTwo.log");
} private void shutdownPlayFields()
{
if(playFieldOne != null)
{
LogFileWriter playFieldOneLogFile = playFieldOne.getLogFile();
if(playFieldOneLogFile != null)
{
playFieldOneLogFile.close();
}
}

if(playFieldTwo != null)
{
LogFileWriter playFieldTwoLogFile = playFieldTwo.getLogFile();

if(playFieldTwoLogFile != null)
{
playFieldTwoLogFile.close();
}
}
}

In PlayField i metodi:
private void logGridController()
{
if(logFile == null)
{
return;
}

getLogFile().write(gridController.getStateLogString());
} private void logActions()
{
if(logFile == null)
{
return;
}

if(gridController.getNumberOfPairInserted() == numberOfPairLogged
&& gridController.getEventLogString().length() == 0)
{
return;
}

logFile.write(inputServed + "");

if(gridController.getNumberOfPairInserted() > numberOfPairLogged)
{
logFile.write("pair " + gridController.getGemsPair().toString());
numberOfPairLogged = gridController.getNumberOfPairInserted();
}

logFile.write(gridController.getEventLogString());
} public void createLogFile(String logFilePath)
{
logFile = LogFileWriter.create("data/" + logFilePath);
logFile.write("seed " + sessionSeed + "\n");
} public void createTestingLogFile()
{
logFile = LogFileWriter.createForTesting();
logFile.write("seed " + sessionSeed + "\n");
} public LogFileWriter getLogFile()
{
return logFile;
}
e i membri
private LogFileWriter logFile;
private int numberOfPairLogged = 0;

In GridController i metodi
public String getEventLogString()
{
return inputReactor.getLogString();
} public void addLineOfStateLog(String log)
{
logBuffer.append(log + "\n");
} public String getStateLogString()
{
if(logBuffer != null)
{
String res = logBuffer.toString();
return res;
}
return "";
}

In ogni classe state una chiamata alla scrittura del log ;

In ogni classe di test degli states un
public void testLogState()
{
state.update(environment.getTimer().getTime(), controller);
assertEquals("bad WaitNextCrushState state log",
state.getClass().getName() + "\n", controller.getStateLogString());
}

In TestGridController i metodi :
public void testGetLogBuffer()
{
assertEquals("Log buffer not initialized", "",
controller.getStateLogString());
} public void testAddLineOfStateLog()
{
controller.addLineOfStateLog("asdLul");
assertEquals("asdLul\n", controller.getStateLogString());
} public void testAddTwoLineOfStateLog()
{
controller.addLineOfStateLog("asdLul");
controller.addLineOfStateLog("foo");
assertEquals("asdLul\nfoo\n", controller.getStateLogString());
} public void testResetLogOnUpdate()
{
insertAndDropGemsPair();
controller.addLineOfStateLog("asdLul");

controller.addLineOfStateLog("foo");
assertTrue(controller.getStateLogString().startsWith("asdLul"));

controller.update(environment.getTimer().getTime());
assertFalse(controller.getStateLogString().startsWith("asdLul"));
}
in InputReactor il membro
private StringBuffer logString;
e i metodi: public void logEvent(AbstractEventHandler handler)
{
Integer eventStatus = handler.isPressed() ? 1 : 0;
logString.append(handler.getClass().getName() + " "
+ eventStatus.toString() + "\n");
} public String getLogString()
{
return logString.toString();
}
nella InputReactorInterface e nel MockInputReactor:
void logEvent(AbstractEventHandler handler);
String getLogString();
in ogni classe ...CommandHandler e in TestEventHandler
...
inputReactor.logEvent(this);
in TestInputReactor public void testHandlerPressedLogged()
{
input.notify(Event.create(Code.ENTER, State.PRESSED));
reactor.reactToInput(environment.getTimer().getTime());
assertEquals(
"it.diamonds.tests.engine.input.HandlerForTestInputReactor 1\n",
reactor.getLogString());
}
public void testHandlerReleasedLogged()
{
input.notify(Event.create(Code.ENTER, State.RELEASED));
reactor.reactToInput(environment.getTimer().getTime());
assertEquals(
"it.diamonds.tests.engine.input.HandlerForTestInputReactor 0\n",
reactor.getLogString());
}
nonchè (last but not least) :
Tutti i riferimenti;

le classi LogReader e LogWriter sotto engine ;

il relativo TestLog;


Per cui adesso:
LOG.Terminated;

ps: Alberto, mi dispiace per tutto il lavoro che avevi fatto e che ho dovuto distruggere :ave:

Ufo13
18-11-2006, 01:54
Ottimo lavoro Jappi :)