An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/utility/visual/DddVis.cpp @ 6941

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

-visualisierungsänderungen

File size: 7.7 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 "DddVis.h"
40
41namespace ariba {
42namespace utility {
43
44const string DddVis::del = ":";
45use_logging_cpp(DddVis);
46
47DddVis::DddVis() : commandid(0) {
48        srand(time(NULL));
49}
50
51DddVis::~DddVis(){
52}
53
54void DddVis::sendMessage( const string msg, NETWORK_ID nid ) {
55        sendSocket( msg + "\n" );
56}
57
58long DddVis::getCommandID() {
59        return ++commandid;
60}
61
62long DddVis::getTimestamp() {
63        return 0; //time(NULL);
64}
65
66unsigned int DddVis::getNodeNumber(const NodeID& node){
67        NodeSet::iterator i = nodeSet.find(node);
68
69        if(i == nodeSet.end()){
70                unsigned int number = node.get(MAX_KEYLENGTH-16, 16);
71                nodeSet.insert(make_pair(node, number));
72                return number;
73        } else {
74                return i->second;
75        }
76}
77
78void DddVis::visCreate(
79                NETWORK_ID network,
80                NodeID& node,
81                string nodename,
82                string info
83){
84        //
85        // create layer first if not already done
86        //
87
88        if(layerSet.find(network) == layerSet.end()){
89
90                //
91                // create layer
92                //
93
94                {
95                        ostringstream out;
96                        out             << CREATE_LAYER_TYPE            << del
97                                        << getCommandID()                       << del
98                                        << getTimestamp()                       << del
99                                        << getNetworkName(network)      << del
100                                        << "null"                                       << del
101                                        << 0                                            << del;
102
103                        sendMessage( out.str(), network );
104                        layerSet.insert(network);
105                }
106
107                //
108                // set layer layout
109                //
110
111                {
112                        LayoutType layout = FORCE_LAYOUT;
113                        LayoutOrderStrategie order = ORDER_RANDOMLY;
114
115                        switch(network){
116                        case NETWORK_ID_BASE_COMMUNICATION:
117                                layout = FORCE_LAYOUT;
118                                order = ORDER_RANDOMLY;
119                                break;
120                        case NETWORK_ID_BASE_OVERLAY:
121                                layout = CIRCULAR_LAYOUT;
122                                order = ORDER_BY_ID;
123                                break;
124                        case NETWORK_ID_MCPO:
125                                layout = FORCE_LAYOUT;
126                                order = ORDER_RANDOMLY;
127                                break;
128                        default:
129                                break;
130                        }
131
132                        ostringstream out;
133                        out             << SET_CLUSTER_LAYOUT_TYPE      << del
134                                        << getCommandID()                       << del
135                                        << getTimestamp()                       << del
136                                        << getNetworkName(network)      << del
137                                        << 0                                            << del
138                                        << layout                                       << del
139                                        << order                                        << del;
140
141                        sendMessage( out.str(), network );
142                }
143
144        } // if(layerSet.find(network) == layerSet.end())
145
146        //
147        // create node
148        //
149
150        ostringstream out;
151        out     << CREATE_NODE_TYPE             << del
152                        << getCommandID()                       << del
153                        << getTimestamp()                       << del
154                        << getNetworkName(network)      << del
155                        << 0                                            << del
156                        << getNodeNumber(node)          << del
157                        << 0x00000000                           << del
158                        << "null"                                       << del;
159
160        sendMessage( out.str(), network );
161}
162
163void DddVis::visConnect(
164                NETWORK_ID network,
165                NodeID& srcnode,
166                NodeID& destnode,
167                string info
168){
169        // if we already have a link between the two nodes
170        // we just ignore the call and leave the old link
171
172        if( networkLinks.exists( network, NodePair(srcnode,destnode) )) return;
173
174        ostringstream out;
175        unsigned long edgekey = networkLinks.insert( network, NodePair(srcnode,destnode) );
176
177        out     << CREATE_EDGE_TYPE                     << del
178                        << getCommandID()                       << del
179                        << getTimestamp()                       << del
180                        << getNetworkName(network)      << del
181                        << 0                                            << del
182                        << getNodeNumber(srcnode)       << del
183                        << getNodeNumber(destnode)      << del
184                        << edgekey                                      << del
185                        << 0x00000000                           << del
186                        << "null"                                       << del;
187
188        sendMessage( out.str(), network );
189}
190
191void DddVis::visDisconnect(
192                NETWORK_ID network,
193                NodeID& srcnode,
194                NodeID& destnode,
195                string info
196){
197        if( !networkLinks.exists(network, NodePair(srcnode, destnode)) ) return;
198
199        unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
200        networkLinks.remove( network, NodePair(srcnode, destnode) );
201
202        ostringstream out;
203        out     << REMOVE_EDGE_TYPE             << del
204                << getCommandID()                       << del
205                << getTimestamp()                       << del
206                << getNetworkName(network)      << del
207                << edgekey                                      << del;
208
209        sendMessage( out.str(), network );
210}
211
212void DddVis::visShutdown(
213                NETWORK_ID network,
214                NodeID& node,
215                string info
216){
217        ostringstream out;
218
219        out     << REMOVE_NODE_TYPE             << del
220                << getCommandID()                       << del
221                << getTimestamp()                       << del
222                << getNetworkName(network)      << del
223                << getNodeNumber(node)          << del;
224
225        sendMessage( out.str(), network );
226}
227
228void DddVis::visChangeNodeColor (
229                NETWORK_ID network,
230                NodeID& node,
231                unsigned char r,
232                unsigned char g,
233                unsigned char b
234){
235        NodeSet::iterator i = colorSet.find(node);
236        unsigned int color = makeColor(r,g,b);
237
238        if( i == colorSet.end() ){
239                colorSet.insert(make_pair( node, color )); // color not set for node, set
240        }else{
241                if( i->second == color ) return; // color already set, ignore
242                else i->second = color;                  // new color, set
243        }
244
245        ostringstream out;
246        out     << SET_NODE_COLOR_TYPE          << del
247                        << getCommandID()                       << del
248                        << getTimestamp()                       << del
249                        << getNetworkName(network)      << del
250                        << getNodeNumber(node)          << del
251                        << makeColor(r, g, b)           << del;
252
253        sendMessage( out.str(), network );
254}
255
256int DddVis::makeColor(unsigned char r, unsigned char g, unsigned char b){
257        return ((r<<16)+(g<<8)+b);
258}
259
260void DddVis::visChangeNodeColor (
261                NETWORK_ID network,
262                NodeID& node,
263                NODE_COLORS color
264){
265        unsigned char r = 0;
266        unsigned char g = 0;
267        unsigned char b = 0;
268
269        switch( color ) {
270        case NODE_COLORS_GREY:  r = 128; g = 128; b = 128; break;
271        case NODE_COLORS_GREEN: r = 0;   g = 200; b = 0;   break;
272        case NODE_COLORS_RED:   r = 255; g = 0;   b = 0;   break;
273        }
274
275        visChangeNodeColor( network, node, r, g, b );
276}
277
278void DddVis::visChangeLinkColor (
279                NETWORK_ID network,
280                NodeID& srcnode,
281                NodeID& destnode,
282                unsigned char r,
283                unsigned char g,
284                unsigned char b
285){
286        ostringstream out;
287        unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
288
289        out     << SET_EDGE_COLOR_TYPE          << del
290                        << getCommandID()                       << del
291                        << getTimestamp()                       << del
292                        << getNetworkName(network)      << del
293                        << edgekey                                      << del
294                        << makeColor(r, g, b)           << del;
295
296        sendMessage( out.str(), network );
297}
298
299void DddVis::visChangeLinkColor (
300                NETWORK_ID network,
301                NodeID& srcnode,
302                NodeID& destnode,
303                NODE_COLORS color
304){
305        unsigned char r = 0;
306        unsigned char g = 0;
307        unsigned char b = 0;
308
309        switch( color ) {
310        case NODE_COLORS_GREY:  r = 128; g = 128; b = 128; break;
311        case NODE_COLORS_GREEN: r = 0;   g = 200; b = 0;   break;
312        case NODE_COLORS_RED:   r = 255; g = 0;   b = 0;   break;
313        }
314
315        visChangeLinkColor( network, srcnode, destnode, r, g, b );
316}
317
318}} // namespace ariba, common
Note: See TracBrowser for help on using the repository browser.