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 }