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 009 public class RealPlayer { 010 011 private VirtualPlayer connected_virtual_player_; 012 private int rcid_, vtid_; 013 private String nickname_; 014 015 public RealPlayer(String ip, int port, int timeout, TagElement tag) { 016 init(ip, port, timeout, tag); 017 } 018 public RealPlayer(String ip, int port, int timeout, String nickname,int rcid, int vtid) { 019 init(ip, port, timeout, nickname, rcid, vtid); 020 } 021 public String getID() { 022 return rcid_+":"+vtid_; 023 } 024 public String getNickName() { 025 return nickname_; 026 } 027 028 public VirtualPlayer getConnectedVirtualPlayer() { 029 return connected_virtual_player_; 030 } 031 032 private XMLConfigManager config_; 033 private DatagramPacket send_packet_; 034 private DatagramPacket receive_packet_; 035 private DatagramSocket socket_; 036 037 public void init(String ip, int port, int timeout,TagElement tag) { 038 String nickname = tag.getChildValue("nickname"); 039 int rcid = Integer.parseInt(tag.getChildValue("rc_id")); 040 int vtid = Integer.parseInt(tag.getChildValue("vt_id")); 041 init(ip, port, timeout, nickname, rcid, vtid); 042 } 043 public void init(String ip, int port, int timeout, String nickname, int rcid, int vtid) { 044 try{ 045 initSocket(ip, port, timeout, nickname, rcid, vtid); 046 TagElement tag = createFirstMessage(); 047 send(tag); 048 receive(); 049 receive(); 050 send("<connect>true</connect>"); 051 052 /* 053 new Thread(new Runnable(){public void run(){try{ 054 for(String message=receive(); message!=null; message=receive()) { 055 // alert(message); 056 send(createKickMessage(0.1, 1)); 057 } 058 }catch(Exception e){ e.printStackTrace(); }}}).start(); 059 */ 060 }catch(Exception e){ e.printStackTrace(); } 061 } 062 public void initSocket(String ip, int port, int timeout, String nickname, int rcid, int vtid) throws Exception { 063 try{ 064 nickname_ = nickname; 065 rcid_ = rcid; 066 vtid_ = vtid; 067 InetSocketAddress address = new InetSocketAddress(ip, port); 068 send_packet_ = new DatagramPacket(new byte[0], 0, address); 069 byte[] receive_buf = new byte[1024*4]; 070 receive_packet_ = new DatagramPacket(receive_buf, receive_buf.length); 071 socket_ = new DatagramSocket(); 072 socket_.connect(address); 073 socket_.setSoTimeout(timeout); 074 }catch(Exception e){ 075 e.printStackTrace(); 076 } 077 } 078 079 //130 080 public TagElement createVerocitiesMessage(double right, double left) throws Exception { 081 TagElement wheel_velocities = new TagElement("wheel_velocities"); 082 wheel_velocities.setChildren( 083 new TagElement("right", String.valueOf(right)), 084 new TagElement("left", String.valueOf(left)) 085 ); 086 TagElement command = new TagElement("command"); 087 command.setChildren(wheel_velocities); 088 return command; 089 } 090 091 /* 092 */ 093 public TagElement createKickMessage(double angle, int force) throws Exception { 094 TagElement kick = new TagElement("kick"); 095 kick.setChildren( 096 new TagElement("angle", String.valueOf(angle)), 097 new TagElement("force", String.valueOf(force)) 098 ); 099 TagElement command = new TagElement("command"); 100 command.setChildren(kick); 101 return command; 102 } 103 104 public TagElement createFirstMessage() throws Exception { 105 TagElement message = new TagElement("connect"); 106 message.setChildren( 107 new TagElement("type", "Client"), 108 new TagElement("protocol_version", "1.0"), 109 new TagElement("nickname", nickname_), 110 new TagElement("rc_id", String.valueOf(rcid_)), 111 new TagElement("vt_id", String.valueOf(vtid_)) 112 ); 113 return message; 114 } 115 /* 116 public void send(String message) throws Exception { 117 write(message); 118 message = read(); 119 System.out.println("send: "+message); 120 } 121 public String receive() throws Exception { 122 String message = read(); 123 // int len = message.split("\\|").length; 124 // System.out.println("debug: "+len+"["+message+"]"); 125 // for(int i=0;i<len;i++) 126 // write("<connect>true</connect>"); 127 write("<connect>true</connect>"); 128 System.out.println("receive: "+message); 129 return message; 130 } 131 */ 132 public void send(TagElement tag) throws Exception { 133 send(tag.toString()); 134 } 135 public void send(String message) throws Exception { 136 byte[] write_buf = message.getBytes(); 137 send_packet_.setData(write_buf); 138 socket_.send(send_packet_); 139 System.out.println("send: "+message); 140 } 141 public TagElement receiveTag() throws Exception { 142 TagElement tag = XMLIO.read(new StringBuffer(receive())); 143 return tag; 144 } 145 public String receive() throws Exception { 146 // DatagramPacket rtmp = new DatagramPacket(receive_buf_, receive_buf_.length); 147 // rtmp = packet_; 148 socket_.receive(receive_packet_); 149 String response = new String(receive_packet_.getData(), 0, receive_packet_.getLength()); 150 System.out.println("receive: "+response); 151 return response; 152 } 153 154 public static void alert(Object message) { 155 System.out.println(message); 156 // javax.swing.JOptionPane.showMessageDialog(null, message); 157 } 158 }