initsenderplayer.cpp
来自「2009 ROBOCUP 仿真2DSERVER 源码」· C++ 代码 · 共 287 行
CPP
287 行
// -*-c++-*-/*************************************************************************** initsenderplayer.cpp Classes for sending init messages for players ------------------- begin : 208-02-17 copyright : (C) 2008 by The RoboCup Soccer Simulator Maintenance Group. email : sserver-admin@lists.sourceforge.net***************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU LGPL as published by the Free Software * * Foundation; either version 2 of the License, or (at your option) any * * later version. * * * ***************************************************************************/#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "initsenderplayer.h"#include "serializer.h"#include "field.h"#include "player.h"#include "team.h"namespace rcss {/*!//===================================================================//// CLASS: InitSenderPlayer//// DESC: Base class for the init protocol for players.////===================================================================*/InitSenderPlayer::FactoryHolder &InitSenderPlayer::factory(){ static FactoryHolder rval; return rval;}InitSenderPlayer::InitSenderPlayer( const Params & params, const boost::shared_ptr< InitSenderCommon > common ) : InitSender( params.M_transport, common ), M_serializer( params.M_serializer ), M_self( params.M_self ), M_stadium( params.M_stadium ){}InitSenderPlayer::~InitSenderPlayer(){}/*!//===================================================================//// CLASS: InitSenderPlayerV1//// DESC: version 1 of the init protocol.////===================================================================*/InitSenderPlayerV1::InitSenderPlayerV1( const Params & params ) : InitSenderPlayer( params, boost::shared_ptr< rcss::InitSenderCommon > ( new InitSenderCommonV1( params.M_transport, params.M_serializer, params.M_stadium, (unsigned int)params.M_self.version() ) ) ){}InitSenderPlayerV1::InitSenderPlayerV1( const Params& params, const boost::shared_ptr< InitSenderCommon > common ) : InitSenderPlayer( params, common ){}InitSenderPlayerV1::~InitSenderPlayerV1(){}voidInitSenderPlayerV1::sendInit(){ serializer().serializeInit( transport(), SideStr( self().side() ), self().unum(), stadium().playmode() ); transport() << std::ends << std::flush;}voidInitSenderPlayerV1::sendReconnect(){ // std::cerr << "Sending reconnect" << std::endl; // transport() << "test" << std::ends << std::flush; // std::cerr << "side = " << self().team->side << std::endl; // std::cerr << "mode = " << stadium().mode << std::endl; serializer().serializeReconnect( transport(), SideStr( self().side() ), stadium().playmode() ); transport() << std::ends << std::flush; // std::cerr << "Sent" << std::endl;}voidInitSenderPlayerV1::sendScore(){ int our_score = self().team()->point(); int opp_score = 0; if( self().side() == LEFT && stadium().teamRight().enabled() ) { opp_score = stadium().teamRight().point(); } else if( self().side() == RIGHT && stadium().teamLeft().enabled() ) { opp_score = stadium().teamLeft().point(); } serializer().serializeScore( transport(), stadium().time(), our_score, opp_score ); transport() << std::ends << std::flush;}voidInitSenderPlayerV1::sendChangedPlayers(){}/*!//===================================================================//// CLASS: InitSenderPlayerV7//// DESC: version 7 of the init protocol.////===================================================================*/InitSenderPlayerV7::InitSenderPlayerV7( const Params & params ) : InitSenderPlayerV1( params, boost::shared_ptr< rcss::InitSenderCommon > ( new InitSenderCommonV7( params.M_transport, params.M_serializer, params.M_stadium, (unsigned int)params.M_self.version() ) ) ){}InitSenderPlayerV7::InitSenderPlayerV7( const Params & params, const boost::shared_ptr< InitSenderCommon > common ) : InitSenderPlayerV1( params, common ){}InitSenderPlayerV7::~InitSenderPlayerV7(){}voidInitSenderPlayerV7::sendChangedPlayers(){ const Stadium::PlayerCont::const_iterator end = stadium().players().end(); for ( Stadium::PlayerCont::const_iterator p = stadium().players().begin(); p != end; ++p ) { if ( (*p)->playerTypeId() == 0 ) continue; if ( self().team() == (*p)->team() ) { serializer().serializeChangePlayer( transport(), (*p)->unum(), (*p)->playerTypeId() ); } else { serializer().serializeChangePlayer( transport(), (*p)->unum() ); } transport() << std::ends << std::flush; }}/*!//===================================================================//// CLASS: InitSenderPlayerV8//// DESC: version 8 of the init protocol.////===================================================================*/InitSenderPlayerV8::InitSenderPlayerV8( const Params & params ) : InitSenderPlayerV7( params, boost::shared_ptr< rcss::InitSenderCommon > ( new InitSenderCommonV8( params.M_transport, params.M_serializer, params.M_stadium, (unsigned int)params.M_self.version() ) ) ){}InitSenderPlayerV8::InitSenderPlayerV8( const Params& params, const boost::shared_ptr< InitSenderCommon > common ) : InitSenderPlayerV7( params, common ){}InitSenderPlayerV8::~InitSenderPlayerV8(){}/*!//===================================================================//// Register senders for different versions////===================================================================*/namespace initsender {template< typename Sender >InitSenderPlayer::Ptrcreate( const InitSenderPlayer::Params & params ){ return InitSenderPlayer::Ptr( new Sender( params ) );}RegHolder vp1 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV1 >, 1 );RegHolder vp2 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV1 >, 2 );RegHolder vp3 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV1 >, 3 );RegHolder vp4 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV1 >, 4 );RegHolder vp5 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV1 >, 5 );RegHolder vp6 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV1 >, 6 );RegHolder vp7 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV7 >, 7 );RegHolder vp8 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV8 >, 8 );RegHolder vp9 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV8 >, 9 );RegHolder vp10 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV8 >, 10 );RegHolder vp11 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV8 >, 11 );RegHolder vp12 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV8 >, 12 );RegHolder vp13 = InitSenderPlayer::factory().autoReg( &create< InitSenderPlayerV8 >, 13 );}}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?