Changeset 62


Ignore:
Timestamp:
Jun 8, 2010, 9:39:17 AM (14 years ago)
Author:
Torben Dannhauer
Message:
 
Location:
osgVisual
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • osgVisual/include/cluster/dataIO_clusterAsioTcpIostream.h

    r59 r62  
    1818#include "dataIO_cluster.h"
    1919
     20#include <osg/notify>
     21#include <osg/ArgumentParser>
     22
     23#include <iostream>
     24#include <string>
     25#include <vector>
     26#include <boost/asio.hpp>
     27#include <boost/date_time/posix_time/posix_time.hpp>
     28
     29
    2030namespace osgVisual
    2131{
    2232
    23 class dataIO_clusterAsioTcpIostream : public dataIO_cluster
     33/**
     34 * \brief This is a Boost ASIO iostream implementation of dataIO_cluster..
     35 *
     36 * This class uses Boost ASIO and it iostream privider to fullfil the functions of dataIO_cluster.
     37 * It sends the clusterdata into the network to any connected client.
     38 *
     39 *
     40 * \todo Add getHorizonColor to transport it to slave for consistent fog.
     41 * @author Torben Dannhauer
     42 * @date  May 2010
     43 */
     44class dataIO_clusterAsioTcpIostream :   public dataIO_cluster
    2445{
     46
    2547public:
     48
    2649        dataIO_clusterAsioTcpIostream();
    27         virtual ~dataIO_clusterAsioTcpIostream(void);
     50        virtual ~dataIO_clusterAsioTcpIostream();
    2851
    29         virtual void init( osg::ArgumentParser& arguments_, clustermode clusterMode_, osgVisual::dataIO_transportContainer* sendContainer_, bool compressionEnabled_, bool asAscii_ );
    30         virtual void shutdown();
    31         virtual bool sendTO_OBJvaluesToSlaves() ;
    32         virtual bool readTO_OBJvaluesFromMaster();
    33         virtual void reportAsReadyToSwap();
    34         virtual bool waitForSwap();
    35         virtual bool waitForAllReadyToSwap();
    36         virtual bool sendSwapCommand();
     52        void init( osg::ArgumentParser& arguments_, clustermode clusterMode_, osgVisual::dataIO_transportContainer* sendContainer_, bool compressionEnabled_, bool asAscii_ );
     53        void shutdown();
     54        bool sendTO_OBJvaluesToSlaves();
     55        bool readTO_OBJvaluesFromMaster();
     56        void reportAsReadyToSwap();
     57        bool waitForSwap();
     58        bool waitForAllReadyToSwap();
     59        bool sendSwapCommand();
     60
     61private:
     62        osgVisual::dataIO_cluster::clustermode clusterMode;
     63        bool initialized;
     64        int port;       // Defaults to 5678
     65       
     66        /**
     67         * This list contains the connections to communicate with in each frame.
     68         *
     69         * As slave, contains only one entry: connection to master.
     70         * As Master,contains the connection to all slaves which use this connection.
     71         */
     72        std::vector<boost::asio::ip::tcp::iostream> clientlists;
     73
     74        boost::asio::io_service io_service;
    3775};
    3876
    39 }       // END Namespace
     77}       // END NAMESPACE
  • osgVisual/src/cluster/dataIO_clusterAsioTcpIostream.cpp

    r59 r62  
    1515*/
    1616
    17 #include "..\..\include\cluster\dataIO_clusterAsioTcpIostream.h"
     17#include "dataIO_clusterAsioTcpIostream.h"
    1818
    1919using namespace osgVisual;
    2020
    21 dataIO_clusterAsioTcpIostream::dataIO_clusterAsioTcpIostream()
     21using boost::asio::ip::tcp;
     22
     23dataIO_clusterAsioTcpIostream::dataIO_clusterAsioTcpIostream()
    2224{
    23         OSG_NOTIFY( osg::ALWAYS ) << "clusterAsioTcpIostream constructed" << std::endl;
     25        OSG_NOTIFY(osg::ALWAYS) << "dataIO_clusterAsioTcpIostream constructed" << std::endl;
     26
     27        port = 5678;
     28        initialized = false;
    2429}
    2530
    26 dataIO_clusterAsioTcpIostream::~dataIO_clusterAsioTcpIostream(void)
     31dataIO_clusterAsioTcpIostream::~dataIO_clusterAsioTcpIostream()
    2732{
    28         OSG_NOTIFY( osg::ALWAYS ) << "clusterAsioTcpIostream destructed" << std::endl;
     33        OSG_NOTIFY(osg::ALWAYS) << "dataIO_clusterAsioTcpIostream destructed" << std::endl;
    2934}
    3035
    3136void dataIO_clusterAsioTcpIostream::init( osg::ArgumentParser& arguments_, clustermode clusterMode_, osgVisual::dataIO_transportContainer* sendContainer_, bool compressionEnabled_, bool asAscii_ )
    3237{
    33         OSG_NOTIFY( osg::ALWAYS ) << "clusterAsioTcpIostream init()" << std::endl;
     38        OSG_NOTIFY(osg::ALWAYS) << "dataIO_clusterAsioTcpIostream initialized" << std::endl;
     39
     40        clusterMode = clusterMode_;
     41
     42        if(clusterMode == osgVisual::dataIO_cluster::MASTER)
     43        {
     44               
     45
     46                tcp::endpoint endpoint(tcp::v4(), port);
     47                tcp::acceptor acceptor(io_service, endpoint);
     48
     49                                                                                tcp::iostream stream;
     50                                                                       
     51                                                                                acceptor.accept(*stream.rdbuf());
     52                                                                                tcp::no_delay option(true);
     53                                                                                boost::system::error_code ec;
     54                                                                                stream.rdbuf()->set_option(option, ec);
     55                                                                                if (ec)
     56                                                                                {
     57                                                                                        OSG_NOTIFY(osg::WARN) << "Error: Unable to set TCP_NODELAY option" << ec << std::endl;
     58                                                                                        // An error occurred.
     59                                                                                }
     60        }
     61
     62        if(clusterMode == osgVisual::dataIO_cluster::SLAVE)
     63        {
     64
     65        }
     66
     67        initialized = true;
    3468}
    3569
    3670void dataIO_clusterAsioTcpIostream::shutdown()
    3771{
    38         OSG_NOTIFY( osg::ALWAYS ) << "clusterAsioTcpIostream shutdown()" << std::endl;
     72        OSG_NOTIFY(osg::ALWAYS) << "dataIO_clusterAsioTcpIostream shut down" << std::endl;
     73
     74        if(initialized)
     75        {
     76
     77        }
    3978}
    4079
    4180bool dataIO_clusterAsioTcpIostream::sendTO_OBJvaluesToSlaves()
    4281{
    43         OSG_NOTIFY( osg::INFO ) << "clusterAsioTcpIostream sendTO_OBJvaluesToSlaves()" << std::endl;
     82        OSG_NOTIFY(osg::INFO) << "dataIO_clusterAsioTcpIostream::sendTO_OBJvaluesToSlaves()" << std::endl;
     83
    4484        return true;
    4585}
     
    4787bool dataIO_clusterAsioTcpIostream::readTO_OBJvaluesFromMaster()
    4888{
    49         OSG_NOTIFY( osg::INFO ) << "clusterAsioTcpIostream readTO_OBJvaluesFromMaster()" << std::endl;
     89        OSG_NOTIFY(osg::INFO) << "dataIO_clusterAsioTcpIostream::readTO_OBJvaluesFromMaster()" << std::endl;
    5090
    5191        return true;
     
    5494void dataIO_clusterAsioTcpIostream::reportAsReadyToSwap()
    5595{
    56         OSG_NOTIFY( osg::INFO ) << "clusterAsioTcpIostream reportAsReadyToSwap()" << std::endl;
     96        OSG_NOTIFY(osg::INFO) << "dataIO_clusterAsioTcpIostream::reportAsReadyToSwap()" << std::endl;
    5797}
    5898
    5999bool dataIO_clusterAsioTcpIostream::waitForSwap()
    60100{
    61         OSG_NOTIFY( osg::INFO ) << "clusterAsioTcpIostream waitForSwap()" << std::endl;
     101        OSG_NOTIFY(osg::INFO) << "dataIO_clusterAsioTcpIostream::waitForAllReadyToSwap()" << std::endl;
     102
    62103        return true;
    63104}
     
    65106bool dataIO_clusterAsioTcpIostream::waitForAllReadyToSwap()
    66107{
    67         OSG_NOTIFY( osg::INFO ) << "clusterAsioTcpIostream waitForAllReadyToSwap()" << std::endl;
     108        OSG_NOTIFY(osg::INFO) << "dataIO_clusterAsioTcpIostream::waitForAllReadyToSwap()" << std::endl;
     109
    68110        return true;
    69111}
     
    71113bool dataIO_clusterAsioTcpIostream::sendSwapCommand()
    72114{
    73         OSG_NOTIFY( osg::INFO ) << "clusterAsioTcpIostream sendSwapCommand()" << std::endl;
     115        OSG_NOTIFY(osg::INFO) << "dataIO_clusterAsioTcpIostream::sendSwapCommand()" << std::endl;
     116
    74117        return true;
    75118}
Note: See TracChangeset for help on using the changeset viewer.