rendered paste bodypackage net.sf.l2j.logserver;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;public class LogServer{ static LogSocket _sock; static FileWriter eventSave = null; static FileWriter chatSave = null; static FileWriter systemSave = null; public static void main(String arg[]) { _sock = new LogSocket("127.0.0.1",2007); _sock.startServer(); _sock.accept(); String worldId = _sock.readS(); System.out.println("[LogServer] world "+worldId+" connected"); String date = (new SimpleDateFormat("yy_MM_dd")).format(new Date()); new File("log/logd").mkdirs(); File fileEvent = new File("log/logd/"+date+"_logd"+".txt"); File fileChat = new File("log/logd/"+date+"_chat"+".txt"); File fileSystem = new File("log/logd/"+date+"_system"+".txt"); try { eventSave = new FileWriter(fileEvent, true); chatSave = new FileWriter(fileChat, true); systemSave = new FileWriter(fileSystem, true); } catch(IOException e) { System.out.println("Error while opening log file: "+e); } while(true) { int id = _sock.readD(); String msg = _sock.readS(); if(msg == null) { System.out.println("[LogServer] : world "+worldId+" disconnected by crash!"); shutdown(1); } else if(id == 3 && msg.equals("quit")) { System.out.println("[LogServer] : world "+worldId+" requested shutdown, closing connection"); shutdown(0); } try { switch(id) { case 1: eventSave.write(msg+"\r\n"); eventSave.flush(); break; case 2: chatSave.write(msg+"\r\n"); chatSave.flush(); break; case 3: systemSave.write(msg+"\r\n"); systemSave.flush(); System.out.println("[SYSTEM]: "+msg); break; default : System.out.println("[WARNING]: unknow message type "+id+", msg: "+msg); } } catch(IOException e) { System.out.println("[LogServer] : error writing to log file: "+e); } } } static void shutdown(int code) { try { eventSave.flush(); eventSave.close(); } catch(IOException e){} System.exit(code); }}package net.sf.l2j.logserver;import net.sf.l2j.Config;import net.sf.l2j.gameserver.model.L2PcInstance;public class LogServerClient{ static LogServerClient _instance; static LogSocket _sock; private static boolean connected = false; public LogServerClient() { _sock = new LogSocket("127.0.0.1",2007); if(_sock.connect()) { _sock.writeS("wrld_"+Config.GAMESERVER_HOSTNAME+":"+Config.GAME_SERVER_LOGIN_PORT); connected = true; } } public void shutdown() { if(connected) { _sock.writeD(3); _sock.writeS("quit"); } } public static LogServerClient getInstance() { if(_instance == null) _instance = new LogServerClient(); return _instance; } public synchronized void addEvent(int logid, L2PcInstance actor, String data) { if(connected) { LogEntry entry = new LogEntry(logid,actor,data); _sock.writeD(1); _sock.writeS(entry.makeRecord()); } } public synchronized void addChat(int type, L2PcInstance actor, String msg) { if(connected) { _sock.writeD(2); _sock.writeS(type+","+actor.getName()+","+msg); } } public synchronized void addSystem(int type, String msg) { if(connected) { _sock.writeD(3); _sock.writeS(type+","+msg); } } private class LogEntry { private int _logid; private String _actor; private int _target=0; private String _data; private long timestamp; public LogEntry(int logid, L2PcInstance actor, String data) { try { _logid = logid; _actor = actor.getName(); _data = data; if(actor.getTarget() != null) _target = actor.getTarget().getObjectId(); } catch(NullPointerException e) { System.out.println("Error while loggin event, nullpointer at: "+e); } timestamp = System.currentTimeMillis(); } public String makeRecord() { String record=""; record += timestamp+","; record += _logid+","; record += _actor+","; record += _target+","; record += _data; return record; } public int getLogId() { return _logid; } public int getTarget() { return _target; } public String getActor() { return _actor; } public String getData() { return _data; } public long getTimestamp() { return timestamp; } }}package net.sf.l2j.logserver;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/** * LogServer communication socket implementation */public class LogSocket{ private Socket _clientSocket; private ServerSocket _serverSocket; private DataInputStream _in; private DataOutputStream _out; private String _host; private int _port; public LogSocket(String hostName, int portNumber) { _host = hostName; _port = portNumber; } public boolean startServer() { try { _serverSocket = new ServerSocket(_port); } catch(IOException e) { System.out.println("[LogSocket] error while creating server socket: "+e); return false; } return true; } public boolean connect() { try { _clientSocket = new Socket(_host,_port); _out = new DataOutputStream(_clientSocket.getOutputStream()); } catch(Exception e) { System.out.println("[LogSocket] error while creating client socket: "+e); return false; } System.out.println("[LogSocket] connected to logd at "+_host+" to port "+_port); return true; } /** * Accept conenction from Game Server * Call will be blocked until connection */ public void accept() { try { _clientSocket = _serverSocket.accept(); _in = new DataInputStream(_clientSocket.getInputStream()); } catch(Exception e) { } } public int readD() { try { int id = _in.readInt(); return id; } catch(IOException e) { System.out.println("[LogSocket] error reading from gameserver, server closed? "+e); return 0; } } public String readS() { try { String msg = _in.readUTF(); return msg; } catch(IOException e) { System.out.println("[LogSocket] error reading from gameserver, server closed? "+e); return null; } } public void writeD(int id) { try { _out.writeInt(id); } catch(IOException e) { System.out.println("[LogSocket] error writing to logd, server closed? "+e); } } public void writeS(String msg) { try { _out.writeUTF(msg); } catch(IOException e) { System.out.println("[LogSocket] error writing to logd, server closed? "+e); } }}