001 import java.net.*; 002 import java.io.*; 003 import java.util.*; 004 import javax.swing.*; 005 import javax.swing.event.*; 006 import org.util.xml.io.*; 007 import org.util.xml.element.*; 008 import org.server.*; 009 010 public class TeamManager { 011 012 private ArrayList<TeamManagerListener> listener_list_ = new ArrayList<TeamManagerListener>(); 013 private ArrayList<RealPlayer> real_player_list_ = new ArrayList<RealPlayer>(); 014 private ArrayList<BufferedWriter> log_writer_list_ = new ArrayList<BufferedWriter>(); 015 016 public TeamManager(XMLConfigManager config) throws Exception { 017 init(config); 018 } 019 020 private XMLConfigManager config_; 021 private DatagramPacket packet_; 022 private DatagramSocket socket_; 023 private byte[] receive_buf_; 024 025 public void init(XMLConfigManager config) throws Exception { 026 027 config_ = config; 028 029 if(config_.getBoolean("dummyserver/launch", true)) { 030 new Thread(new Runnable(){public void run(){try{ 031 DummyServer server = new DummyServer(config_); 032 server.start(); 033 }catch(Exception e){e.printStackTrace();}}}).start(); 034 } 035 036 TagElement[] player_info_list = config_.getTag("player_list").getTagChildren("player"); 037 038 for(int i=0;i<player_info_list.length;i++) { 039 final TagElement player_info = player_info_list[i]; 040 new Thread(new Runnable(){public void run(){try{ 041 // Thread.sleep(1000); 042 // alert("start sample"); 043 String ip = config_.getValue("server/ip", "localhost"); 044 int port = config_.getInt("server/port", 3130); 045 int timeout = config_.getInt("server/timeout", 1000); 046 RealPlayer rp = new RealPlayer(ip, port, timeout, player_info); 047 fireAddedPlayer(rp); 048 }catch(Exception e){e.printStackTrace();}}}).start(); 049 } 050 051 052 // tryToConnect(); 053 } 054 055 056 public void addTeamManagerListener(TeamManagerListener listener) { 057 for(int i=0;i<real_player_list_.size();i++) { 058 listener.addPlayer(real_player_list_.get(i)); 059 } 060 listener_list_.add(listener); 061 } 062 public void removeTeamManagerListener(TeamManagerListener listener) { 063 listener_list_.remove(listener); 064 } 065 private void fireAddedPlayer(RealPlayer real) { 066 alert("connection detected: "+real.getID()); 067 for(int i=0;i<listener_list_.size();i++) 068 listener_list_.get(i).addPlayer(real); 069 } 070 public void fireConnected(RealPlayer real, VirtualPlayer virtual) { 071 for(int i=0;i<listener_list_.size();i++) 072 listener_list_.get(i).connected(real, virtual); 073 } 074 public void disconnected(RealPlayer real, VirtualPlayer virtual) { 075 for(int i=0;i<listener_list_.size();i++) 076 listener_list_.get(i).disconnected(real, virtual); 077 } 078 079 /* 080 protected void fireChanges(Object source) { 081 ChangeEvent e = new ChangeEvent(source); 082 for(int i=0;i<listener_list_.size();i++) 083 listener_list_.get(i).stateChanged(e); 084 } 085 */ 086 public void addLogWriter(Writer log_writer) { 087 log_writer_list_.add(new BufferedWriter(log_writer)); 088 } 089 public void removeLogWriter(Writer log_writer) { 090 log_writer_list_.remove(new BufferedWriter(log_writer)); 091 } 092 public void alert(Object message) { 093 for(int i=0;i<log_writer_list_.size();i++) { 094 try{ 095 BufferedWriter bw = log_writer_list_.get(i); 096 bw.write(message.toString()); 097 bw.newLine(); 098 bw.flush(); 099 } catch(Exception e) { e.printStackTrace(); } 100 } 101 // javax.swing.JOptionPane.showMessageDialog(null, message); 102 } 103 }