initsendermonitor.cpp

来自「2009 ROBOCUP 仿真2DSERVER 源码」· C++ 代码 · 共 321 行

CPP
321
字号
// -*-c++-*-/***************************************************************************                             initsendermonitor.cpp               Classes for sending sense init messages for monitors                             -------------------    begin                : 2007-11-21    copyright            : (C) 2007 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 "initsendermonitor.h"#include "monitor.h"#include "field.h"#include "heteroplayer.h"#include "team.h"#include "serializermonitor.h"#ifdef HAVE_NETINET_IN_H#include <netinet/in.h>#endif#ifdef HAVE_WINDOWS_H#include <windows.h>#endifnamespace rcss {/*//===================================================================////  CLASS: InitSenderMonitor////===================================================================*/InitSenderMonitor::FactoryHolder &InitSenderMonitor::factory(){    static FactoryHolder rval;    return rval;}InitSenderMonitor::InitSenderMonitor( 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 ){}InitSenderMonitor::~InitSenderMonitor(){}/*//===================================================================////  CLASS: InitSenderMonitorV1////===================================================================*/InitSenderMonitorV1::InitSenderMonitorV1( const Params & params )    : InitSenderMonitor( params,                         boost::shared_ptr< InitSenderCommon >                         ( new InitSenderCommonV1( params.M_transport,                                                   params.M_serializer,                                                   params.M_stadium,                                                   1 ) ) ){}InitSenderMonitorV1::InitSenderMonitorV1( const Params & params,                                          const boost::shared_ptr< InitSenderCommon > common )    : InitSenderMonitor( params, common ){}InitSenderMonitorV1::~InitSenderMonitorV1(){}voidInitSenderMonitorV1::sendInit(){}voidInitSenderMonitorV1::sendServerParams(){}voidInitSenderMonitorV1::sendPlayerParams(){}voidInitSenderMonitorV1::sendPlayerTypes(){}voidInitSenderMonitorV1::sendChangedPlayers(){}voidInitSenderMonitorV1::sendScore(){}voidInitSenderMonitorV1::sendTeamGraphic(){}voidInitSenderMonitorV1::sendPlayMode(){}/*//===================================================================////  InitSenderMonitorV2////===================================================================*/InitSenderMonitorV2::InitSenderMonitorV2( const Params & params )    : InitSenderMonitorV1( params,                           boost::shared_ptr< InitSenderCommon >                           ( new InitSenderCommonV1( params.M_transport,                                                     params.M_serializer,                                                     params.M_stadium,                                                     2 ) ) ){}InitSenderMonitorV2::InitSenderMonitorV2( const Params & params,                                          const boost::shared_ptr< InitSenderCommon > common )    : InitSenderMonitorV1( params, common ){}InitSenderMonitorV2::~InitSenderMonitorV2(){}voidInitSenderMonitorV2::sendServerParams(){    dispinfo_t2 disp;    disp.mode = htons( PARAM_MODE );    disp.body.sparams = ServerParam::instance().convertToStruct();    transport().write( reinterpret_cast< const char * >( &disp ),                       sizeof( dispinfo_t2 ) );    transport() << std::flush;}voidInitSenderMonitorV2::sendPlayerParams(){    dispinfo_t2 disp;    disp.mode = htons( PPARAM_MODE );    disp.body.pparams = PlayerParam::instance().convertToStruct();    transport().write( reinterpret_cast< const char * >( &disp ),                       sizeof( dispinfo_t2 ) );    transport() << std::flush;}voidInitSenderMonitorV2::sendPlayerTypes(){    dispinfo_t2 disp;    disp.mode = htons( PT_MODE );    for ( int i = 0; i < PlayerParam::instance().playerTypes(); ++i )    {        const HeteroPlayer * p = stadium().playerType( i );        if ( p )        {            disp.body.ptinfo = p->convertToStruct( i );            transport().write( reinterpret_cast< const char * >( &disp ),                               sizeof( dispinfo_t2 ) );            transport() << std::flush;        }    }}/*//===================================================================////  InitSenderMonitorV3////===================================================================*/InitSenderMonitorV3::InitSenderMonitorV3( const Params & params )    : InitSenderMonitorV2( params,                         boost::shared_ptr< InitSenderCommon >                           ( new InitSenderCommonV8( params.M_transport,                                                     params.M_serializer,                                                     params.M_stadium,                                                     999 ) ) ){    // The version of the common sender has to be "8".    // The client version is "999" in order to send all parameters.}InitSenderMonitorV3::InitSenderMonitorV3( const Params & params,                                          const boost::shared_ptr< InitSenderCommon > common )    : InitSenderMonitorV2( params, common ){}InitSenderMonitorV3::~InitSenderMonitorV3(){}voidInitSenderMonitorV3::sendServerParams(){    commonSender().sendServerParams();}voidInitSenderMonitorV3::sendPlayerParams(){    commonSender().sendPlayerParams();}voidInitSenderMonitorV3::sendPlayerTypes(){    commonSender().sendPlayerTypes();}voidInitSenderMonitorV3::sendScore(){    serializer().serializeTeam( transport(),                                stadium().time(),                                stadium().teamLeft(),                                stadium().teamRight() );    transport() << std::ends << std::flush;}voidInitSenderMonitorV3::sendTeamGraphic(){    // TODO    // serializer.serializeTeamGraphic( transport(), ...}voidInitSenderMonitorV3::sendPlayMode(){    serializer().serializePlayMode( transport(),                                    stadium().time(),                                    stadium().playmode() );    transport() << std::ends << std::flush;}namespace initsender {template< typename Sender >InitSenderMonitor::Ptrcreate( const InitSenderMonitor::Params & params ){    return InitSenderMonitor::Ptr( new Sender( params ) );}RegHolder v1 = InitSenderMonitor::factory().autoReg( &create< InitSenderMonitorV1 >, 1 );RegHolder v2 = InitSenderMonitor::factory().autoReg( &create< InitSenderMonitorV2 >, 2 );RegHolder v3 = InitSenderMonitor::factory().autoReg( &create< InitSenderMonitorV3 >, 3 );RegHolder v4 = InitSenderMonitor::factory().autoReg( &create< InitSenderMonitorV3 >, 4 );}}

⌨️ 快捷键说明

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