An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/utility/visual/ServerVis.cpp @ 7468

Last change on this file since 7468 was 6954, checked in by Christoph Mayer, 14 years ago

-small visualization enhancements

File size: 4.1 KB
Line 
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
41namespace ariba {
42namespace utility {
43
44use_logging_cpp(ServerVis);
45unsigned int ServerVis::nodecolor = 0;
46
47typedef 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
58string 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
72void 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
104ServerVis::ServerVis() : socket(io_service), socketOpened(false) {
105}
106
107ServerVis::~ServerVis(){
108        socket.close();
109}
110
111void 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
Note: See TracBrowser for help on using the repository browser.