001    import java.net.*;
002    import java.io.*;
003    import java.util.*;
004    
005    import org.realobject.*;
006    
007    import org.util.xml.io.*;
008    import org.util.xml.element.*;
009    
010    public class DummyServer {
011    
012            private ArrayList<EcoBe> ecobe_list_ = new ArrayList<EcoBe>();
013            private ArrayList<Mark> mark_list_ = new ArrayList<Mark>();
014    
015            public static void main(String[] args) throws Exception {
016    
017                    XMLConfigManager config;
018                    if(args.length==1)
019                            config = new XMLConfigManager(args[0]);
020                    else
021                            config = new XMLConfigManager("data/config-DummyServer.xml");
022    
023                    DummyServer server = new DummyServer(config);
024                    server.start();
025            }
026    
027            public DummyServer(XMLConfigManager config) throws Exception {
028                    init(config);
029            }
030    
031            private XMLConfigManager config_;
032            private DatagramPacket packet_;
033            private DatagramSocket socket_;
034            private byte[] receive_buf_;
035    
036            public void init(XMLConfigManager config) throws Exception {
037                    config_ = config;
038            }
039            
040            public void start() throws Exception {
041    
042                    init();
043    
044                    String message = null;
045                    TagElement response = null;
046                    try{
047                            message = receive();
048                            response = createResponseMessage(true);
049                            send(response);
050                            
051                            send("<connect><type>Client</type><protocol_version>1.0</protocol_version><movement_mode>wheel_velocities</movement_mode></connect>");
052                            message = receive();
053    //
054    String sampledata = "<WorldData><time>5.25131</time><agent_id>0</agent_id><nickname>player1</nickname><status>found</status><max_agent>2</max_agent><playMode>play on</playMode><score><yellow>0</yellow><blue>0</blue></score><wheel_velocities><right>0</right><left>0</left></wheel_velocities><ball><dist>117</dist><angle>39</angle></ball><teamMate><id>1</id><nickname>player2</nickname><status>found</status><dist>89</dist><angle>48</angle><orientation>107</orientation></teamMate><teamMate><id>2</id><nickname>player3</nickname><status>found</status><dist>79</dist><angle>-21</angle><orientation>103</orientation></teamMate><teamMate><id>3</id><nickname>player4</nickname><status>found</status><dist>74</dist><angle>-57</angle><orientation>273</orientation></teamMate><teamMate><id>4</id><nickname>player0</nickname><status>found</status><dist>70</dist><angle>66</angle><orientation>258</orientation></teamMate><opponent><id>5</id><nickname>player7</nickname><status>found</status><dist>167</dist><angle>46</angle><orientation>161</orientation></opponent><opponent><id>6</id><nickname>player9</nickname><status>found</status><dist>56</dist><angle>3</angle><orientation>249</orientation></opponent><opponent><id>7</id><nickname>player5</nickname><status>found</status><dist>287</dist><angle>58</angle><orientation>357</orientation></opponent><opponent><id>8</id><nickname>player8</nickname><status>found</status><dist>53</dist><angle>0</angle><orientation>328</orientation></opponent><opponent><id>9</id><nickname>player6</nickname><status>found</status><dist>128</dist><angle>-34</angle><orientation>6</orientation></opponent><flag><id>top_left_pole</id><dist>152</dist><angle>-59</angle></flag><flag><id>bottom_left_pole</id><dist>116</dist><angle>-83</angle></flag><flag><id>top_right_pole</id><dist>310</dist><angle>57</angle></flag><flag><id>bottom_right_pole</id><dist>294</dist><angle>69</angle></flag><flag><id>top_left_corner</id><dist>236</dist><angle>-40</angle></flag><flag><id>bottom_left_corner</id><dist>126</dist><angle>-133</angle></flag><flag><id>top_right_corner</id><dist>359</dist><angle>41</angle></flag><flag><id>bottom_right_corner</id><dist>298</dist><angle>89</angle></flag><flag><id>top_left_goal</id><dist>148</dist><angle>-8</angle></flag><flag><id>bottom_left_goal</id><dist>14</dist><angle>85</angle></flag><flag><id>top_right_goal</id><dist>224</dist><angle>36</angle></flag><flag><id>bottom_right_goal</id><dist>169</dist><angle>78</angle></flag><flag><id>top_left_small_area</id><dist>83</dist><angle>-74</angle></flag><flag><id>bottom_left_small_area</id><dist>128</dist><angle>-48</angle></flag><flag><id>top_right_small_area</id><dist>259</dist><angle>68</angle></flag><flag><id>bottom_right_small_area</id><dist>277</dist><angle>55</angle></flag><flag><id>middle_center</id><dist>117</dist><angle>39</angle></flag><flag><id>top_center</id><dist>229</dist><angle>11</angle></flag><flag><id>bottom_center</id><dist>112</dist><angle>112</angle></flag></WorldData>";
055    
056                            for(int i=0;i<10;i++) {
057                                    send(sampledata);
058                                    message = receive();
059    //                              System.out.println("received command:"+message);
060                            }
061                    }catch(Exception e){
062                            response = createResponseMessage(false);
063                    }
064                    
065    //alert("Dummy Server received message: \n"+message);
066            }
067    
068            public void init() throws Exception {
069                    initWorld();
070                    initSocket();
071            }
072            
073            private void initWorld() throws Exception {
074                    ecobe_list_.clear();
075                    mark_list_.clear();
076                    
077                    TagElement[] ecobe_tag = config_.getTag("vt_list").getTagChildren("vt");
078                    for(int i=0;i<ecobe_tag.length;i++) {
079                            EcoBe ecobe = new EcoBe(Integer.parseInt(ecobe_tag[i].getChildValue("vt_id")));
080                            ecobe_list_.add(ecobe);
081    //                      System.out.println(ecobe);
082                    }
083                    TagElement[] mark_tag = config_.getTag("rc_list").getTagChildren("rc");
084                    for(int i=0;i<mark_tag.length;i++) {
085                            Mark mark = new Mark(Integer.parseInt(mark_tag[i].getChildValue("rc_id")));
086                            mark_list_.add(mark);
087    //                      System.out.println(mark);
088                    }
089            }
090    
091            public TagElement createFirstMessage() throws Exception {
092                    TagElement message = new TagElement("connect");
093                    message.setChildren(
094                            new TagElement("type", config_.getValue("connection/type", "Client")),
095                            new TagElement("protocol_version", config_.getValue("connection/protocol_version", "1.0")),
096                            new TagElement("nickname", config_.getValue("connection/nickname", "no_name")),
097                            new TagElement("rc_id", config_.getValue("connection/rc_id", "0")),
098                            new TagElement("vt_id", config_.getValue("connection/vt_id", "0"))
099                    );
100                    return message;
101            }
102    
103            public void initSocket() throws Exception {
104                    int port = config_.getInt("server/port", 3310);
105                    int timeout = config_.getInt("server/timeout", 1000);
106                    packet_ = new DatagramPacket(new byte[0], 0);
107                    socket_ = new DatagramSocket(port);
108                    socket_.setSoTimeout(timeout);
109                    receive_buf_ = new byte[config_.getInt("server/message_max_length", 1024*4)];
110            }
111            
112            public void send(TagElement tag) throws Exception {
113                    send(tag.toString());
114            }
115            public void send(String message) throws Exception {
116                    byte[] send_buf = message.getBytes();
117                    packet_.setData(send_buf);
118                    socket_.send(packet_);
119                    System.out.println("send:" + message);
120            }
121            
122            public TagElement createResponseMessage(boolean success) throws Exception {
123                    TagElement message = new TagElement("connect", (success ? "true" : "false"));
124                    return message;
125            }
126            
127            public String receive() throws Exception {
128    //              System.out.println("wait receiving...");
129                    packet_.setData(receive_buf_);
130                    socket_.receive(packet_);
131                    
132                    String response = new String(packet_.getData(), 0, packet_.getLength());
133                    System.out.println("receive:" + response);
134                    return response;
135            }
136    
137            public static void alert(Object message) {
138                    javax.swing.JOptionPane.showMessageDialog(null, message);
139            }
140    
141    }