⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initsenderlogger.cpp

📁 2009 ROBOCUP 仿真2DSERVER 源码
💻 CPP
字号:
// -*-c++-*-/***************************************************************************                             initsenderlogger.cpp               Classes for writing init messages for logger                             -------------------    begin                : 2008-02-16    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 "initsenderlogger.h"#include "logger.h"#include "serializermonitor.h"#include "types.h"#include "field.h"#include "team.h"#include "serverparam.h"#include "playerparam.h"#include "heteroplayer.h"#ifdef HAVE_NETINET_IN_H#include <netinet/in.h>#endif#ifdef HAVE_WINDOWS_H#include <windows.h>#endifnamespace rcss {/*//===================================================================////  CLASS: InitSenderLogger////===================================================================*/InitSenderLogger::FactoryHolder &InitSenderLogger::factory(){    static FactoryHolder rval;    return rval;}InitSenderLogger::InitSenderLogger( 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 ){}InitSenderLogger::~InitSenderLogger(){}/*//===================================================================////  CLASS: InitSenderLoggerV1////===================================================================*/InitSenderLoggerV1::InitSenderLoggerV1( const Params & params )    : InitSenderLogger( params,                        boost::shared_ptr< InitSenderCommon >                        ( new InitSenderCommonV1( params.M_transport,                                                  params.M_serializer,                                                  params.M_stadium,                                                  1 ) ) ){}InitSenderLoggerV1::InitSenderLoggerV1( const Params & params,                                        const boost::shared_ptr< InitSenderCommon > common )    : InitSenderLogger( params, common ){}InitSenderLoggerV1::~InitSenderLoggerV1(){}voidInitSenderLoggerV1::sendHeader(){}voidInitSenderLoggerV1::sendServerParams(){}voidInitSenderLoggerV1::sendPlayerParams(){}voidInitSenderLoggerV1::sendPlayerTypes(){}voidInitSenderLoggerV1::sendPlayMode(){}voidInitSenderLoggerV1::sendTeam(){}/*//===================================================================////  CLASS: InitSenderLoggerV2////===================================================================*/InitSenderLoggerV2::InitSenderLoggerV2( const Params & params )    : InitSenderLoggerV1( params,                          boost::shared_ptr< InitSenderCommon >                          ( new InitSenderCommonV1( params.M_transport,                                                    params.M_serializer,                                                    params.M_stadium,                                                    1 ) ) ){}InitSenderLoggerV2::InitSenderLoggerV2( const Params & params,                                        const boost::shared_ptr< InitSenderCommon > common )    : InitSenderLoggerV1( params, common ){}InitSenderLoggerV2::~InitSenderLoggerV2(){}voidInitSenderLoggerV2::sendHeader(){    char header[5];    header[0] = 'U';    header[1] = 'L';    header[2] = 'G';    header[3] = static_cast< char >( 2 );    transport().write( header, 4 );}voidInitSenderLoggerV2::sendServerParams(){}voidInitSenderLoggerV2::sendPlayerParams(){}voidInitSenderLoggerV2::sendPlayerTypes(){}voidInitSenderLoggerV2::sendPlayMode(){}voidInitSenderLoggerV2::sendTeam(){}/*//===================================================================////  InitSenderLoggerV3////===================================================================*/InitSenderLoggerV3::InitSenderLoggerV3( const Params & params )    : InitSenderLoggerV2( params,                          boost::shared_ptr< InitSenderCommon >                          ( new InitSenderCommonV1( params.M_transport,                                                    params.M_serializer,                                                    params.M_stadium,                                                    1 ) ) ){}InitSenderLoggerV3::InitSenderLoggerV3( const Params & params,                                        const boost::shared_ptr< InitSenderCommon > common )    : InitSenderLoggerV2( params, common ){}InitSenderLoggerV3::~InitSenderLoggerV3(){}voidInitSenderLoggerV3::sendHeader(){    char header[5];    header[0] = 'U';    header[1] = 'L';    header[2] = 'G';    header[3] = static_cast< char >( REC_VERSION_3 );    transport().write( header, 4 );}voidInitSenderLoggerV3::sendServerParams(){    Int16 mode = htons( PARAM_MODE );    server_params_t param = ServerParam::instance().convertToStruct();    transport().write( reinterpret_cast< const char * >( &mode ),                       sizeof( mode ) );    transport().write( reinterpret_cast< const char * >( &param ),                       sizeof( param ) );}voidInitSenderLoggerV3::sendPlayerParams(){    Int16 mode = htons( PPARAM_MODE );    player_params_t param = PlayerParam::instance().convertToStruct();    transport().write( reinterpret_cast< const char * >( &mode ),                       sizeof( mode ) );    transport().write( reinterpret_cast< const char * >( &param ),                       sizeof( param ) );}voidInitSenderLoggerV3::sendPlayerTypes(){    Int16 mode = htons( PT_MODE );    for ( int i = 0; i < PlayerParam::instance().playerTypes(); ++i )    {        const HeteroPlayer * p = stadium().playerType( i );        if ( p )        {            player_type_t param = p->convertToStruct( i );            transport().write( reinterpret_cast< const char * >( &mode ),                               sizeof( mode ) );            transport().write( reinterpret_cast< const char * >( &param ),                               sizeof( param ) );        }    }}voidInitSenderLoggerV3::sendPlayMode(){    Int16 mode = htons( PM_MODE );    char pm = static_cast< char >( stadium().playmode() );    transport().write( reinterpret_cast< const char * >( &mode ),                       sizeof( mode ) );    transport().write( reinterpret_cast< const char * >( &pm ),                       sizeof( char ) );}voidInitSenderLoggerV3::sendTeam(){    Int16 mode = htons( TEAM_MODE );    team_t teams[2];    std::strncpy( teams[0].name,                  stadium().teamLeft().name().c_str(),                  std::min( stadium().teamLeft().name().length() + 1, size_t( 16 ) ) );    teams[0].score = htons( stadium().teamLeft().point() );    std::strncpy( teams[1].name,                  stadium().teamRight().name().c_str(),                  std::min( stadium().teamRight().name().length() + 1, size_t( 16 ) ) );    teams[1].score = htons( stadium().teamRight().point() );    transport().write( reinterpret_cast< const char * >( &mode ),                       sizeof( mode ) );    transport().write( reinterpret_cast< const char * >( teams ),                       sizeof( team_t ) * 2 );}/*//===================================================================////  InitSenderLoggerV4////===================================================================*/InitSenderLoggerV4::InitSenderLoggerV4( const Params & params )    : InitSenderLoggerV3( params,                          boost::shared_ptr< InitSenderCommon >                          ( new InitSenderCommonV8( params.M_transport,                                                    params.M_serializer,                                                    params.M_stadium,                                                    999,  // accept all parameters                                                    true ) ) ) // new line{    // The version of the common sender has to be "8".    // The client version is set to "999" in order to send all parameters.}InitSenderLoggerV4::InitSenderLoggerV4( const Params & params,                                        const boost::shared_ptr< InitSenderCommon > common )    : InitSenderLoggerV3( params, common ){}InitSenderLoggerV4::~InitSenderLoggerV4(){}voidInitSenderLoggerV4::sendHeader(){    transport() << "ULG4" << std::endl;}voidInitSenderLoggerV4::sendServerParams(){    commonSender().sendServerParams();}voidInitSenderLoggerV4::sendPlayerParams(){    commonSender().sendPlayerParams();}voidInitSenderLoggerV4::sendPlayerTypes(){    commonSender().sendPlayerTypes();}voidInitSenderLoggerV4::sendPlayMode(){    serializer().serializePlayMode( transport(),                                    stadium().time(),                                    stadium().playmode() );    transport() << std::endl;}voidInitSenderLoggerV4::sendTeam(){    serializer().serializeTeam( transport(),                                stadium().time(),                                stadium().teamLeft(),                                stadium().teamRight() );    transport() << std::endl;}/*//===================================================================////  InitSenderLoggerV5////===================================================================*/InitSenderLoggerV5::InitSenderLoggerV5( const Params & params )    : InitSenderLoggerV4( params,                          boost::shared_ptr< InitSenderCommon >                          ( new InitSenderCommonV8( params.M_transport,                                                    params.M_serializer,                                                    params.M_stadium,                                                    999,  // accept all parameters                                                    true ) ) ) // new line{    // The version of the common sender has to be "8".    // The client version is set to "999" in order to send all parameters.}InitSenderLoggerV5::InitSenderLoggerV5( const Params & params,                                        const boost::shared_ptr< InitSenderCommon > common )    : InitSenderLoggerV4( params, common ){}InitSenderLoggerV5::~InitSenderLoggerV5(){}voidInitSenderLoggerV5::sendHeader(){    transport() << "ULG5" << std::endl;}namespace initsender {template< typename Sender >InitSenderLogger::Ptrcreate( const InitSenderLogger::Params & params ){    return InitSenderLogger::Ptr( new Sender( params ) );}RegHolder vl1 = InitSenderLogger::factory().autoReg( &create< InitSenderLoggerV1 >, 1 );RegHolder vl2 = InitSenderLogger::factory().autoReg( &create< InitSenderLoggerV2 >, 2 );RegHolder vl3 = InitSenderLogger::factory().autoReg( &create< InitSenderLoggerV3 >, 3 );RegHolder vl4 = InitSenderLogger::factory().autoReg( &create< InitSenderLoggerV4 >, 4 );RegHolder vl5 = InitSenderLogger::factory().autoReg( &create< InitSenderLoggerV5 >, 5 );}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -