ProgrammierMethodik 2002 - RoboCup

Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

RCCommunicator.java

Go to the documentation of this file.
00001 /*
00002  * $Id: RCCommunicator_8java-source.html,v 1.2 2002/07/07 20:59:52 stork Exp $
00003  *
00004  * $Log: RCCommunicator_8java-source.html,v $
00004  * Revision 1.2  2002/07/07 20:59:52  stork
00004  * update dokumenation
00004  *
00005  * Revision 1.20  2002/07/05 18:34:08  stork
00006  * update dokumentation
00007  *
00008  * Revision 1.19  2002/07/04 16:28:45  stork
00009  * input buffer to 2kB
00010  *
00011  * Revision 1.17  2002/07/04 16:19:13  stork
00012  * reactivate log comments
00013  *
00014  * Revision 1.15  2002/07/04 14:00:46  stork
00015  * remove send buffer size
00016  *
00017  * Revision 1.14  2002/07/04 13:48:07  transier
00018  * save last sent command
00019  *
00020  * Revision 1.13  2002/07/04 13:37:05  stork
00021  * set send buffer to 0
00022  *
00023  * Revision 1.11  2002/07/04 12:54:45  stork
00024  * new buffer size
00025  *
00026  * Revision 1.10  2002/07/03 17:22:48  stork
00027  * +fix too small buffer for server messages
00028  * +add some debug messages
00029  *
00030  * Revision 1.9  2002/06/27 20:26:39  stork
00031  * add + update dokumentation
00032  *
00033  * Revision 1.8  2002/06/22 20:15:41  stork
00034  * add some more dokumentation
00035  *
00036  * Revision 1.7  2002/06/08 14:39:20  stork
00037  * add log support
00038  *
00039  * Revision 1.6  2002/06/07 18:13:42  stork
00040  * remove comments
00041  *
00042  * Revision 1.5  2002/05/30 15:37:16  stork
00043  * improve handling when server dies before we
00044  *
00045  * Revision 1.4  2002/05/29 21:05:21  stork
00046  * update say methode
00047  *
00048  * Revision 1.3  2002/05/25 22:05:12  stork
00049  * tests and minor bugfixes
00050  *
00051  * Revision 1.2  2002/05/21 20:57:14  stork
00052  * first communicator version
00053  *
00054  * Revision 1.1.1.1  2002/05/21 20:32:05  stork
00055  * empty project
00056  *
00057  */
00058 import java.util.*;
00059 import java.net.*;
00060 import java.io.*;
00061 
00067 public class RCCommunicator 
00068     implements RCEventType, RCSender,RCType, RCView, RCPlayMode {
00070     public String Host;
00071     public int ServerPort;
00072     public String Team;
00073     public int PlayerNumber;
00074     public RCPlayMode PlayMode;
00075     public boolean Goalie;
00076     public DatagramSocket Sock;  
00077     public InetAddress Address;
00079     private RCParser Parser;
00080     private RCWorld World;
00081 
00091     public RCCommunicator ( String Team, RCWorld World, boolean Goalie, String Host, int Port ){
00092         String InitMsg;
00093         
00094         /* create a new parser */
00095         Parser = new RCParser(Team);
00096         this.Team = Team;
00097         this.Goalie = Goalie;
00098         this.Host = Host;
00099         this.ServerPort = Port;
00100         this.World = World;
00101         /* do the network stuff*/
00102         try{
00103             /* try to resolve the Hostname */
00104             Address = InetAddress.getByName(Host);
00105             /* create a new socket */
00106             Sock = new DatagramSocket();
00107             Sock.setSoTimeout(10000);
00108 
00109             /* "connect" to server */
00110             if( Goalie == false )
00111                 InitMsg = "(init "+Team+"(version 7.0))";
00112             else
00113                 InitMsg = "(init "+Team+"(version 7.0) (goalie))";
00114             this.send(InitMsg);
00115           
00116             // wait for response from server
00117             byte[] Response = new byte[4096];
00118             DatagramPacket rp = new DatagramPacket(Response, Response.length);  
00119             Sock.receive(rp);       /* save server port */
00120             ServerPort = rp.getPort();
00121             String ResponseMsg = new String(rp.getData());
00122 
00123             if( ResponseMsg.startsWith("(error") == true ){
00124                 // shit happens
00125                 System.out.println(ResponseMsg);
00126                 System.exit(1);
00127             }else{
00128                 /* analyse the server response */
00129                 String Message = ResponseMsg.substring(6, ResponseMsg.length()-1);
00130                 StringTokenizer tk = new StringTokenizer(Message);
00131                 if( tk.nextToken().compareTo("l") == 0 ){
00132                     // left to right
00133                     World.Side = LEFT;
00134                 }else{
00135                     // right to left
00136                     World.Side = RIGHT;
00137                 }
00138                 this.PlayerNumber = Integer.parseInt(tk.nextToken());
00139                 World.PlayerNumber = this.PlayerNumber;
00140             }
00141             
00142             // set position
00143             this.move((World.X1+World.X2)/2,
00144                       (World.Y1+World.Y2)/2);
00145             
00146         }catch(Exception e){
00147             World.Log.Log("Player-"+World.PlayerNumber+" : Resolve error "+e.toString());
00148             System.out.println("RESOLVE:"+ e.toString());
00149         }
00150     }
00151     
00158     public boolean receive (  ){
00159 
00160         try{
00161             byte[] data = new byte[2048];
00162             /* get new message */
00163             DatagramPacket p = new DatagramPacket(data, data.length); 
00164             this.Sock.receive(p);
00165             /* parse the message */
00166             Parser.pushMessage(new String(p.getData()), World);
00167         }catch(Exception e){
00168             //System.out.println(e.toString());
00169             //      System.exit(1);         
00170             return false;
00171         }
00172         return true;
00173     }
00174 
00180     public void turn ( double Movement ){
00181         this.send("(turn "+Movement+")");
00182     }
00183 
00189     public void dash ( double Power ){
00190         this.send("(dash "+Power+")");
00191     }
00192 
00199     public void kick ( double Power, double Direction ){
00200         this.send("(kick "+Power+" "+Direction+")");
00201     }
00202 
00208     public void catchit ( double Direction ){
00209         this.send("(catch "+Direction+")");
00210     }
00211     
00218     public void move ( double x, double y ){
00219         this.send("(move "+x+" "+y+")");
00220     }
00221 
00227     public void turn_neck ( double Angle ){
00228         this.send("(turn_neck "+Angle+")");
00229     }
00230 
00237     public void say ( String Message ){
00238         this.send("("+World.MsgStart+"say "+Message+")");
00239     }
00240 
00244     public void sence_body (  ){
00245         this.send("(sence_body)");
00246     }
00247 
00254     public void send(String Message){
00255         /* create a new packet */
00256         DatagramPacket p = new DatagramPacket(Message.getBytes(), Message.length());
00257         p.setPort(this.ServerPort);
00258         p.setAddress(this.Address);
00259         try{
00260             /* send a new packet */
00261             Sock.send(p);
00262         }catch(IOException e){
00263             System.out.println(e.toString());
00264             System.exit(1);
00265         }
00266     }
00267 }
00268 

(c) Copyright by Gruppe 1 :
  • Frederik Transier
  • Motitz Ritter
  • Oliver Strassburger
  • Sven Stork