An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/utility/visual/OvlVis.h @ 8606

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

-ovlvis verschoben und 3dvis hinzu

File size: 8.6 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#ifndef OVLVIS_H__
40#define OVLVIS_H__
41
42#include <sstream>
43#include <iostream>
44#include <string>
45#include <map>
46#include <boost/utility.hpp>
47#include "ariba/utility/system/Timer.h"
48#include "ariba/utility/misc/Helper.h"
49#include "ariba/utility/misc/KeyMapping.hpp"
50#include "ariba/utility/visual/ServerVis.h"
51
52using std::string;
53using std::map;
54using std::pair;
55using std::make_pair;
56using std::cout;
57using std::ostringstream;
58using ariba::utility::KeyMapping;
59using ariba::utility::Timer;
60
61namespace ariba {
62namespace utility {
63
64class OvlVis : public ServerVis, private boost::noncopyable {
65        use_logging_h(OvlVis);
66public:
67        static OvlVis& instance() { static OvlVis the_inst; return the_inst; }
68
69        //****************************************************************
70        // Node creation, node connections, status, node deletion, ...
71        //****************************************************************
72
73        /**
74         * Create a node in the network that is initially unconnected.
75         */
76        void visCreate (
77                        NETWORK_ID network,
78                        NodeID& node,
79                        string nodename,
80                        string info
81        );
82
83        /**
84         * Change the status of a node -> enable/disable a node.
85         */
86        void visChangeStatus(
87                        NETWORK_ID network,
88                        NodeID& node,
89                        bool enable,
90                        string info
91        );
92
93        /**
94         * Connect two nodes using a link.
95         */
96        void visConnect (
97                        NETWORK_ID network,
98                        NodeID& srcnode,
99                        NodeID& destnode,
100                        string info
101        );
102
103        /**
104         * Disconnect the link between two nodes.
105         */
106        void visDisconnect (
107                        NETWORK_ID network,
108                        NodeID& srcnode,
109                        NodeID& destnode,
110                        string info
111        );
112
113        /**
114         * Indicate that the connection procedure
115         * between two nodes failed.
116         */
117        void visFailedConnect (
118                        NETWORK_ID network,
119                        NodeID& srcnode,
120                        NodeID& destnode,
121                        string info
122        );
123
124        /**
125         * Delete a node from the network.
126         */
127        void visShutdown (
128                        NETWORK_ID network,
129                        NodeID& node,
130                        string info
131        );
132
133        //****************************************************************
134        // Node manipulation: change color, change icon
135        //****************************************************************
136
137        /**
138         * Change the color of the node.
139         */
140        void visChangeNodeColor (
141                        NETWORK_ID network,
142                        NodeID& node,
143                        unsigned char r,
144                        unsigned char g,
145                        unsigned char b
146        );
147
148        /**
149         * Change the color of the node.
150         */
151        void visChangeNodeColor (
152                        NETWORK_ID network,
153                        NodeID& node,
154                        NODE_COLORS color
155        );
156
157        /**
158         * The available icons for changing the
159         * icon of a node, showing an icon besides
160         * a node and showing an icon at a link.
161         */
162        typedef enum _ICON_ID {
163                ICON_ID_DEFAULT_NODE    = 0,
164                ICON_ID_PC                              = 1,
165                ICON_ID_PC_WORLD                = 2,
166                ICON_ID_FAILURE                 = 3,
167                ICON_ID_RED_CROSS               = 4,
168                ICON_ID_CHARACTER_A     = 5,
169                ICON_ID_CHARACTER_W     = 6,
170                ICON_ID_CAMERA          = 7,
171        } ICON_ID;
172
173        /**
174         * Change the icon of a node.
175         */
176        void visChangeNodeIcon (
177                        NETWORK_ID network,
178                        NodeID& node,
179                        ICON_ID icon
180        );
181
182        /**
183         * Show the label of the node.
184         */
185        void visShowNodeLabel (
186                        NETWORK_ID network,
187                        NodeID& node,
188                        string label
189        );
190
191        /**
192         * Delete the label of the node.
193         */
194        void visDeleteNodeLabel (
195                        NETWORK_ID network,
196                        NodeID& node
197        );
198
199        /**
200         * Show a bubble at the node.
201         */
202        void visShowNodeBubble (
203                        NETWORK_ID network,
204                        NodeID& node,
205                        string label
206        );
207
208        /**
209         * Delete a bubble at the node.
210         */
211        void visDeleteNodeBubble (
212                        NETWORK_ID network,
213                        NodeID& node
214        );
215
216        /**
217         * Show an icon besides the node.
218         */
219        void visShowShiftedNodeIcon (
220                        NETWORK_ID network,
221                        NodeID& node,
222                        ICON_ID iconID,
223                        unsigned int timeout = 0
224        );
225
226        /**
227         * Delete an icon besides the node
228         */
229        void visDeleteShiftedNodeIcon (
230                        NETWORK_ID network,
231                        NodeID& node
232        );
233
234        //****************************************************************
235        // Link manipulation: change width, color, show bubbles, icons, ...
236        //****************************************************************
237
238        /**
239         * Change the link width
240         */
241        void visChangeLinkWidth (
242                        NETWORK_ID network,
243                        NodeID& srcnode,
244                        NodeID& destnode,
245                        unsigned int width
246        );
247
248        /**
249         * Change the link color
250         */
251        void visChangeLinkColor (
252                        NETWORK_ID network,
253                        NodeID& srcnode,
254                        NodeID& destnode,
255                        unsigned char r,
256                        unsigned char g,
257                        unsigned char b
258        );
259
260        /**
261         * Change the link color
262         */
263        void visChangeLinkColor (
264                        NETWORK_ID network,
265                        NodeID& srcnode,
266                        NodeID& destnode,
267                        NODE_COLORS color
268        );
269
270        /**
271         * Show a link label
272         */
273        void visShowLinkLabel (
274                        NETWORK_ID network,
275                        NodeID& srcnode,
276                        NodeID& destnode,
277                        string label
278        );
279
280        /**
281         * Delete a link label
282         */
283        void visDeleteLinkLabel (
284                        NETWORK_ID network,
285                        NodeID& srcnode,
286                        NodeID& destnode
287        );
288
289        /**
290         * Show an icon at the link
291         */
292        void visShowOnLinkIcon (
293                        NETWORK_ID network,
294                        NodeID& srcnode,
295                        NodeID& destnode,
296                        ICON_ID iconID
297        );
298
299        /**
300         * Delete an icon at the link
301         */
302        void visDeleteOnLinkIcon (
303                        NETWORK_ID network,
304                        NodeID& srcnode,
305                        NodeID& destnode
306        );
307
308        /**
309         * Show a bubble besides the link
310         */
311        void visShowLinkBubble (
312                        NETWORK_ID network,
313                        NodeID& srcnode,
314                        NodeID& destnode,
315                        string label
316        );
317
318        /**
319         * Delete a bubble besides the link
320         */
321        void visDeleteLinkBubble (
322                        NETWORK_ID network,
323                        NodeID& srcnode,
324                        NodeID& destnode
325        );
326
327        //****************************************************************
328        // Send message between two nodes
329        //****************************************************************
330
331        /**
332         * Animate the message sending between two nodes
333         */
334        void visSendMessage (
335                        NETWORK_ID network,
336                        NodeID& startnode,
337                        NodeID& endnode
338        );
339
340        //*******************************************************
341        //*
342        void visCLIOInitMeasurement (
343                        NETWORK_ID network,
344                        unsigned long edgekey,
345                        NodeID& srcnode,
346                        NodeID& destnode,
347                        string info
348        );
349
350        void visCLIOEndMeasurement (
351                        NETWORK_ID network,
352                        unsigned long edgekey,
353                        NodeID& srcnode,
354                        NodeID& destnode,
355                        string info,
356                        string value,
357                        string unit
358        );
359        //*
360        //*******************************************************
361
362protected:
363        OvlVis();
364        virtual ~OvlVis();
365
366private:
367        void sendMessage( const string msg, NETWORK_ID nid );
368
369        typedef pair<NodeID, NodeID> NodePair;
370        typedef KeyMapping<NodePair> NetworkLinks;
371        typedef KeyMapping<NodePair> LinkBubbles;
372        typedef KeyMapping<NodeID>   NodeBubbles;
373        typedef KeyMapping<NodeID>   ShiftedNodeIcons;
374        typedef KeyMapping<NodePair> OnLinkIcons;
375
376        NetworkLinks            networkLinks;
377        LinkBubbles             linkBubbles;
378        NodeBubbles             nodeBubbles;
379        ShiftedNodeIcons        shiftedNodeIcons;
380        OnLinkIcons             onLinkIcons;
381
382        class TimedoutIcon : public Timer {
383        private:
384                NETWORK_ID network;
385                NodeID node;
386                unsigned int timeout;
387        public:
388                TimedoutIcon(NETWORK_ID _network, NodeID _node, unsigned int _timeout) :
389                        network(_network), node(_node), timeout(_timeout) {
390                }
391
392                virtual ~TimedoutIcon(){
393                        Timer::stop();
394                }
395
396                void startIcon(){
397                        Timer::setInterval( timeout, true );
398                        Timer::start();
399                }
400
401        protected:
402                virtual void eventFunction(){
403                        OvlVis::instance().visDeleteShiftedNodeIcon( network, node );
404                        delete this;
405                }
406        };
407
408};
409
410}} // namespace ariba, common
411
412#endif // OVLVIS_H__
Note: See TracBrowser for help on using the repository browser.