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