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    }