package com.aionemu.packetsamurai.logwriters; import java.io.IOException; import java.io.RandomAccessFile; import com.aionemu.packetsamurai.PacketSamurai; import com.aionemu.packetsamurai.session.DataPacket; import com.aionemu.packetsamurai.session.Session; /** * * @author Gilles Duboscq * @author Ulysses R. Ribeiro */ public abstract class AbstractLogWriter { private String _directory; private String _fileName; protected Session _session; private RandomAccessFile _raFile; public AbstractLogWriter(Session session) throws IOException { this(session.getSessionName(),session); } public AbstractLogWriter(String filename, Session session) throws IOException { this(PacketSamurai.getConfigProperty("lastLogDir",".\\logs"), filename, session); } public AbstractLogWriter(String dir, String filename, Session session) throws IOException { setDirectory(dir); setFileName(filename); _session = session; if(!getDirectory().endsWith("/") && !getDirectory().endsWith("\\") ) { setDirectory(getDirectory()+"/"); } _raFile = new RandomAccessFile(getDirectory()+getFileName()+"."+getFileExtension(),"rw"); writeHeader(); } public void writeLog() throws IOException { writePackets(); this.close(); } public void close() throws IOException { _raFile.close(); } protected void setRandomAccessFile(RandomAccessFile raFile) { _raFile = raFile; } public RandomAccessFile getRandomAccessFile() { return _raFile; } protected Session getSession() { return _session; } protected abstract String getFileExtension(); protected abstract void writeHeader() throws IOException; protected abstract void writePackets() throws IOException; protected abstract void writePacket(DataPacket packet) throws IOException; /** * @param fileName the fileName to set */ protected void setFileName(String fileName) { _fileName = fileName; } /** * @return the fileName */ public String getFileName() { return _fileName; } /** * @param directory the directory to set */ protected void setDirectory(String directory) { _directory = directory; } /** * @return the directory */ public String getDirectory() { return _directory; } }