configDeserializer.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "configDeserializer.h"
00019
00020 #include "canvas.h"
00021 #include "config.h"
00022 #include "global.h"
00023 #include "layout.h"
00024 #include "nodeFactory.h"
00025 #include "view.h"
00026
00027 #include <eq/net/dataIStream.h>
00028 #include <eq/net/dataOStream.h>
00029
00030 namespace eq
00031 {
00032 void ConfigDeserializer::applyInstanceData( net::DataIStream& is )
00033 {
00034 is >> _config->_latency >> _config->_eyeBase;
00035
00036 NodeFactory* nodeFactory = Global::getNodeFactory();
00037
00038
00039 EQASSERT( _config->_canvases.empty( ));
00040 for( CanvasVector::const_iterator i = _config->_canvases.begin();
00041 i != _config->_canvases.end(); ++i )
00042 {
00043 Canvas* canvas = *i;
00044 canvas->deregister();
00045 nodeFactory->releaseCanvas( canvas );
00046 }
00047 _config->_canvases.clear();
00048
00049 EQASSERT( _config->_layouts.empty( ));
00050 for( LayoutVector::const_iterator i = _config->_layouts.begin();
00051 i != _config->_layouts.end(); ++i )
00052 {
00053 Layout* layout = *i;
00054 layout->deregister();
00055 nodeFactory->releaseLayout( layout );
00056 }
00057 _config->_layouts.clear();
00058
00059
00060 net::ObjectVector objects;
00061 Type type;
00062 for( is >> type; type != TYPE_LAST; is >> type )
00063 {
00064 uint32_t id;
00065 is >> id;
00066 EQASSERT( id != EQ_ID_INVALID );
00067
00068 switch( type )
00069 {
00070 case TYPE_OBSERVER:
00071 {
00072 Observer* observer = nodeFactory->createObserver();
00073 EQASSERT( observer );
00074 _config->_addObserver( observer );
00075
00076 EQCHECK( _config->mapObject( observer, id ));
00077 objects.push_back( observer );
00078 break;
00079 }
00080
00081 case TYPE_CANVAS:
00082 {
00083 Canvas* canvas = nodeFactory->createCanvas();
00084 EQASSERT( canvas );
00085 _config->_addCanvas( canvas );
00086
00087 EQCHECK( _config->mapObject( canvas, id ));
00088 objects.push_back( canvas );
00089 break;
00090 }
00091
00092 case TYPE_LAYOUT:
00093 {
00094 Layout* layout = nodeFactory->createLayout();
00095 EQASSERT( layout );
00096 _config->_addLayout( layout );
00097
00098 EQCHECK( _config->mapObject( layout, id ));
00099
00100 break;
00101 }
00102
00103 default:
00104 EQUNIMPLEMENTED;
00105 }
00106 }
00107
00108
00109
00110 for( net::ObjectVector::const_iterator i = objects.begin();
00111 i != objects.end(); ++i )
00112 {
00113 (*i)->becomeMaster();
00114 }
00115 }
00116
00117 }