staticSlaveCM.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "staticSlaveCM.h"
00019
00020 #include "command.h"
00021 #include "commands.h"
00022 #include "log.h"
00023 #include "object.h"
00024 #include "objectInstanceDataIStream.h"
00025 #include "session.h"
00026
00027 #include <eq/base/scopedMutex.h>
00028
00029 using namespace eq::base;
00030 using namespace std;
00031
00032 namespace eq
00033 {
00034 namespace net
00035 {
00036 StaticSlaveCM::StaticSlaveCM( Object* object )
00037 : _object( object )
00038 , _currentIStream( new ObjectInstanceDataIStream )
00039 {
00040 registerCommand( CMD_OBJECT_INSTANCE_DATA,
00041 CommandFunc<StaticSlaveCM>( this, &StaticSlaveCM::_cmdInstanceData ),
00042 0 );
00043 registerCommand( CMD_OBJECT_INSTANCE,
00044 CommandFunc<StaticSlaveCM>( this, &StaticSlaveCM::_cmdInstance ),
00045 0 );
00046 }
00047
00048 StaticSlaveCM::~StaticSlaveCM()
00049 {
00050 delete _currentIStream;
00051 _currentIStream = 0;
00052 }
00053
00054
00055
00056
00057 CommandResult StaticSlaveCM::_cmdInstanceData( Command& command )
00058 {
00059 EQASSERT( _currentIStream );
00060 _currentIStream->addDataPacket( command );
00061 return eq::net::COMMAND_HANDLED;
00062 }
00063
00064 CommandResult StaticSlaveCM::_cmdInstance( Command& command )
00065 {
00066 EQASSERT( _currentIStream );
00067 _currentIStream->addDataPacket( command );
00068
00069 const ObjectInstancePacket* packet =
00070 command.getPacket<ObjectInstancePacket>();
00071 _currentIStream->setVersion( packet->version );
00072
00073 EQLOG( LOG_OBJECTS ) << "id " << _object->getID() << "."
00074 << _object->getInstanceID() << " ready" << endl;
00075 return eq::net::COMMAND_HANDLED;
00076 }
00077
00078 void StaticSlaveCM::applyMapData()
00079 {
00080 EQASSERT( _currentIStream );
00081 _currentIStream->waitReady();
00082
00083 _object->applyInstanceData( *_currentIStream );
00084
00085 delete _currentIStream;
00086 _currentIStream = 0;
00087
00088 EQLOG( LOG_OBJECTS ) << "Mapped initial data for " << _object->getID()
00089 << "." << _object->getInstanceID() << " ready" << endl;
00090 }
00091
00092 }
00093 }