| 1 | // [License]
 | 
|---|
| 2 | // The Ariba-Underlay Copyright
 | 
|---|
| 3 | //
 | 
|---|
| 4 | // Copyright (c) 2008-2009, Institute of Telematics, UniversitÀt Karlsruhe (TH)
 | 
|---|
| 5 | //
 | 
|---|
| 6 | // Institute of Telematics
 | 
|---|
| 7 | // UniversitÀt Karlsruhe (TH)
 | 
|---|
| 8 | // Zirkel 2, 76128 Karlsruhe
 | 
|---|
| 9 | // Germany
 | 
|---|
| 10 | //
 | 
|---|
| 11 | // Redistribution and use in source and binary forms, with or without
 | 
|---|
| 12 | // modification, are permitted provided that the following conditions are
 | 
|---|
| 13 | // met:
 | 
|---|
| 14 | //
 | 
|---|
| 15 | // 1. Redistributions of source code must retain the above copyright
 | 
|---|
| 16 | // notice, this list of conditions and the following disclaimer.
 | 
|---|
| 17 | // 2. Redistributions in binary form must reproduce the above copyright
 | 
|---|
| 18 | // notice, this list of conditions and the following disclaimer in the
 | 
|---|
| 19 | // documentation and/or other materials provided with the distribution.
 | 
|---|
| 20 | //
 | 
|---|
| 21 | // THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
 | 
|---|
| 22 | // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
|---|
| 23 | // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
|---|
| 24 | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
 | 
|---|
| 25 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
|---|
| 26 | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
|---|
| 27 | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
|---|
| 28 | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
|---|
| 29 | // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
|---|
| 30 | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
|---|
| 31 | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
|---|
| 32 | //
 | 
|---|
| 33 | // The views and conclusions contained in the software and documentation
 | 
|---|
| 34 | // are those of the authors and should not be interpreted as representing
 | 
|---|
| 35 | // official policies, either expressed or implied, of the Institute of
 | 
|---|
| 36 | // Telematics.
 | 
|---|
| 37 | // [License]
 | 
|---|
| 38 | 
 | 
|---|
| 39 | #include "ServerVis.h"
 | 
|---|
| 40 | 
 | 
