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    }