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