An Overlay-based
Virtual Network Substrate
SpoVNet

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

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

-ovlvis verschoben und 3dvis hinzu

File size: 7.3 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                                        << 0                                            << del;
101
102                        sendMessage( out.str(), network );
103                        layerSet.insert(network);
104                }
105
106                //
107                // set layer layout
108                //
109
110                {
111                        LayoutType layout = FORCE_LAYOUT;
112                        LayoutOrderStrategie order = ORDER_RANDOMLY;
113
114                        switch(network){
115                        case NETWORK_ID_BASE_COMMUNICATION:
116                                layout = FORCE_LAYOUT;
117                                order = ORDER_RANDOMLY;
118                                break;
119                        case NETWORK_ID_BASE_OVERLAY:
120                                layout = CIRCULAR_LAYOUT;
121                                order = ORDER_BY_ID;
122                                break;
123                        case NETWORK_ID_MCPO:
124                                layout = FORCE_LAYOUT;
125                                order = ORDER_RANDOMLY;
126                                break;
127                        }
128
129                        ostringstream out;
130                        out             << SET_CLUSTER_LAYOUT_TYPE      << del
131                                        << getCommandID()                       << del
132                                        << getTimestamp()                       << del
133                                        << getNetworkName(network)      << del
134                                        << 0                                            << del
135                                        << layout                                       << del
136                                        << order                                        << del;
137
138                        sendMessage( out.str(), network );
139                }
140
141        } // if(layerSet.find(network) == layerSet.end())
142
143        //
144        // create node
145        //
146
147        ostringstream out;
148        out     << CREATE_NODE_TYPE             << del
149                        << getCommandID()                       << del
150                        << getTimestamp()                       << del
151                        << getNetworkName(network)      << del
152                        << 0                                            << del
153                        << getNodeNumber(node)          << del
154                        << 0x00000000                           << del
155                        << "null"                                       << del;
156
157        sendMessage( out.str(), network );
158}
159
160void DddVis::visConnect(
161                NETWORK_ID network,
162                NodeID& srcnode,
163                NodeID& destnode,
164                string info
165){
166        // if we already have a link between the two nodes
167        // we just ignore the call and leave the old link
168
169        if( networkLinks.exists( network, NodePair(srcnode,destnode) )) return;
170
171        ostringstream out;
172        unsigned long edgekey = networkLinks.insert( network, NodePair(srcnode,destnode) );
173
174        out     << CREATE_EDGE_TYPE                     << del
175                        << getCommandID()                       << del
176                        << getTimestamp()                       << del
177                        << getNetworkName(network)      << del
178                        << 0                                            << del
179                        << getNodeNumber(srcnode)       << del
180                        << getNodeNumber(destnode)      << del
181                        << edgekey                                      << del
182                        << 0x00000000                           << del
183                        << "null"                                       << del;
184
185        sendMessage( out.str(), network );
186}
187
188void DddVis::visDisconnect(
189                NETWORK_ID network,
190                NodeID& srcnode,
191                NodeID& destnode,
192                string info
193){
194        if( !networkLinks.exists(network, NodePair(srcnode, destnode)) ) return;
195
196        unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
197        networkLinks.remove( network, NodePair(srcnode, destnode) );
198
199        ostringstream out;
200        out     << REMOVE_EDGE_TYPE             << del
201                << getCommandID()                       << del
202                << getTimestamp()                       << del
203                << getNetworkName(network)      << del
204                << edgekey                                      << del;
205
206        sendMessage( out.str(), network );
207}
208
209void DddVis::visShutdown(
210                NETWORK_ID network,
211                NodeID& node,
212                string info
213){
214        ostringstream out;
215
216        out     << REMOVE_NODE_TYPE             << del
217                << getCommandID()                       << del
218                << getTimestamp()                       << del
219                << getNetworkName(network)      << del
220                << getNodeNumber(node)          << del;
221
222        sendMessage( out.str(), network );
223}
224
225void DddVis::visChangeNodeColor (
226                NETWORK_ID network,
227                NodeID& node,
228                unsigned char r,
229                unsigned char g,
230                unsigned char b
231){
232        ostringstream out;
233
234        out     << SET_NODE_COLOR_TYPE          << del
235                        << getCommandID()                       << del
236                        << getTimestamp()                       << del
237                        << getNetworkName(network)      << del
238                        << getNodeNumber(node)          << del
239                        << makeColor(r, g, b)           << del;
240
241        sendMessage( out.str(), network );
242}
243
244int DddVis::makeColor(unsigned char r, unsigned char g, unsigned char b){
245        return ((r<<16)+(g<<8)+b);
246}
247
248void DddVis::visChangeNodeColor (
249                NETWORK_ID network,
250                NodeID& node,
251                NODE_COLORS color
252){
253        unsigned char r = 0;
254        unsigned char g = 0;
255        unsigned char b = 0;
256
257        switch( color ) {
258        case NODE_COLORS_GREY:  r = 128; g = 128; b = 128; break;
259        case NODE_COLORS_GREEN: r = 0;   g = 200; b = 0;   break;
260        case NODE_COLORS_RED:   r = 255; g = 0;   b = 0;   break;
261        }
262
263        visChangeNodeColor( network, node, r, g, b );
264}
265
266void DddVis::visChangeLinkColor (
267                NETWORK_ID network,
268                NodeID& srcnode,
269                NodeID& destnode,
270                unsigned char r,
271                unsigned char g,
272                unsigned char b
273){
274        ostringstream out;
275        unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
276
277        out     << SET_EDGE_COLOR_TYPE          << del
278                        << getCommandID()                       << del
279                        << getTimestamp()                       << del
280                        << getNetworkName(network)      << del
281                        << edgekey                                      << del
282                        << makeColor(r, g, b)           << del;
283
284        sendMessage( out.str(), network );
285}
286
287void DddVis::visChangeLinkColor (
288                NETWORK_ID network,
289                NodeID& srcnode,
290                NodeID& destnode,
291                NODE_COLORS color
292){
293        unsigned char r = 0;
294        unsigned char g = 0;
295        unsigned char b = 0;
296
297        switch( color ) {
298        case NODE_COLORS_GREY:  r = 128; g = 128; b = 128; break;
299        case NODE_COLORS_GREEN: r = 0;   g = 200; b = 0;   break;
300        case NODE_COLORS_RED:   r = 255; g = 0;   b = 0;   break;
301        }
302
303        visChangeLinkColor( network, srcnode, destnode, r, g, b );
304}
305
306}} // namespace ariba, common
Note: See TracBrowser for help on using the repository browser.