/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package pt.jkaiui.filelog; import pt.jkaiui.JKaiUI; import pt.jkaiui.core.messages.*; import java.io.File; import java.io.FileReader; import java.io.BufferedReader; import java.net.URLDecoder; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import static pt.jkaiui.core.KaiConfig.ConfigTag.*; /** * * @author yuu@akron */ public class RoomLog extends Log{ HashSet roomset; public RoomLog() { this.init(); } protected void init(){ // System.out.println("roomlog"); logfile = new File(format(JKaiUI.getConfig().getConfigFile(RoomLogFile))); roomset = new HashSet(); super.init(); readlog(); } public void println(Object room) { if (!datecheck()) { update(); } if (!this.contains(room)) {//�G���[�̏ꍇ��Object���Ӑ}�������̂ł͂Ȃ��ꍇ�͏������Ȃ� this.add(room); String pattern = JKaiUI.getConfig().getConfigString(RoomLogPattern); if (room instanceof UserSubVector) { UserSubVector roomtmp = (UserSubVector) room; pattern = pattern.replace("%V", roomtmp.getVector().decode()); pattern = pattern.replace("%C", Integer.toString(roomtmp.getCount())); pattern = pattern.replace("%S", Integer.toString(roomtmp.getSubs())); if (roomtmp.isPass()) { pattern = pattern.replace("%P", "1"); } else { pattern = pattern.replace("%P", "0"); } pattern = pattern.replace("%M", Integer.toString(roomtmp.getMaxPlayers())); try { //default�̕����Z�b�g�r���������|�i�h�r��p���ď������� pattern = pattern.replace("%D", new String(URLDecoder.decode(roomtmp.getDescription().decode(), "utf-8").getBytes("Shift-JIS"), "Shift-JIS")); } catch (Exception e) { System.out.println("RoomLog println error:"+e); } } if (room instanceof SubVector) { SubVector roomtmp = (SubVector) room; pattern = pattern.replace("%V", roomtmp.getVector().decode()); pattern = pattern.replace("%C", Integer.toString(roomtmp.getCount())); pattern = pattern.replace("%S", Integer.toString(roomtmp.getSubs())); if (roomtmp.isPass()) { pattern = pattern.replace("%P", "1"); } else { pattern = pattern.replace("%P", "0"); } pattern = pattern.replace("%M", Integer.toString(roomtmp.getMaxPlayers())); pattern = pattern.replace("%D", ""); } logfilepw.println(pattern); } } //�G���[�̏ꍇ��Object���Ӑ}�������̂ł͂Ȃ��ꍇ��true���������B����ɂ��Ӑ}���Ȃ��\����h�� private boolean contains(Object room) { if (room instanceof UserSubVector) { UserSubVector roomtmp = (UserSubVector)room; try { String desc = URLDecoder.decode(roomtmp.getDescription().decode(), "utf-8"); return roomset.contains(roomtmp.getVector().decode() + ";" + desc); } catch (Exception e) { System.out.println("RoomLog contains eroor:"+e); return true; } } if (room instanceof SubVector) { SubVector roomtmp = (SubVector)room; return roomset.contains(roomtmp.getVector().decode() + ";" + ""); } return true; } private void add(Object room) { if (room instanceof UserSubVector) { UserSubVector roomtmp = (UserSubVector) room; try { String desc = URLDecoder.decode(roomtmp.getDescription().decode(), "utf-8"); roomset.add(roomtmp.getVector().decode() + ";" + desc); } catch (Exception e) { System.out.println("RoomLog add error:"+e); } } if (room instanceof SubVector) { SubVector roomtmp = (SubVector) room; roomset.add(roomtmp.getVector().decode() + ";" + ""); } } private void readlog() { try { //�t�@�C���������݃p�^�[���̉�� Pattern[] p = {Pattern.compile("%V"), Pattern.compile("%C"), Pattern.compile("%S"), Pattern.compile("%P"), Pattern.compile("%M"), Pattern.compile("%D")}; Matcher m; TreeMap tm = new TreeMap(); for(int i=0; i < p.length; i++){ m = p[i].matcher(JKaiUI.getConfig().getConfigString(RoomLogPattern)); if (m.find()) { tm.put(new Integer(m.start()), new Integer(i)); } } //�ꏊ�ƋL�q�����Ԗڂ��v�Z int vectnum=-1, descnum=-1; Integer keytmp = new Integer(-1); for (int i = 0; i < tm.size(); i++) { Integer tmp = (Integer)tm.higherEntry(keytmp).getValue(); keytmp = (Integer)tm.higherKey(keytmp); if(tmp.equals(new Integer(0))){//tmp.intValue() == 0 vectnum = i; } if(tmp.equals(new Integer(5))){//tmp.intValue() == 5 descnum = i; } } String ps = JKaiUI.getConfig().getConfigString(RoomLogPattern); ps = ps.replace("%V", "(.*)" ); ps = ps.replace("%C", "(.*)" ); ps = ps.replace("%S", "(.*)" ); ps = ps.replace("%P", "(.*)" ); ps = ps.replace("%M", "(.*)" ); ps = ps.replace("%D", "(.*)" ); Pattern rp = Pattern.compile(ps); BufferedReader logfilebr = new BufferedReader(new FileReader(logfile)); String line; while ((line = logfilebr.readLine()) != null) { m = rp.matcher(line); if (m.matches()) { roomset.add(m.group(vectnum + 1)+";"+m.group(descnum + 1)); } } logfilebr.close(); } catch (Exception e) { System.out.println("RoomLog"+e); } } }