00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "DddVis.h"
00040
00041 namespace ariba {
00042 namespace utility {
00043
00044 const string DddVis::del = ":";
00045 use_logging_cpp(DddVis);
00046
00047 DddVis::DddVis() : commandid(0) {
00048 srand(time(NULL));
00049 }
00050
00051 DddVis::~DddVis(){
00052 }
00053
00054 void DddVis::sendMessage( const string msg, NETWORK_ID nid ) {
00055 sendSocket( msg + "\n" );
00056 }
00057
00058 long DddVis::getCommandID() {
00059 return ++commandid;
00060 }
00061
00062 long DddVis::getTimestamp() {
00063 return 0;
00064 }
00065
00066 unsigned int DddVis::getNodeNumber(const NodeID& node){
00067 NodeSet::iterator i = nodeSet.find(node);
00068
00069 if(i == nodeSet.end()){
00070 unsigned int number = node.get(MAX_KEYLENGTH-16, 16);
00071 nodeSet.insert(make_pair(node, number));
00072 return number;
00073 } else {
00074 return i->second;
00075 }
00076 }
00077
00078 void DddVis::visCreate(
00079 NETWORK_ID network,
00080 NodeID& node,
00081 string nodename,
00082 string info
00083 ){
00084
00085
00086
00087
00088 if(layerSet.find(network) == layerSet.end()){
00089
00090
00091
00092
00093
00094 {
00095 ostringstream out;
00096 out << CREATE_LAYER_TYPE << del
00097 << getCommandID() << del
00098 << getTimestamp() << del
00099 << getNetworkName(network) << del
00100 << "null" << del
00101 << 0 << del;
00102
00103 sendMessage( out.str(), network );
00104 layerSet.insert(network);
00105 }
00106
00107
00108
00109
00110
00111 {
00112 LayoutType layout = FORCE_LAYOUT;
00113 LayoutOrderStrategie order = ORDER_RANDOMLY;
00114
00115 switch(network){
00116 case NETWORK_ID_BASE_COMMUNICATION:
00117 layout = FORCE_LAYOUT;
00118 order = ORDER_RANDOMLY;
00119 break;
00120 case NETWORK_ID_BASE_OVERLAY:
00121 layout = CIRCULAR_LAYOUT;
00122 order = ORDER_BY_ID;
00123 break;
00124 case NETWORK_ID_MCPO:
00125 layout = FORCE_LAYOUT;
00126 order = ORDER_RANDOMLY;
00127 break;
00128 default:
00129 break;
00130 }
00131
00132 ostringstream out;
00133 out << SET_CLUSTER_LAYOUT_TYPE << del
00134 << getCommandID() << del
00135 << getTimestamp() << del
00136 << getNetworkName(network) << del
00137 << 0 << del
00138 << layout << del
00139 << order << del;
00140
00141 sendMessage( out.str(), network );
00142 }
00143
00144 }
00145
00146
00147
00148
00149
00150 ostringstream out;
00151 out << CREATE_NODE_TYPE << del
00152 << getCommandID() << del
00153 << getTimestamp() << del
00154 << getNetworkName(network) << del
00155 << 0 << del
00156 << getNodeNumber(node) << del
00157 << 0x00000000 << del
00158 << "null" << del;
00159
00160 sendMessage( out.str(), network );
00161
00162
00163
00164
00165
00166 if(this->nodecolor != 0){
00167 this->visChangeNodeColor(network, node,
00168 (nodecolor & 0xFF0000) >> 16, (nodecolor & 0x00FF00) >> 8, nodecolor & 0x0000FF );
00169 }
00170 }
00171
00172 void DddVis::visConnect(
00173 NETWORK_ID network,
00174 NodeID& srcnode,
00175 NodeID& destnode,
00176 string info
00177 ){
00178
00179
00180
00181 if( networkLinks.exists( network, NodePair(srcnode,destnode) )) return;
00182
00183 ostringstream out;
00184 unsigned long edgekey = networkLinks.insert( network, NodePair(srcnode,destnode) );
00185
00186 out << CREATE_EDGE_TYPE << del
00187 << getCommandID() << del
00188 << getTimestamp() << del
00189 << getNetworkName(network) << del
00190 << 0 << del
00191 << getNodeNumber(srcnode) << del
00192 << getNodeNumber(destnode) << del
00193 << edgekey << del
00194 << 0x00000000 << del
00195 << "null" << del;
00196
00197 sendMessage( out.str(), network );
00198 }
00199
00200 void DddVis::visDisconnect(
00201 NETWORK_ID network,
00202 NodeID& srcnode,
00203 NodeID& destnode,
00204 string info
00205 ){
00206 if( !networkLinks.exists(network, NodePair(srcnode, destnode)) ) return;
00207
00208 unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
00209 networkLinks.remove( network, NodePair(srcnode, destnode) );
00210
00211 ostringstream out;
00212 out << REMOVE_EDGE_TYPE << del
00213 << getCommandID() << del
00214 << getTimestamp() << del
00215 << getNetworkName(network) << del
00216 << edgekey << del;
00217
00218 sendMessage( out.str(), network );
00219 }
00220
00221 void DddVis::visShutdown(
00222 NETWORK_ID network,
00223 NodeID& node,
00224 string info
00225 ){
00226 ostringstream out;
00227
00228 out << REMOVE_NODE_TYPE << del
00229 << getCommandID() << del
00230 << getTimestamp() << del
00231 << getNetworkName(network) << del
00232 << getNodeNumber(node) << del;
00233
00234 sendMessage( out.str(), network );
00235 }
00236
00237 void DddVis::visChangeNodeColor (
00238 NETWORK_ID network,
00239 NodeID& node,
00240 unsigned char r,
00241 unsigned char g,
00242 unsigned char b
00243 ){
00244 ostringstream out;
00245 out << SET_NODE_COLOR_TYPE << del
00246 << getCommandID() << del
00247 << getTimestamp() << del
00248 << getNetworkName(network) << del
00249 << getNodeNumber(node) << del
00250 << makeColor(r, g, b) << del;
00251
00252 sendMessage( out.str(), network );
00253 }
00254
00255 int DddVis::makeColor(unsigned char r, unsigned char g, unsigned char b){
00256 return ((r<<16)+(g<<8)+b);
00257 }
00258
00259 void DddVis::visChangeNodeColor (
00260 NETWORK_ID network,
00261 NodeID& node,
00262 NODE_COLORS color
00263 ){
00264 unsigned char r = 0;
00265 unsigned char g = 0;
00266 unsigned char b = 0;
00267
00268 switch( color ) {
00269 case NODE_COLORS_GREY: r = 128; g = 128; b = 128; break;
00270 case NODE_COLORS_GREEN: r = 0; g = 200; b = 0; break;
00271 case NODE_COLORS_RED: r = 255; g = 0; b = 0; break;
00272 }
00273
00274 visChangeNodeColor( network, node, r, g, b );
00275 }
00276
00277 void DddVis::visChangeLinkColor (
00278 NETWORK_ID network,
00279 NodeID& srcnode,
00280 NodeID& destnode,
00281 unsigned char r,
00282 unsigned char g,
00283 unsigned char b
00284 ){
00285 ostringstream out;
00286 unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
00287
00288 out << SET_EDGE_COLOR_TYPE << del
00289 << getCommandID() << del
00290 << getTimestamp() << del
00291 << getNetworkName(network) << del
00292 << edgekey << del
00293 << makeColor(r, g, b) << del;
00294
00295 sendMessage( out.str(), network );
00296 }
00297
00298 void DddVis::visChangeLinkColor (
00299 NETWORK_ID network,
00300 NodeID& srcnode,
00301 NodeID& destnode,
00302 NODE_COLORS color
00303 ){
00304 unsigned char r = 0;
00305 unsigned char g = 0;
00306 unsigned char b = 0;
00307
00308 switch( color ) {
00309 case NODE_COLORS_GREY: r = 128; g = 128; b = 128; break;
00310 case NODE_COLORS_GREEN: r = 0; g = 200; b = 0; break;
00311 case NODE_COLORS_RED: r = 255; g = 0; b = 0; break;
00312 }
00313
00314 visChangeLinkColor( network, srcnode, destnode, r, g, b );
00315 }
00316
00317 void DddVis::visShowNodeLabel (
00318 NETWORK_ID network,
00319 NodeID& node,
00320 string label
00321 ){
00322 ostringstream out;
00323 out << SET_NODE_INFO_TYPE << del
00324 << getCommandID() << del
00325 << getTimestamp() << del
00326 << getNetworkName(network) << del
00327 << getNodeNumber(node) << del
00328 << label << del;
00329
00330 sendMessage( out.str(), network );
00331 }
00332
00333 }}