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    }