|---|
| 41 | namespace ariba {
 | 
|---|
| 42 | namespace utility {
 | 
|---|
| 43 | 
 | 
|---|
| 44 | use_logging_cpp(ServerVis);
 | 
|---|
| 45 | unsigned int ServerVis::nodecolor = 0;
 | 
|---|
| 46 | 
 | 
|---|
| 47 | typedef enum _NETWORK_ID {
 | 
|---|
| 48 |         NETWORK_ID_BASE_COMMUNICATION   = 1,
 | 
|---|
| 49 |                         NETWORK_ID_BASE_OVERLAY                 = 2,
 | 
|---|
| 50 |                         NETWORK_ID_EONSON                               = 3,
 | 
|---|
| 51 |                         NETWORK_ID_MCPO                                 = 4,
 | 
|---|
| 52 |                         NETWORK_ID_CLIO                                 = 5,
 | 
|---|
| 53 |                         NETWORK_ID_VIDEOSTREAM                  = 6,
 | 
|---|
| 54 |                         NETWORK_ID_GAME                                 = 7,
 | 
|---|
| 55 |                         NETWORK_ID_SECURITY                     = 8,
 | 
|---|
| 56 | } NETWORK_ID;
 | 
|---|
| 57 | 
 | 
|---|
| 58 | string ServerVis::getNetworkName(NETWORK_ID network) const {
 | 
|---|
| 59 |         switch(network){
 | 
|---|
| 60 |                 case NETWORK_ID_BASE_COMMUNICATION      : return "BaseCommunication";
 | 
|---|
| 61 |                 case NETWORK_ID_BASE_OVERLAY            : return "BaseOverlay";
 | 
|---|
| 62 |                 case NETWORK_ID_EONSON                          : return "Eonson";
 | 
|---|
| 63 |                 case NETWORK_ID_MCPO                            : return "MCPO";
 | 
|---|
| 64 |                 case NETWORK_ID_CLIO                            : return "CLIO";
 | 
|---|
| 65 |                 case NETWORK_ID_VIDEOSTREAM             : return "Video";
 | 
|---|
| 66 |                 case NETWORK_ID_GAME                            : return "Game";
 | 
|---|
| 67 |                 case NETWORK_ID_SECURITY                        : return "Security";
 | 
|---|
| 68 |                 default                                                         : return "<undefined>";
 | 
|---|
| 69 |         }
 | 
|---|
| 70 | }
 | 
|---|
| 71 | 
 | 
|---|
| 72 | void ServerVis::configure(string ip, unsigned int port, unsigned int _color){
 | 
|---|
| 73 |         nodecolor = _color;
 | 
|---|
| 74 |         if( ip.length() == 0 ) return;
 | 
|---|
| 75 | 
 | 
|---|
| 76 |         ostringstream sport;
 | 
|---|
| 77 |         sport << port;
 | 
|---|
| 78 |         logging_debug( "connecting to visualization server " << ip << " on " << sport.str());
 | 
|---|
| 79 | 
 | 
|---|
| 80 |         tcp::resolver resolver(io_service);
 | 
|---|
| 81 |         tcp::resolver::query query(
 | 
|---|
| 82 |                         ip, sport.str(),
 | 
|---|
| 83 |                         tcp::resolver::query::passive |
 | 
|---|
| 84 |                         tcp::resolver::query::address_configured |
 | 
|---|
| 85 |                         tcp::resolver::query::numeric_service);
 | 
|---|
| 86 | 
 | 
|---|
| 87 |         tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
 | 
|---|
| 88 |         tcp::resolver::iterator end;
 | 
|---|
| 89 | 
 | 
|---|
| 90 |         boost::system::error_code error = boost::asio::error::host_not_found;
 | 
|---|
| 91 |         while (error && endpoint_iterator != end){
 | 
|---|
| 92 |                 socket.close();
 | 
|---|
| 93 |                 socket.connect(*endpoint_iterator++, error);
 | 
|---|
| 94 |         }
 | 
|---|
| 95 | 
 | 
|---|
| 96 |         if (error){
 | 
|---|
| 97 |                 logging_warn( "visualization could not connect to visualization server" );
 | 
|---|
| 98 |         } else {
 | 
|---|
| 99 |                 logging_info( "connected to visualization server on " << ip << ":" << port );
 | 
|---|
| 100 |                 socketOpened = true;
 | 
|---|
| 101 |         }
 | 
|---|
| 102 | }
 | 
|---|
| 103 | 
 | 
|---|
| 104 | ServerVis::ServerVis() : socket(io_service), socketOpened(false) {
 | 
|---|
| 105 | }
 | 
|---|
| 106 | 
 | 
|---|
| 107 | ServerVis::~ServerVis(){
 | 
|---|
| 108 |         socket.close();
 | 
|---|
| 109 | }
 | 
|---|
| 110 | 
 | 
|---|
| 111 | void ServerVis::sendSocket(const string& msg){
 | 
|---|
| 112 |         if( socket.is_open()==false || socketOpened==false ) return;
 | 
|---|
| 113 |         logging_debug("sending visual command: " << msg);
 | 
|---|
| 114 | 
 | 
|---|
| 115 |         try{
 | 
|---|
| 116 |                 socket.send( boost::asio::buffer(msg) );
 | 
|---|
| 117 |         }catch( std::exception& e ){
 | 
|---|
| 118 |                 logging_warn("visual connection failed");
 | 
|---|
| 119 |                 socket.close();
 | 
|---|
| 120 |                 socketOpened = false;
 | 
|---|
| 121 |         }
 | 
|---|
| 122 | }
 | 
|---|
| 123 | 
 | 
|---|
| 124 | }} // namespace ariba, common
 | 
|---|