ProgrammierMethodik 2002 - RoboCup

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

RCParser.java

Go to the documentation of this file.
00001 /*
00002  * $Id: RCParser_8java-source.html,v 1.2 2002/07/07 20:59:52 stork Exp $
00003  *
00004  * $Log: RCParser_8java-source.html,v $
00004  * Revision 1.2  2002/07/07 20:59:52  stork
00004  * update dokumenation
00004  *
00005  * Revision 1.15  2002/07/05 18:34:08  stork
00006  * update dokumentation
00007  *
00008  * Revision 1.14  2002/07/03 19:06:01  stork
00009  * enable output of the server messages to the log file
00010  *
00011  * Revision 1.13  2002/07/03 17:23:15  stork
00012  * add some debug messages
00013  *
00014  * Revision 1.12  2002/06/27 20:26:39  stork
00015  * add + update dokumentation
00016  *
00017  * Revision 1.11  2002/06/22 20:15:41  stork
00018  * add some more dokumentation
00019  *
00020  * Revision 1.10  2002/06/10 20:52:19  stork
00021  * correct handling of enemies and friend
00022  *
00023  * Revision 1.9  2002/06/08 14:40:33  stork
00024  * add logging support
00025  *
00026  * Revision 1.8  2002/06/07 21:36:17  stork
00027  * syncronize and improve the event parsing with the world
00028  *
00029  * Revision 1.7  2002/06/07 18:12:51  stork
00030  * bug fix in flag handling
00031  *
00032  * Revision 1.5  2002/06/04 16:39:02  stork
00033  * correct bug in sorting list
00034  *
00035  * Revision 1.4  2002/05/29 21:06:18  stork
00036  * add missing Hear type value
00037  *
00038  * Revision 1.3  2002/05/25 22:05:12  stork
00039  * tests and minor bugfixes
00040  *
00041  * Revision 1.2  2002/05/21 20:57:14  stork
00042  * first communicator version
00043  *
00044  * Revision 1.1.1.1  2002/05/21 20:32:05  stork
00045  * empty project
00046  *
00047  */
00048 import java.util.*;
00049 
00055 public class RCParser
00056     implements RCEventType, RCSender,RCType, RCView, RCPlayMode {
00057 
00058     // String data base
00059     private final String ServerParam = "(server_param ";
00060     private final String PlayerType = "(player_type ";
00061     private final String PlayerParam = "(player_param ";
00062     private final String Hear = "(hear ";
00063     private final String See = "(see ";
00064     private final String SenceBody = "(sense_body ";
00065     
00066     private String TeamName;   
00068     int OldTimeStamp;
00069 
00073     public RCParser(String TeamName){
00074         this.TeamName = TeamName;
00075         this.OldTimeStamp = 0;
00076     }
00077 
00084     public void pushMessage ( String Command, RCWorld World ){
00085         String Message = Command.trim();
00086 
00087         /* identify messsage type */
00088         if( Message.startsWith(ServerParam) == true ){
00089             World.Log.Log("Player-"+World.PlayerNumber+" : parse ServerParam-Message");
00090             this.parseServerParam(Message, World);
00091         }else if( Message.startsWith(PlayerType) == true ){
00092             World.Log.Log("Player-"+World.PlayerNumber+" : parse PlayerType-Message");
00093             this.parsePlayerType(Message, World);
00094         }else if( Message.startsWith(PlayerParam) == true ){
00095             World.Log.Log("Player-"+World.PlayerNumber+" : parse PlayerParam-Message");
00096             this.parsePlayerParam(Message, World);
00097         }else if( Message.startsWith(Hear) == true ){
00098             World.Log.Log("Player-"+World.PlayerNumber+" : parse Hear-Message");
00099             this.parseHear(Message, World);
00100         }else if( Message.startsWith(See) == true ){
00101             World.Log.Log("Player-"+World.PlayerNumber+" : parse See-mMessage");
00102             this.parseSee(Message, World);
00103         }else if( Message.startsWith(SenceBody) == true ){
00104             World.Log.Log("Player-"+World.PlayerNumber+" : parse SenceBody-Message");
00105             this.parseSenseBody(Message, World);
00106         }
00107     }
00108 
00109 
00117     public void parseServerParam(String Message, RCWorld World){
00118         RCServerParamEvent event = new RCServerParamEvent();
00119         String data = Message.substring( ServerParam.length(), Message.length()-1);
00120         StringTokenizer tk = new StringTokenizer(data);
00121 
00122         /* parse the message */
00123         event.Type = SERVER_PARAM;      
00124         event.gwidth = Double.parseDouble(tk.nextToken());
00125         event.inertia_moment = Double.parseDouble(tk.nextToken());
00126         event.psize = Double.parseDouble(tk.nextToken());
00127         event.pdecay = Double.parseDouble(tk.nextToken());
00128         event.prand = Double.parseDouble(tk.nextToken());
00129         event.pweight = Double.parseDouble(tk.nextToken());
00130         event.pspeed_max = Double.parseDouble(tk.nextToken());
00131         event.paccel_max = Double.parseDouble(tk.nextToken());
00132         event.stamia_max = Double.parseDouble(tk.nextToken());
00133         event.stamia_inc = Double.parseDouble(tk.nextToken());
00134         event.recover_init = Double.parseDouble(tk.nextToken());
00135         event.recover_dthr = Double.parseDouble(tk.nextToken());
00136         event.recover_min = Double.parseDouble(tk.nextToken());
00137         event.recover_dec = Double.parseDouble(tk.nextToken());
00138         event.effort_init = Double.parseDouble(tk.nextToken());
00139         event.effort_dthr = Double.parseDouble(tk.nextToken());
00140         event.effor_min = Double.parseDouble(tk.nextToken());
00141         event.effort_dec = Double.parseDouble(tk.nextToken());
00142         event.effort_ithr = Double.parseDouble(tk.nextToken());
00143         event.effort_inc = Double.parseDouble(tk.nextToken());
00144         event.kick_rand = Double.parseDouble(tk.nextToken());
00145         event.team_actuator_noise = Double.parseDouble(tk.nextToken());
00146         event.prand_factor_l = Double.parseDouble(tk.nextToken());
00147         event.prand_factor_r = Double.parseDouble(tk.nextToken());
00148         event.kick_rand_factor_l = Double.parseDouble(tk.nextToken());
00149         event.kick_rand_factor_r = Double.parseDouble(tk.nextToken());
00150         event.bsize = Double.parseDouble(tk.nextToken());
00151         event.bdecay = Double.parseDouble(tk.nextToken());
00152         event.brand = Double.parseDouble(tk.nextToken());
00153         event.bweight = Double.parseDouble(tk.nextToken());
00154         event.bspeed_max = Double.parseDouble(tk.nextToken());
00155         event.baccel_max = Double.parseDouble(tk.nextToken());
00156         event.dprate = Double.parseDouble(tk.nextToken());
00157         event.kprate = Double.parseDouble(tk.nextToken());
00158         event.kmargin = Double.parseDouble(tk.nextToken());
00159         event.ctlradius = Double.parseDouble(tk.nextToken());
00160         event.ctlradius_width = Double.parseDouble(tk.nextToken());
00161         event.maxp = Double.parseDouble(tk.nextToken());
00162         event.minp = Double.parseDouble(tk.nextToken());
00163         event.maxm = Double.parseDouble(tk.nextToken());
00164         event.minm = Double.parseDouble(tk.nextToken());
00165         event.maxnm = Double.parseDouble(tk.nextToken());
00166         event.minnm = Double.parseDouble(tk.nextToken());
00167         event.maxn = Double.parseDouble(tk.nextToken());
00168         event.minn = Double.parseDouble(tk.nextToken());
00169         event.visangle = Double.parseDouble(tk.nextToken());
00170         event.visdist = Double.parseDouble(tk.nextToken());
00171         event.windir = Double.parseDouble(tk.nextToken());
00172         event.winforce = Double.parseDouble(tk.nextToken());
00173         event.winang = Double.parseDouble(tk.nextToken());
00174         event.winrand = Double.parseDouble(tk.nextToken());
00175         event.kickable_area = Double.parseDouble(tk.nextToken());
00176         event.catch_area_l = Double.parseDouble(tk.nextToken());
00177         event.catch_area_w = Double.parseDouble(tk.nextToken());
00178         event.catch_prob = Double.parseDouble(tk.nextToken());
00179         event.goalie_max_moves = Double.parseDouble(tk.nextToken());
00180         event.ckmargin = Double.parseDouble(tk.nextToken());
00181         event.offside_area = Double.parseDouble(tk.nextToken());
00182         event.win_no = Double.parseDouble(tk.nextToken());
00183         event.win_random = Double.parseDouble(tk.nextToken());
00184         event.say_cnt_max = Double.parseDouble(tk.nextToken());
00185         event.SayCoachMsgSize = Double.parseDouble(tk.nextToken());
00186         event.clang_win_size = Double.parseDouble(tk.nextToken());
00187         event.clang_define_win = Double.parseDouble(tk.nextToken());
00188         event.clang_meta_win = Double.parseDouble(tk.nextToken());
00189         event.clang_advice_win = Double.parseDouble(tk.nextToken());
00190         event.clang_info_win = Double.parseDouble(tk.nextToken());
00191         event.clang_mess_delay = Double.parseDouble(tk.nextToken());
00192         event.clang_mess_per_cycle = Double.parseDouble(tk.nextToken());
00193         event.half_time = Double.parseDouble(tk.nextToken());
00194         event.sim_st = Double.parseDouble(tk.nextToken());
00195         event.send_st = Double.parseDouble(tk.nextToken());
00196         event.recv_st = Double.parseDouble(tk.nextToken());
00197         event.sb_step = Double.parseDouble(tk.nextToken());
00198         event.lcm_st = Double.parseDouble(tk.nextToken());
00199         event.SayMsgSize = Double.parseDouble(tk.nextToken());
00200         event.hear_max = Double.parseDouble(tk.nextToken());
00201         event.hear_inc = Double.parseDouble(tk.nextToken());
00202         event.hear_decay = Double.parseDouble(tk.nextToken());
00203         event.cban_cycle = Double.parseDouble(tk.nextToken());
00204         event.slow_down_factor = Double.parseDouble(tk.nextToken());
00205         event.useoffside = Double.parseDouble(tk.nextToken());
00206         event.kickoffoffside = Double.parseDouble(tk.nextToken());
00207         event.offside_kick_margin = Double.parseDouble(tk.nextToken());
00208         event.audio_dist = Double.parseDouble(tk.nextToken());
00209         event.dist_qstep = Double.parseDouble(tk.nextToken());
00210         event.land_qstep = Double.parseDouble(tk.nextToken());
00211         event.dir_qstep = Double.parseDouble(tk.nextToken());
00212         event.dist_qstep_l = Double.parseDouble(tk.nextToken());
00213         event.dist_qstep_r = Double.parseDouble(tk.nextToken());
00214         event.land_qstep_l = Double.parseDouble(tk.nextToken());
00215         event.land_qstep_r = Double.parseDouble(tk.nextToken());
00216         event.dir_qstep_l = Double.parseDouble(tk.nextToken());
00217         event.dir_qstep_r = Double.parseDouble(tk.nextToken());
00218         event.CoachMode = Double.parseDouble(tk.nextToken());
00219         event.CwRMode = Double.parseDouble(tk.nextToken());
00220         event.old_hear = Double.parseDouble(tk.nextToken());
00221         event.sv_st = Double.parseDouble(tk.nextToken());
00222         event.start_goal_l = Double.parseDouble(tk.nextToken());
00223         event.start_goal_r = Double.parseDouble(tk.nextToken());
00224         event.fullstate_l = Double.parseDouble(tk.nextToken());
00225         event.fullstate_r = Double.parseDouble(tk.nextToken());
00226         event.drop_time = Double.parseDouble(tk.nextToken());
00227 
00228         // deliver event
00229         LinkedList l = new LinkedList();
00230         l.add(event);
00231         World.receiveEvent(l);
00232     }
00233 
00241     public void parsePlayerParam(String Message, RCWorld World){
00242         RCPlayerParamEvent event = new RCPlayerParamEvent();
00243         StringTokenizer tk = new StringTokenizer( Message.substring(PlayerParam.length(), Message.length()-1));
00244 
00245         /* parse event */
00246         event.Type = PLAYER_PARAM;
00247         event.player_types = Double.parseDouble(tk.nextToken());
00248         event.subst_max = Double.parseDouble(tk.nextToken());
00249         event.pt_max = Double.parseDouble(tk.nextToken());
00250         event.player_speed_max_delta_min = Double.parseDouble(tk.nextToken());
00251         event.player_speed_max_delta_max = Double.parseDouble(tk.nextToken());
00252         event.stamoa_inc_max_delta_factor = Double.parseDouble(tk.nextToken());
00253         event.player_decay_delta_min = Double.parseDouble(tk.nextToken());
00254         event.player_decay_delta_max = Double.parseDouble(tk.nextToken());
00255         event.inertia_moment_delta_factor = Double.parseDouble(tk.nextToken());
00256         event.dash_power_rarte_delta_min = Double.parseDouble(tk.nextToken());
00257         event.dash_power_rate_delta_max = Double.parseDouble(tk.nextToken());
00258         event.player_size_delta_factor = Double.parseDouble(tk.nextToken());
00259         event.kickable_margin_delta_min = Double.parseDouble(tk.nextToken());
00260         event.kickable_margin_delta_max = Double.parseDouble(tk.nextToken());
00261         event.kick_rand_delta_factor = Double.parseDouble(tk.nextToken());
00262         event.extra_stamina_delta_min = Double.parseDouble(tk.nextToken());
00263         event.extra_stamina_delta_max = Double.parseDouble(tk.nextToken());
00264         event.effort_max_delta_factor = Double.parseDouble(tk.nextToken());
00265         event.effort_min_delta_factor = Double.parseDouble(tk.nextToken());
00266 
00267         // deliver event
00268         LinkedList l = new LinkedList();
00269         l.add(event);
00270         World.receiveEvent(l);
00271     }
00272 
00280     public void parsePlayerType(String Message, RCWorld World){
00281         RCPlayerTypeEvent event = new RCPlayerTypeEvent();
00282         StringTokenizer tk = new StringTokenizer( Message.substring(PlayerType.length(), Message.length()-1));  
00283 
00284         /* parse meassage */
00285         event.Type = PLAYER_TYPE;
00286         event.id = Integer.parseInt(tk.nextToken());
00287         event.player_speed_max = Double.parseDouble(tk.nextToken());
00288         event.stamina_inc_max = Double.parseDouble(tk.nextToken());
00289         event.player_decay = Double.parseDouble(tk.nextToken());
00290         event.inertia_moment = Double.parseDouble(tk.nextToken());
00291         event.dash_power_rate = Double.parseDouble(tk.nextToken());
00292         event.player_size = Double.parseDouble(tk.nextToken());
00293         event.kicakable_margin = Double.parseDouble(tk.nextToken());
00294         event.kick_rand = Double.parseDouble(tk.nextToken());
00295         event.extra_stamina = Double.parseDouble(tk.nextToken());
00296         event.effort_max = Double.parseDouble(tk.nextToken());
00297         event.effort_min = Double.parseDouble(tk.nextToken());
00298 
00299         // deliver event
00300         LinkedList l = new LinkedList();
00301         l.add(event);
00302         World.receiveEvent(l);
00303     }
00304     
00312     public void parseHear(String Message, RCWorld World){
00313         RCHearEvent event = new RCHearEvent();
00314         String data = Message.substring(Hear.length(), Message.length()-1);
00315         StringTokenizer tk = new StringTokenizer(data);
00316 
00317         event.TimeStamp = Integer.parseInt(tk.nextToken());
00318         String Sender = tk.nextToken();
00319 
00320         /* check for package lose */
00321         if( OldTimeStamp+1 < event.TimeStamp){
00322             World.Log.Debug("lost "+(event.TimeStamp-OldTimeStamp)+" packages("+OldTimeStamp+"/"+event.TimeStamp+")");
00323         }
00324         OldTimeStamp = event.TimeStamp;
00325 
00326         /* get sender */
00327         if( Sender.compareTo("online_coach_left") == 0){
00328             event.Sender = LEFT_COACH;
00329         }else if( Sender.compareTo("online_coach_right") == 0){
00330             event.Sender = RIGHT_COACH;
00331         }else if( Sender.compareTo("referee") == 0){
00332             event.Sender = REFEREE;
00333         }else if( Sender.compareTo("self") == 0 ){
00334             event.Sender = SELF;
00335         }else{
00336             event.Sender = DIRECTION;
00337             event.Direction = Double.parseDouble(Sender);
00338         }
00339         event.Message = tk.nextToken();
00340         event.Type = HEAR;
00341         
00342         // deliver event
00343         LinkedList l = new LinkedList();
00344         l.add(event);
00345         World.receiveEvent(l);
00346     }
00347     
00355     public void parseSee(String Message, RCWorld World){
00356         LinkedList l = new LinkedList();
00357         StringTokenizer tk = new StringTokenizer( Message.substring(See.length(), Message.length()-1));
00358         int TimeStamp = Integer.parseInt(tk.nextToken()); // get timestamp
00359         boolean onlyOneTime = false;
00360         
00361 //      World.Log.Log("****************************************");
00362         World.Log.Log("Player-"+World.PlayerNumber+" : "+Message);
00363             
00364 
00365         // make one event for each object
00366         int loop = tk.countTokens();
00367         while( tk.hasMoreElements() ){
00368         //      for( int rl = 0; rl < loop ; rl++ ){
00369             boolean AddToList = true;
00370             RCSeeEvent event = new RCSeeEvent();
00371             String ID = tk.nextToken(")");
00372             String PARAM = tk.nextToken(")");
00373             ID = ID.substring(" ((".length(), ID.length()); // remove " (("
00374 
00375             //      System.out.println("object = " + ID +" -> " +PARAM );
00376 
00377             // find opbject
00378             StringTokenizer tkId = new StringTokenizer(ID);
00379             String TK = tkId.nextToken();
00380             //System.out.println("TOKEN = " + TK);
00381             switch( (TK.getBytes())[0] ){
00382             case 'p':
00383                 {
00384                     //System.out.println("PLAYER");
00385 
00386                     if( tkId.hasMoreTokens() ){
00387                         // find teamname
00388                         event.TeamName = tkId.nextToken();
00389                         if( event.TeamName.compareTo("\""+this.TeamName+"\"") == 0 ){
00390                             event.Object = FRIEND;                         
00391                         }else{
00392                             event.Object = ENEMY;
00393                         }
00394                         if( tkId.hasMoreTokens() ){
00395                             // get uniformnumber
00396                             event.UniformNumber = Integer.parseInt(tkId.nextToken());
00397                             
00398                             if( tkId.hasMoreTokens() ){
00399                                 // is he a goalie
00400                                 event.Goalie = Boolean.valueOf(tkId.nextToken()).booleanValue();
00401                             }
00402                         }else{
00403                             AddToList = false;
00404                         }
00405                     }else{
00406                         // undefined player
00407                         AddToList = false;
00408                         event.Object = PLAYER;
00409                     }
00410                     break;
00411                 }
00412             case 'b':
00413                 {
00414                     //System.out.println("BALL");
00415 
00416                     event.Object = BALL;
00417                     break;
00418                 }
00419             case 'g':
00420                 {
00421                     //System.out.println("GOAL");
00422 
00423                     // goal
00424                     event.Object = GOAL;
00425                     if( (tkId.nextToken().getBytes())[0] == 'l' ){
00426                         // left
00427                         event.FirstLocation = LEFT;
00428                     }else{
00429                         // right
00430                         event.FirstLocation = RIGHT;
00431                     }
00432                     break;
00433                 }
00434             case 'f':
00435                 {
00436                     //System.out.println("FLAG");
00437                             
00438                     // flag
00439                     event.Object = FLAGS;
00440                     String pos = tkId.nextToken();
00441                     
00442                     switch( (pos.getBytes())[0] ){
00443                     case 'l':
00444                         {
00445                             event.FirstLocation = LEFT;
00446                             switch( (tkId.nextToken().getBytes())[0] ){
00447                             case '0':
00448                                 {
00449                                     event.SecondLocation = CENTER;
00450                                     event.Number = 0;
00451                                     break;
00452                                 }
00453                             case 't':
00454                                 {
00455                                     event.SecondLocation = TOP;
00456                                     break;
00457                                 }
00458                             case 'b':
00459                                 {
00460                                     event.SecondLocation = BOTTOM;
00461                                     break;
00462                                 }
00463                             }
00464                             if( tkId.hasMoreTokens()){
00465                                 event.Number = Integer.parseInt(tkId.nextToken());
00466                             }else{
00467                                 event.Number = -1;
00468                             }
00469                             break;
00470                         }
00471                     case 'c':
00472                         {
00473                             if( tkId.hasMoreTokens() == false ){
00474                                 event.FirstLocation = CENTER;
00475                                 break;
00476                             }
00477                             event.FirstLocation = CENTER;
00478                             switch( (tkId.nextToken().getBytes())[0] ){
00479                             case 't':
00480                                 {
00481                                     event.SecondLocation = TOP;
00482                                     break;
00483                                 }
00484                             case 'b':
00485                                 {
00486                                     event.SecondLocation = BOTTOM;
00487                                     break;
00488                                 }
00489                             }
00490                             break;
00491                         }
00492                     case 'r':
00493                         {
00494                             event.FirstLocation = RIGHT;
00495                             switch( (tkId.nextToken().getBytes())[0] ){
00496                             case '0':
00497                                 {
00498                                     event.SecondLocation = CENTER;
00499                                     event.Number = 0;
00500                                     break;
00501                                 }
00502                             case 't':
00503                                 {
00504                                     event.SecondLocation = TOP;
00505                                     break;
00506                                 }
00507                             case 'b':
00508                                 {
00509                                     event.SecondLocation = BOTTOM;
00510                                     break;
00511                                 }
00512                             }
00513                             if( tkId.hasMoreTokens()){
00514                                 event.Number = Integer.parseInt(tkId.nextToken());
00515                             }else{
00516                                 event.Number = -1;
00517                             }
00518                             break;
00519                         }
00520                     case 'p': // line
00521                         {
00522                             event.FirstLocation = LINE;
00523                             
00524                             // left or right or center
00525                             switch(tkId.nextToken().getBytes()[0]){
00526                             case 'l':
00527                                 {
00528                                     event.SecondLocation = LEFT;
00529                                     break;
00530                                 }
00531                             case 'c':
00532                                 {
00533                                     event.SecondLocation = CENTER;
00534                                     break;
00535                                 }
00536                             case 'r':
00537                                 {
00538                                     event.SecondLocation = RIGHT;
00539                                     break;
00540                                 }
00541                             }
00542                             
00543                             // top or bottom
00544                             switch( (tkId.nextToken().getBytes())[0] ){
00545                             case 't':
00546                                 event.ThirdLocation = TOP;
00547                                 break;
00548                             case 'c':
00549                                 event.ThirdLocation = CENTER;
00550                                 break;
00551                             case 'b':
00552                                 event.ThirdLocation = BOTTOM;
00553                                 break;
00554                             }
00555                             break;
00556                         }
00557                     case 'g': // goal
00558                         {
00559                             event.FirstLocation = GOAL;
00560                             // left or right
00561                             if( (tkId.nextToken().getBytes())[0] == 'l' )
00562                                 event.SecondLocation = LEFT;
00563                             else
00564                                 event.SecondLocation = RIGHT;
00565 
00566 
00567                             if( tk.hasMoreTokens() == false ){
00568                                 event.ThirdLocation = UNDEFINED;
00569                                 break;
00570                             }
00571 
00572                             // top or bottom
00573                             if ( (tkId.nextToken().getBytes())[0] == 't' )
00574                                 event.ThirdLocation = TOP;
00575                             else
00576                                 event.ThirdLocation = BOTTOM;
00577 
00578                             break;
00579                         }
00580                     case 't':
00581                         {
00582                             // top
00583                             event.FirstLocation = TOP;
00584                             switch( (tkId.nextToken().getBytes())[0] ){
00585                             case '0':
00586                                 {
00587                                     event.SecondLocation = CENTER;
00588                                     event.Number = 0;
00589                                     break;
00590                                 }
00591                             case 'l':
00592                                 {
00593                                     event.SecondLocation = LEFT;
00594                                     break;
00595                                 }
00596                             case 'r':
00597                                 {
00598                                     event.SecondLocation = RIGHT;
00599                                     break;
00600                                 }
00601                             }
00602                             if( tkId.hasMoreTokens()){
00603                                 event.Number = Integer.parseInt(tkId.nextToken());
00604                             }
00605                             break;
00606                         }
00607                     case 'b':
00608                         {           
00609                             // bottom
00610                             event.FirstLocation = BOTTOM;
00611                             switch( (tkId.nextToken().getBytes())[0] ){
00612                             case '0':
00613                                 {
00614                                     event.SecondLocation = CENTER;
00615                                     event.Number = 0;
00616                                     break;
00617                                 }
00618                             case 'l':
00619                                 {
00620                                     event.SecondLocation = LEFT;
00621                                     break;
00622                                 }
00623                             case 'r':
00624                                 {
00625                                     event.SecondLocation = RIGHT;
00626                                     break;
00627                                 }
00628                             }
00629                             if( tkId.hasMoreTokens()){
00630                                 event.Number = Integer.parseInt(tkId.nextToken());
00631                             }
00632                             break;
00633                         }
00634                     }
00635 
00636                     break;
00637                 }
00638             case 'l':
00639                 {
00640                     // line
00641                     //System.out.println("LINE");
00642                     event.Object = LINE;
00643                     String Pos = tkId.nextToken();
00644                     //System.out.println("Pos = " + Pos);
00645                     switch( (Pos.getBytes())[0] ){
00646                     case 't':                   
00647                         event.FirstLocation = TOP;
00648                         break;
00649                     case 'r':
00650                         event.FirstLocation = RIGHT;
00651                         break;
00652                     case 'b':
00653                         event.FirstLocation = BOTTOM;
00654                         break;
00655                     case 'l':
00656                         event.FirstLocation = LEFT;
00657                         break;
00658                     }
00659                     break;
00660                 }
00661             case 'B':
00662                 {
00663                     AddToList = false;
00664                     event.Object = BALL;
00665                     break;
00666                 }
00667             case 'F':
00668                 {
00669                     AddToList = false;
00670                     event.Object = FLAGS;
00671                     break;
00672                 }
00673             case 'G':
00674                 {
00675                     AddToList = false;
00676                     event.Object = GOAL;
00677                     break;
00678                 }
00679             case 'P':
00680                 {
00681                     AddToList = false;
00682                     event.Object = PLAYER;
00683                     break;
00684                 }
00685             }
00686 
00687             World.Log.Log("Player-"+World.PlayerNumber+" : parse see after object loop");
00688 
00689             // get metric
00690             StringTokenizer tkParam = new StringTokenizer(PARAM);
00691             int count = tkParam.countTokens();
00692             switch(count){
00693             case 1:
00694                 {
00695                     event.Direction = Double.parseDouble(tkParam.nextToken());
00696                     break;
00697                 }
00698             case 2:
00699                 {                   
00700                     event.Distance = Double.parseDouble(tkParam.nextToken());
00701                     event.Direction = Double.parseDouble(tkParam.nextToken());
00702                     break;
00703                 }
00704             case 4:
00705                 {                   
00706                     event.Distance = Double.parseDouble(tkParam.nextToken());
00707                     event.Direction = Double.parseDouble(tkParam.nextToken());
00708                     event.DistChange = Double.parseDouble(tkParam.nextToken());
00709                     event.DirChange = Double.parseDouble(tkParam.nextToken());
00710                     break;
00711                 }
00712             case 6:
00713                 {                   
00714                     event.Distance = Double.parseDouble(tkParam.nextToken());
00715                     event.Direction = Double.parseDouble(tkParam.nextToken());
00716                     event.DistChange = Double.parseDouble(tkParam.nextToken());
00717                     event.DirChange = Double.parseDouble(tkParam.nextToken());
00718                     event.HeadFaceDir = Double.parseDouble(tkParam.nextToken());
00719                     event.BodyFaceDir = Double.parseDouble(tkParam.nextToken());
00720                     break;
00721                 }
00722             }
00723 
00724             //      System.out.println("Distance = " + event.Distance + "  Direction = " + event.Direction );
00725 
00726             World.Log.Log("Player-"+World.PlayerNumber+" : parse see after metric loop");
00727 
00728             // add standart values
00729             event.TimeStamp = TimeStamp;
00730             event.Type = SEE;
00731 
00732             /* check for package lose */
00733             if( (OldTimeStamp+1 < event.TimeStamp) && (onlyOneTime == false) ){
00734                 //              World.Log.Debug("lost "+(event.TimeStamp-OldTimeStamp)+" packages("+OldTimeStamp+"/"+event.TimeStamp+")");
00735                 World.Log.Log("Player-"+World.PlayerNumber+" : lost "+(event.TimeStamp-OldTimeStamp)+" packages("+OldTimeStamp+"/"+event.TimeStamp+")");
00736                 onlyOneTime = true;
00737             }
00738             OldTimeStamp = event.TimeStamp;
00739             
00740 
00741             // add to list
00742             if( AddToList == true ){
00743                 if( (event.Object == FLAGS) || (event.Object == LINE) || (event.Object == GOAL) ){
00744                     l.addFirst(event);
00745                 }else{
00746                     l.addLast(event);
00747                 }
00748             }
00749         }
00750         
00751 
00752         World.Log.Log("Player-"+World.PlayerNumber+" : parse see after object loop");
00753         
00754         // deliver events
00755         World.receiveEvent(l);
00756     }
00757 
00765     public void parseSenseBody(String Message, RCWorld World){
00766         RCSenceEvent event = new RCSenceEvent();
00767         event.Type = SENCE;
00768         
00769         StringTokenizer tk = new StringTokenizer(Message.substring(SenceBody.length(), Message.length()));
00770         event.TimeStamp = Integer.parseInt(tk.nextToken());
00771         
00772         /* check for package lose */
00773         if( OldTimeStamp+1 < event.TimeStamp){
00774             World.Log.Debug("lost "+(event.TimeStamp-OldTimeStamp)+" packages("+OldTimeStamp+"/"+event.TimeStamp+")");
00775         }
00776         OldTimeStamp = event.TimeStamp;
00777 
00778         // view mode 
00779         String ViewMode = tk.nextToken(")");
00780         if( ViewMode.indexOf("high") != -1 ){
00781             if(ViewMode.indexOf("narrow") != -1){
00782                 event.view_mode = HIGH_NARROW;
00783             }else if(ViewMode.indexOf("normal") != -1){
00784                 event.view_mode = HIGH_NORMAL;
00785             }else{
00786                 event.view_mode = HIGH_WIDE;
00787             }
00788         }else{
00789             if(ViewMode.indexOf("narrow") != -1){
00790                 event.view_mode = LOW_NARROW;
00791             }else if(ViewMode.indexOf("normal") != -1){
00792                 event.view_mode = LOW_NORMAL;
00793             }else{
00794                 event.view_mode = LOW_WIDE;
00795             }   
00796         }
00797 
00798         // get stamia
00799         StringTokenizer tkStamia = new StringTokenizer(tk.nextToken().trim());
00800         tkStamia.nextToken();
00801         event.Stamia = Double.parseDouble(tkStamia.nextToken());
00802         event.Effort = Double.parseDouble(tkStamia.nextToken());
00803 
00804         // get speed
00805         StringTokenizer tkSpeed = new StringTokenizer(tk.nextToken().trim());
00806         tkSpeed.nextToken();
00807         event.AmmountOfSpeed = Double.parseDouble(tkSpeed.nextToken());
00808         event.DirectionOfSpeed = Double.parseDouble(tkSpeed.nextToken()); 
00809 
00810 
00811         String Dummy;
00812         // headangle
00813         Dummy = tk.nextToken();
00814         event.HeadAngle = Double.parseDouble(Dummy.substring(" (head_angle".length(), Dummy.length()));
00815 
00816         // get kick 
00817         Dummy = tk.nextToken();
00818         event.KickCount = Double.parseDouble(Dummy.substring(" (kick".length(), Dummy.length()));
00819        
00820         // get dash
00821         Dummy = tk.nextToken();
00822         event.DashCount = Double.parseDouble(Dummy.substring(" (dash".length(), Dummy.length()));
00823 
00824         // get turn
00825         Dummy = tk.nextToken();
00826         event.TurnCount = Double.parseDouble(Dummy.substring(" (turn".length(), Dummy.length()));
00827 
00828         // get say
00829         Dummy = tk.nextToken();
00830         event.SayCount = Double.parseDouble(Dummy.substring(" (say".length(), Dummy.length()));
00831         
00832         // get turn_neck
00833         Dummy = tk.nextToken();
00834         event.TurnNeckCount = Double.parseDouble(Dummy.substring(" (turn_neck".length(), Dummy.length()));
00835 
00836         // get catch
00837         Dummy = tk.nextToken();
00838         event.CatchCount = Double.parseDouble(Dummy.substring(" (catch".length(), Dummy.length()));
00839 
00840         // get move
00841         Dummy = tk.nextToken();
00842         event.MoveCount = Double.parseDouble(Dummy.substring(" (move".length(), Dummy.length()));
00843 
00844         // get turn
00845         Dummy = tk.nextToken();
00846         event.ChangeViewCount = Double.parseDouble(Dummy.substring(" (change_view".length(), Dummy.length()));
00847 
00848         while(tk.hasMoreTokens()){
00849             System.out.println(tk.nextToken(")"));
00850         }
00851         
00852 
00853         // deliver event
00854         LinkedList l= new LinkedList();
00855         l.add(event);
00856         World.receiveEvent(l);
00857     }
00858 }

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