View Full Version : Refactoring parte 1: Eliminazione Log
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 ;)
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:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.