/OverSim-20101103/doc/doxy/PubSubMMOG_8cc_source.html
HTML | 2061 lines | 2060 code | 0 blank | 1 comment | 0 complexity | 37d74eda56cfedf3878a62fd4ea6a0ad MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, GPL-2.0, Apache-2.0, JSON
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
- <title>OverSim: PubSubMMOG.cc Source File</title>
- <link href="tabs.css" rel="stylesheet" type="text/css"/>
- <link href="doxygen.css" rel="stylesheet" type="text/css"/>
- </head>
- <body>
- <!-- Generated by Doxygen 1.7.1 -->
- <div class="navigation" id="top">
- <div class="tabs">
- <ul class="tablist">
- <li><a href="main.html"><span>Main Page</span></a></li>
- <li><a href="pages.html"><span>Related Pages</span></a></li>
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
- <li><a href="annotated.html"><span>Classes</span></a></li>
- <li class="current"><a href="files.html"><span>Files</span></a></li>
- <li><a href="dirs.html"><span>Directories</span></a></li>
- </ul>
- </div>
- <div class="tabs2">
- <ul class="tablist">
- <li><a href="files.html"><span>File List</span></a></li>
- <li><a href="globals.html"><span>File Members</span></a></li>
- </ul>
- </div>
- <div class="navpath">
- <ul>
- <li><a class="el" href="dir_668dee661430860db5868c2621a9c372.html">src</a> </li>
- <li><a class="el" href="dir_6302e9405fe106175d386473fd676d2e.html">overlay</a> </li>
- <li><a class="el" href="dir_1ea0fb66e628dfd4ff0dfe2ccf5e5335.html">pubsubmmog</a> </li>
- </ul>
- </div>
- </div>
- <div class="header">
- <div class="headertitle">
- <h1>PubSubMMOG.cc</h1> </div>
- </div>
- <div class="contents">
- <a href="PubSubMMOG_8cc.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//</span>
- <a name="l00002"></a>00002 <span class="comment">// Copyright (C) 2006 Institut fuer Telematik, Universitaet Karlsruhe (TH)</span>
- <a name="l00003"></a>00003 <span class="comment">//</span>
- <a name="l00004"></a>00004 <span class="comment">// This program is free software; you can redistribute it and/or</span>
- <a name="l00005"></a>00005 <span class="comment">// modify it under the terms of the GNU General Public License</span>
- <a name="l00006"></a>00006 <span class="comment">// as published by the Free Software Foundation; either version 2</span>
- <a name="l00007"></a>00007 <span class="comment">// of the License, or (at your option) any later version.</span>
- <a name="l00008"></a>00008 <span class="comment">//</span>
- <a name="l00009"></a>00009 <span class="comment">// This program is distributed in the hope that it will be useful,</span>
- <a name="l00010"></a>00010 <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
- <a name="l00011"></a>00011 <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
- <a name="l00012"></a>00012 <span class="comment">// GNU General Public License for more details.</span>
- <a name="l00013"></a>00013 <span class="comment">//</span>
- <a name="l00014"></a>00014 <span class="comment">// You should have received a copy of the GNU General Public License</span>
- <a name="l00015"></a>00015 <span class="comment">// along with this program; if not, write to the Free Software</span>
- <a name="l00016"></a>00016 <span class="comment">// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</span>
- <a name="l00017"></a>00017 <span class="comment">//</span>
- <a name="l00018"></a>00018
- <a name="l00024"></a>00024 <span class="preprocessor">#include <NotifierConsts.h></span>
- <a name="l00025"></a>00025
- <a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="PubSubMMOG_8h.html">PubSubMMOG.h</a>"</span>
- <a name="l00027"></a>00027
- <a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="GlobalNodeListAccess_8h.html">GlobalNodeListAccess.h</a>"</span>
- <a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="GlobalStatistics_8h.html">GlobalStatistics.h</a>></span>
- <a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="BootstrapList_8h.html">BootstrapList.h</a>></span>
- <a name="l00031"></a>00031
- <a name="l00032"></a>00032 <a class="code" href="ALMTest_8cc.html#a3b5014f410c7989e8bad4b467ecc94cd">Define_Module</a>(<a class="code" href="classPubSubMMOG.html">PubSubMMOG</a>);
- <a name="l00033"></a>00033
- <a name="l00034"></a>00034 <span class="keyword">using namespace </span>std;
- <a name="l00035"></a>00035
- <a name="l00036"></a><a class="code" href="classPubSubMMOG.html#a42a189f235425d0cc5706857f3122283">00036</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a42a189f235425d0cc5706857f3122283" title="Initializes derived-class-attributes.">PubSubMMOG::initializeOverlay</a>(<span class="keywordtype">int</span> stage)
- <a name="l00037"></a>00037 {
- <a name="l00038"></a>00038 <span class="comment">// because of IPAddressResolver, we need to wait until interfaces are registered,</span>
- <a name="l00039"></a>00039 <span class="comment">// address auto-assignment takes place etc.</span>
- <a name="l00040"></a>00040 <span class="keywordflow">if</span>(stage != <a class="code" href="InitStages_8h.html#a42fde1aa1e14a1c45d29061d6e87e532a58e83c497c7c8495e9c592ff3148b6b9" title="first stage for overlay modules (Tier 0 / KBR)">MIN_STAGE_OVERLAY</a>) <span class="keywordflow">return</span>;
- <a name="l00041"></a>00041
- <a name="l00042"></a>00042 <a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> = INIT;
- <a name="l00043"></a>00043 <a class="code" href="classPubSubMMOG.html#a3e573d9ce39091daea435016a587b239">setBootstrapedIcon</a>();
- <a name="l00044"></a>00044 <span class="comment">// TODO: use BootstrapList instead (but this currently preferes</span>
- <a name="l00045"></a>00045 <span class="comment">// nodes from the same partition)</span>
- <a name="l00046"></a>00046 <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a> = <a class="code" href="classBaseOverlay.html#a933e505ea77cae4ab0c8edcb77ade2c7" title="pointer to GlobalNodeList in this node">globalNodeList</a>-><a class="code" href="classGlobalNodeList.html#a1f0290942c0a6d89ad7e39d75ff6355b" title="Returns a random NodeHandle.">getBootstrapNode</a>();
- <a name="l00047"></a>00047
- <a name="l00048"></a>00048 <a class="code" href="classPubSubMMOG.html#a04199b677abdfd25b29f9a5f79c19426">joinTimer</a> = <span class="keyword">new</span> cMessage(<span class="stringliteral">"join timer"</span>);
- <a name="l00049"></a>00049 simtime_t joinTime = ceil(simTime() + (simtime_t) par(<span class="stringliteral">"joinDelay"</span>));
- <a name="l00050"></a>00050 scheduleAt( joinTime, <a class="code" href="classPubSubMMOG.html#a04199b677abdfd25b29f9a5f79c19426">joinTimer</a> );
- <a name="l00051"></a>00051
- <a name="l00052"></a>00052 <a class="code" href="classPubSubMMOG.html#a228fe6f61d1fe510d1336296c4bf254c">movementRate</a> = par(<span class="stringliteral">"movementRate"</span>);
- <a name="l00053"></a>00053 <a class="code" href="classPubSubMMOG.html#a5c7d73c47298f65748e65abc506b9611">eventDeliveryTimer</a> = <span class="keyword">new</span> <a class="code" href="classPubSubTimer.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTimer</a>(<span class="stringliteral">"event delivery timer"</span>);
- <a name="l00054"></a>00054 <a class="code" href="classPubSubMMOG.html#a5c7d73c47298f65748e65abc506b9611">eventDeliveryTimer</a>-><a class="code" href="classPubSubTimer.html#a09825991200a1fa76d4cfc9549ac51f5">setType</a>( <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04cab87b77accd020036a875063be27c753c">PUBSUB_EVENTDELIVERY</a> );
- <a name="l00055"></a>00055 scheduleAt( joinTime + 1.0/(2*<a class="code" href="classPubSubMMOG.html#a228fe6f61d1fe510d1336296c4bf254c">movementRate</a>), <a class="code" href="classPubSubMMOG.html#a5c7d73c47298f65748e65abc506b9611">eventDeliveryTimer</a> );
- <a name="l00056"></a>00056
- <a name="l00057"></a>00057 <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> = par(<span class="stringliteral">"numSubspaces"</span>);
- <a name="l00058"></a>00058 <a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a> = (int) ( (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) par(<span class="stringliteral">"areaDimension"</span>) / <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l00059"></a>00059 <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#af3992f1fda9ea42dc10bf4739e47700a" title="saves given key to NodeHandle::key">setKey</a>( <a class="code" href="classOverlayKey.html#a1983e1b47e32783f8ccd5e59fe725290" title="Returns a random key.">OverlayKey::random</a>() );
- <a name="l00060"></a>00060
- <a name="l00061"></a>00061 <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> = par(<span class="stringliteral">"maxChildren"</span>);
- <a name="l00062"></a>00062 <a class="code" href="classPubSubSubspaceResponsible.html#a5dfd7f5d997726d5c8f158a371cee621">PubSubSubspaceResponsible::maxChildren</a> = <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a>;
- <a name="l00063"></a>00063
- <a name="l00064"></a>00064 <a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a> = par(<span class="stringliteral">"AOIWidth"</span>);
- <a name="l00065"></a>00065 <a class="code" href="classPubSubMMOG.html#a219753e4fc3eae95cd21f70bc40017e7">maxMoveDelay</a> = par(<span class="stringliteral">"maxMoveDelay"</span>);
- <a name="l00066"></a>00066
- <a name="l00067"></a>00067 <a class="code" href="classPubSubMMOG.html#a98fd6baf72474a184c902133581273fa">parentTimeout</a> = par(<span class="stringliteral">"parentTimeout"</span>);
- <a name="l00068"></a>00068 <a class="code" href="classPubSubMMOG.html#aebf88e5c0a0f294c706c3281b1aae373">heartbeatTimer</a> = <span class="keyword">new</span> <a class="code" href="classPubSubTimer.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTimer</a>(<span class="stringliteral">"HeartbeatTimer"</span>);
- <a name="l00069"></a>00069 <a class="code" href="classPubSubMMOG.html#aebf88e5c0a0f294c706c3281b1aae373">heartbeatTimer</a>-><a class="code" href="classPubSubTimer.html#a09825991200a1fa76d4cfc9549ac51f5">setType</a>( <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04caec28dc4bd962108ceb27575f46b81ebd">PUBSUB_HEARTBEAT</a> );
- <a name="l00070"></a>00070 <a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">startTimer</a>( <a class="code" href="classPubSubMMOG.html#aebf88e5c0a0f294c706c3281b1aae373">heartbeatTimer</a> );
- <a name="l00071"></a>00071 <a class="code" href="classPubSubMMOG.html#a2540cd40427d53404d3adbca173cfd6c">childPingTimer</a> = <span class="keyword">new</span> <a class="code" href="classPubSubTimer.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTimer</a>(<span class="stringliteral">"ChildPingTimer"</span>);
- <a name="l00072"></a>00072 <a class="code" href="classPubSubMMOG.html#a2540cd40427d53404d3adbca173cfd6c">childPingTimer</a>-><a class="code" href="classPubSubTimer.html#a09825991200a1fa76d4cfc9549ac51f5">setType</a>( <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04caa64f2984ebaaa94fb52bc3ff99d24fa1">PUBSUB_CHILDPING</a> );
- <a name="l00073"></a>00073 <a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">startTimer</a>( <a class="code" href="classPubSubMMOG.html#a2540cd40427d53404d3adbca173cfd6c">childPingTimer</a> );
- <a name="l00074"></a>00074
- <a name="l00075"></a>00075 <a class="code" href="classPubSubMMOG.html#aced8c7945b0f77560359167cc5f398f6">allowOldMoveMessages</a> = par(<span class="stringliteral">"allowOldMoveMessages"</span>);
- <a name="l00076"></a>00076
- <a name="l00077"></a>00077 <a class="code" href="classPubSubMMOG.html#aa809123a9ef7f64ea622400ed60a2d4c">numEventsWrongTimeslot</a> = <a class="code" href="classPubSubMMOG.html#a0adb17b77190fd14c0979fe39a5889cc">numEventsCorrectTimeslot</a> = 0;
- <a name="l00078"></a>00078 <a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a> = 0;
- <a name="l00079"></a>00079 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a> = 0;
- <a name="l00080"></a>00080 <a class="code" href="classPubSubMMOG.html#a11ca86e89977d8bb4d1512a5e64ce8d3">numMoveMessages</a> = 0;
- <a name="l00081"></a>00081 <a class="code" href="classPubSubMMOG.html#a122b6f4eacfc82a453cdabace026a0d5">moveMessagesSize</a> = 0;
- <a name="l00082"></a>00082 <a class="code" href="classPubSubMMOG.html#ae81f55efe5b21342597e408ff3474eee">numMoveListMessages</a> = 0;
- <a name="l00083"></a>00083 <a class="code" href="classPubSubMMOG.html#a5a665dd74681081d669ea57efd5d83b0">moveListMessagesSize</a> = 0;
- <a name="l00084"></a>00084 <a class="code" href="classPubSubMMOG.html#a4561eb4e380c7aea874ea622b9145603">respMoveListMessagesSize</a> = 0;
- <a name="l00085"></a>00085 <a class="code" href="classPubSubMMOG.html#a1450e36b5a7103fe4581f271fac13340">lostMovementLists</a> = 0;
- <a name="l00086"></a>00086 <a class="code" href="classPubSubMMOG.html#a8415fe6a47b3b961fd54f9e3b5f8d3f0">receivedMovementLists</a> = 0;
- <a name="l00087"></a>00087 WATCH( <a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a> );
- <a name="l00088"></a>00088 WATCH( <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a> );
- <a name="l00089"></a>00089 WATCH( <a class="code" href="classPubSubMMOG.html#a11ca86e89977d8bb4d1512a5e64ce8d3">numMoveMessages</a> );
- <a name="l00090"></a>00090 WATCH( <a class="code" href="classPubSubMMOG.html#a122b6f4eacfc82a453cdabace026a0d5">moveMessagesSize</a> );
- <a name="l00091"></a>00091 WATCH( <a class="code" href="classPubSubMMOG.html#ae81f55efe5b21342597e408ff3474eee">numMoveListMessages</a> );
- <a name="l00092"></a>00092 WATCH( <a class="code" href="classPubSubMMOG.html#a5a665dd74681081d669ea57efd5d83b0">moveListMessagesSize</a> );
- <a name="l00093"></a>00093 WATCH( <a class="code" href="classPubSubMMOG.html#aa809123a9ef7f64ea622400ed60a2d4c">numEventsWrongTimeslot</a> );
- <a name="l00094"></a>00094 WATCH( <a class="code" href="classPubSubMMOG.html#a0adb17b77190fd14c0979fe39a5889cc">numEventsCorrectTimeslot</a> );
- <a name="l00095"></a>00095 WATCH( <a class="code" href="classPubSubMMOG.html#a1450e36b5a7103fe4581f271fac13340">lostMovementLists</a> );
- <a name="l00096"></a>00096 WATCH( <a class="code" href="classPubSubMMOG.html#a8415fe6a47b3b961fd54f9e3b5f8d3f0">receivedMovementLists</a> );
- <a name="l00097"></a>00097 WATCH_LIST( <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a> );
- <a name="l00098"></a>00098 WATCH_MAP( <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a> );
- <a name="l00099"></a>00099 WATCH_MAP( <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a> );
- <a name="l00100"></a>00100 WATCH_MAP( <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a> );
- <a name="l00101"></a>00101 }
- <a name="l00102"></a>00102
- <a name="l00103"></a><a class="code" href="classPubSubMMOG.html#a4f2a87f7e95bbb17819f04261585236d">00103</a> <span class="keywordtype">bool</span> <a class="code" href="classPubSubMMOG.html#a4f2a87f7e95bbb17819f04261585236d">PubSubMMOG::handleRpcCall</a>(<a class="code" href="classBaseCallMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseCallMessage</a>* msg)
- <a name="l00104"></a>00104 {
- <a name="l00105"></a>00105 <span class="comment">// delegate messages</span>
- <a name="l00106"></a>00106 <a class="code" href="RpcMacros_8h.html#aa75b135e279b574267e1a7dc4ab79da4" title="Marks the beginning of a Remote-Procedure-Call Switch block.">RPC_SWITCH_START</a>( msg )
- <a name="l00107"></a>00107 <a class="code" href="RpcMacros_8h.html#ad81d44e9bc59d2fb2cfcacc4d5ecda35" title="Declares a RPC method delegation.">RPC_DELEGATE</a>( PubSubSubscription, <a class="code" href="classPubSubMMOG.html#a3d1fd761fc46a4b56f1c7e852bf41207">handleSubscriptionCall</a> );
- <a name="l00108"></a>00108 <a class="code" href="RpcMacros_8h.html#ad81d44e9bc59d2fb2cfcacc4d5ecda35" title="Declares a RPC method delegation.">RPC_DELEGATE</a>( PubSubTakeOverSubspace, <a class="code" href="classPubSubMMOG.html#af504bf4e0b52404912395baefed9f5c5">handleTakeOver</a> );
- <a name="l00109"></a>00109 <a class="code" href="RpcMacros_8h.html#ad81d44e9bc59d2fb2cfcacc4d5ecda35" title="Declares a RPC method delegation.">RPC_DELEGATE</a>( PubSubBackup, <a class="code" href="classPubSubMMOG.html#ac7e55bce3aa2a48f4367977e081eb9e1">handleBackupCall</a> );
- <a name="l00110"></a>00110 <a class="code" href="RpcMacros_8h.html#ad81d44e9bc59d2fb2cfcacc4d5ecda35" title="Declares a RPC method delegation.">RPC_DELEGATE</a>( PubSubIntermediate, <a class="code" href="classPubSubMMOG.html#a77d17c923e8b43f0bf38222dd58d3969">handleIntermediateCall</a> );
- <a name="l00111"></a>00111 <a class="code" href="RpcMacros_8h.html#ad81d44e9bc59d2fb2cfcacc4d5ecda35" title="Declares a RPC method delegation.">RPC_DELEGATE</a>( PubSubAdoptChild, <a class="code" href="classPubSubMMOG.html#a301bb30f1b9239fa5ea744400be48a1b">handleAdoptChildCall</a> );
- <a name="l00112"></a>00112 <a class="code" href="RpcMacros_8h.html#ad81d44e9bc59d2fb2cfcacc4d5ecda35" title="Declares a RPC method delegation.">RPC_DELEGATE</a>( PubSubPing, <a class="code" href="classPubSubMMOG.html#a7179d8d2355f09e50e5172a8bc4e60b1">handlePingCall</a> );
- <a name="l00113"></a>00113 <a class="code" href="RpcMacros_8h.html#a29a8a3f21e67ecb25f58608a54df5191" title="Marks the end of a Remote-Procedure-Call Switch block.">RPC_SWITCH_END</a>( )
- <a name="l00114"></a>00114
- <a name="l00115"></a>00115 <span class="keywordflow">return</span> RPC_HANDLED;
- <a name="l00116"></a>00116
- <a name="l00117"></a>00117 }
- <a name="l00118"></a>00118
- <a name="l00119"></a><a class="code" href="classPubSubMMOG.html#a8cd2dcabf97fae56f6af40cda177fdf7">00119</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a8cd2dcabf97fae56f6af40cda177fdf7">PubSubMMOG::handleRpcResponse</a>(<a class="code" href="classBaseResponseMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseResponseMessage</a> *msg,
- <a name="l00120"></a>00120 cPolymorphic* context, <span class="keywordtype">int</span> rpcId,
- <a name="l00121"></a>00121 simtime_t rtt)
- <a name="l00122"></a>00122 {
- <a name="l00123"></a>00123 <a class="code" href="RpcMacros_8h.html#aa75b135e279b574267e1a7dc4ab79da4" title="Marks the beginning of a Remote-Procedure-Call Switch block.">RPC_SWITCH_START</a>(msg);
- <a name="l00124"></a>00124 <a class="code" href="RpcMacros_8h.html#a0394d2dc4f9f1e15d7e99c9f43da10c7">RPC_ON_RESPONSE</a>( PubSubJoin ) {
- <a name="l00125"></a>00125 <a class="code" href="classPubSubMMOG.html#a90f7b9fa68b400b80892d642f4c439b4">handleJoinResponse</a>( _PubSubJoinResponse );
- <a name="l00126"></a>00126 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00127"></a>00127 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00128"></a>00128 << <span class="stringliteral">" Received a PubSubJoin RPC Response: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00129"></a>00129 << <span class="stringliteral">" msg="</span> << *_PubSubJoinResponse << <span class="stringliteral">" rtt="</span> << rtt
- <a name="l00130"></a>00130 << endl;
- <a name="l00131"></a>00131 <span class="keywordflow">break</span>;
- <a name="l00132"></a>00132 }
- <a name="l00133"></a>00133 <a class="code" href="RpcMacros_8h.html#a0394d2dc4f9f1e15d7e99c9f43da10c7">RPC_ON_RESPONSE</a>( PubSubSubscription ) {
- <a name="l00134"></a>00134 <a class="code" href="classPubSubMMOG.html#a7d6b63042aee9dfbe3d11d2062a43a05">handleSubscriptionResponse</a>( _PubSubSubscriptionResponse );
- <a name="l00135"></a>00135 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00136"></a>00136 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00137"></a>00137 << <span class="stringliteral">" Received a PubSubSubscription RPC Response: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00138"></a>00138 << <span class="stringliteral">" msg="</span> << *_PubSubSubscriptionResponse << <span class="stringliteral">" rtt="</span> << rtt
- <a name="l00139"></a>00139 << endl;
- <a name="l00140"></a>00140 <span class="keywordflow">break</span>;
- <a name="l00141"></a>00141 }
- <a name="l00142"></a>00142 <a class="code" href="RpcMacros_8h.html#a0394d2dc4f9f1e15d7e99c9f43da10c7">RPC_ON_RESPONSE</a>( PubSubResponsibleNode ) {
- <a name="l00143"></a>00143 <a class="code" href="classPubSubMMOG.html#a7e351287bef39afa54408e4fce0fdf26">handleResponsibleNodeResponse</a>( _PubSubResponsibleNodeResponse );
- <a name="l00144"></a>00144 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00145"></a>00145 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00146"></a>00146 << <span class="stringliteral">" Received a PubSubResponsibleNode RPC Response: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00147"></a>00147 << <span class="stringliteral">" msg="</span> << *_PubSubResponsibleNodeResponse << <span class="stringliteral">" rtt="</span> << rtt
- <a name="l00148"></a>00148 << endl;
- <a name="l00149"></a>00149 <span class="keywordflow">break</span>;
- <a name="l00150"></a>00150 }
- <a name="l00151"></a>00151 <a class="code" href="RpcMacros_8h.html#a0394d2dc4f9f1e15d7e99c9f43da10c7">RPC_ON_RESPONSE</a>( PubSubHelp ) {
- <a name="l00152"></a>00152 <a class="code" href="classPubSubMMOG.html#a7d28b4484518dcf34fbc2cb462bf620b">handleHelpResponse</a>( _PubSubHelpResponse );
- <a name="l00153"></a>00153 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00154"></a>00154 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00155"></a>00155 << <span class="stringliteral">" Received a PubSubHelp RPC Response: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00156"></a>00156 << <span class="stringliteral">" msg="</span> << *_PubSubHelpResponse << <span class="stringliteral">" rtt="</span> << rtt
- <a name="l00157"></a>00157 << endl;
- <a name="l00158"></a>00158 <span class="keywordflow">break</span>;
- <a name="l00159"></a>00159 }
- <a name="l00160"></a>00160 <a class="code" href="RpcMacros_8h.html#a0394d2dc4f9f1e15d7e99c9f43da10c7">RPC_ON_RESPONSE</a>( PubSubBackup ) {
- <a name="l00161"></a>00161 <a class="code" href="classPubSubMMOG.html#a401659ffbdca793a6f7d97e9737a70d0">handleBackupResponse</a>( _PubSubBackupResponse );
- <a name="l00162"></a>00162 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00163"></a>00163 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00164"></a>00164 << <span class="stringliteral">" Received a PubSubBackup RPC Response: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00165"></a>00165 << <span class="stringliteral">" msg="</span> << *_PubSubBackupResponse << <span class="stringliteral">" rtt="</span> << rtt
- <a name="l00166"></a>00166 << endl;
- <a name="l00167"></a>00167 <span class="keywordflow">break</span>;
- <a name="l00168"></a>00168 }
- <a name="l00169"></a>00169 <a class="code" href="RpcMacros_8h.html#a0394d2dc4f9f1e15d7e99c9f43da10c7">RPC_ON_RESPONSE</a>( PubSubIntermediate ) {
- <a name="l00170"></a>00170 <a class="code" href="classPubSubMMOG.html#ac41702ca41ffae439637504939856f4f">handleIntermediateResponse</a>( _PubSubIntermediateResponse );
- <a name="l00171"></a>00171 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00172"></a>00172 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00173"></a>00173 << <span class="stringliteral">" Received a PubSubIntermediate RPC Response: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00174"></a>00174 << <span class="stringliteral">" msg="</span> << *_PubSubIntermediateResponse << <span class="stringliteral">" rtt="</span> << rtt
- <a name="l00175"></a>00175 << endl;
- <a name="l00176"></a>00176 <span class="keywordflow">break</span>;
- <a name="l00177"></a>00177 }
- <a name="l00178"></a>00178 <a class="code" href="RpcMacros_8h.html#a0394d2dc4f9f1e15d7e99c9f43da10c7">RPC_ON_RESPONSE</a>( PubSubAdoptChild ) {
- <a name="l00179"></a>00179 <a class="code" href="classPubSubMMOG.html#a9f396c585cfb16b476047c35fbbe05fa">handleAdoptChildResponse</a>( _PubSubAdoptChildResponse );
- <a name="l00180"></a>00180 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00181"></a>00181 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00182"></a>00182 << <span class="stringliteral">" Received a PubSubAdoptChild RPC Response: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00183"></a>00183 << <span class="stringliteral">" msg="</span> << *_PubSubAdoptChildResponse << <span class="stringliteral">" rtt="</span> << rtt
- <a name="l00184"></a>00184 << endl;
- <a name="l00185"></a>00185 <span class="keywordflow">break</span>;
- <a name="l00186"></a>00186 }
- <a name="l00187"></a>00187 <a class="code" href="RpcMacros_8h.html#a0394d2dc4f9f1e15d7e99c9f43da10c7">RPC_ON_RESPONSE</a>( PubSubPing ) {
- <a name="l00188"></a>00188 <a class="code" href="classPubSubMMOG.html#a6ade874ae0f4871c157cbf3e4334724c">handlePingResponse</a>( _PubSubPingResponse );
- <a name="l00189"></a>00189 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00190"></a>00190 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00191"></a>00191 << <span class="stringliteral">" Received a PubSubPing RPC Response: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00192"></a>00192 << <span class="stringliteral">" msg="</span> << *_PubSubPingResponse << <span class="stringliteral">" rtt="</span> << rtt
- <a name="l00193"></a>00193 << endl;
- <a name="l00194"></a>00194 <span class="keywordflow">break</span>;
- <a name="l00195"></a>00195 }
- <a name="l00196"></a>00196 <a class="code" href="RpcMacros_8h.html#a29a8a3f21e67ecb25f58608a54df5191" title="Marks the end of a Remote-Procedure-Call Switch block.">RPC_SWITCH_END</a>( );
- <a name="l00197"></a>00197 }
- <a name="l00198"></a>00198
- <a name="l00199"></a><a class="code" href="classPubSubMMOG.html#a9838eb23acd2464c8500cdff66caf8a8">00199</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a9838eb23acd2464c8500cdff66caf8a8">PubSubMMOG::handleRpcTimeout</a> (<a class="code" href="classBaseCallMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseCallMessage</a> *msg,
- <a name="l00200"></a>00200 <span class="keyword">const</span> <a class="code" href="classTransportAddress.html" title="This class implements a common transport address.">TransportAddress</a> &dest,
- <a name="l00201"></a>00201 cPolymorphic* context, <span class="keywordtype">int</span> rpcId,
- <a name="l00202"></a>00202 <span class="keyword">const</span> <a class="code" href="classOverlayKey.html" title="A common overlay key class.">OverlayKey</a> &destKey)
- <a name="l00203"></a>00203 {
- <a name="l00204"></a>00204 <a class="code" href="RpcMacros_8h.html#aa75b135e279b574267e1a7dc4ab79da4" title="Marks the beginning of a Remote-Procedure-Call Switch block.">RPC_SWITCH_START</a>(msg)
- <a name="l00205"></a>00205 <a class="code" href="RpcMacros_8h.html#ae07fad586ce7b9e82ad12848767a32e5">RPC_ON_CALL</a>( PubSubBackup ) {
- <a name="l00206"></a>00206 <a class="code" href="classPubSubMMOG.html#a217e815ddc5ba02f8afe33a73389184f">handleBackupCallTimeout</a>( _PubSubBackupCall, dest );
- <a name="l00207"></a>00207 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcTimeout() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00208"></a>00208 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00209"></a>00209 << <span class="stringliteral">" Backup RPC Call timed out: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00210"></a>00210 << <span class="stringliteral">" msg="</span> << *_PubSubBackupCall
- <a name="l00211"></a>00211 << <span class="stringliteral">" oldNode="</span> << dest
- <a name="l00212"></a>00212 << endl;
- <a name="l00213"></a>00213 <span class="keywordflow">break</span>;
- <a name="l00214"></a>00214 }
- <a name="l00215"></a>00215 <a class="code" href="RpcMacros_8h.html#ae07fad586ce7b9e82ad12848767a32e5">RPC_ON_CALL</a>( PubSubPing ) {
- <a name="l00216"></a>00216 <a class="code" href="classPubSubMMOG.html#a0ca3bd97cac131ba5c2ff02235cc6a2f">handlePingCallTimeout</a>( _PubSubPingCall, dest );
- <a name="l00217"></a>00217 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcTimeout() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00218"></a>00218 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00219"></a>00219 << <span class="stringliteral">" Ping RPC Call timed out: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00220"></a>00220 << <span class="stringliteral">" msg="</span> << *_PubSubPingCall
- <a name="l00221"></a>00221 << <span class="stringliteral">" oldNode="</span> << dest
- <a name="l00222"></a>00222 << endl;
- <a name="l00223"></a>00223 <span class="keywordflow">break</span>;
- <a name="l00224"></a>00224 }
- <a name="l00225"></a>00225 <a class="code" href="RpcMacros_8h.html#ae07fad586ce7b9e82ad12848767a32e5">RPC_ON_CALL</a>( PubSubSubscription ) {
- <a name="l00226"></a>00226 <a class="code" href="classPubSubMMOG.html#a1e97ea82ff0848af1f5437b1c8da7c99">handleSubscriptionCallTimeout</a>( _PubSubSubscriptionCall, dest );
- <a name="l00227"></a>00227 EV << <span class="stringliteral">"[PubSubMMOG::handleRpcTimeout() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00228"></a>00228 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00229"></a>00229 << <span class="stringliteral">" Subscription RPC Call timed out: id="</span> << rpcId << <span class="stringliteral">"\n"</span>
- <a name="l00230"></a>00230 << <span class="stringliteral">" msg="</span> << *_PubSubSubscriptionCall
- <a name="l00231"></a>00231 << <span class="stringliteral">" oldNode="</span> << dest
- <a name="l00232"></a>00232 << endl;
- <a name="l00233"></a>00233 <span class="keywordflow">break</span>;
- <a name="l00234"></a>00234 }
- <a name="l00235"></a>00235 <a class="code" href="RpcMacros_8h.html#a29a8a3f21e67ecb25f58608a54df5191" title="Marks the end of a Remote-Procedure-Call Switch block.">RPC_SWITCH_END</a>( )
- <a name="l00236"></a>00236
- <a name="l00237"></a>00237 <span class="comment">// FIXME:</span>
- <a name="l00238"></a>00238 <span class="comment">// AdoptCall missing!</span>
- <a name="l00239"></a>00239 <span class="comment">// IntermediateCall missing!</span>
- <a name="l00240"></a>00240 <span class="comment">// (ResponsibleNodeCall missing)</span>
- <a name="l00241"></a>00241 <span class="comment">// (HelpCall missing)</span>
- <a name="l00242"></a>00242 }
- <a name="l00243"></a>00243
- <a name="l00244"></a><a class="code" href="classPubSubMMOG.html#a4af2596c5cc972a1c4dacfde82c989ee">00244</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a4af2596c5cc972a1c4dacfde82c989ee" title="Processes messages from underlay.">PubSubMMOG::handleUDPMessage</a>(<a class="code" href="classBaseOverlayMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseOverlayMessage</a>* msg)
- <a name="l00245"></a>00245 {
- <a name="l00246"></a>00246 <span class="keywordflow">if</span>( <a class="code" href="classPubSubMoveListMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubMoveListMessage</a>* moveMsg = dynamic_cast<PubSubMoveListMessage*>(msg) ){
- <a name="l00247"></a>00247 <a class="code" href="classPubSubMMOG.html#a9d46909d81ca32d3ec2020a7184c3f50">handleMoveListMessage</a>( moveMsg );
- <a name="l00248"></a>00248 <span class="keyword">delete</span> moveMsg;
- <a name="l00249"></a>00249 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <a class="code" href="classPubSubMoveMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubMoveMessage</a>* moveMsg = dynamic_cast<PubSubMoveMessage*>(msg) ){
- <a name="l00250"></a>00250 <a class="code" href="classPubSubMMOG.html#aa5f5b3bb6f7a4a26ab45dfdb6248f21b">handleMoveMessage</a>( moveMsg );
- <a name="l00251"></a>00251 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <a class="code" href="classPubSubUnsubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubUnsubscriptionMessage</a>* unsMsg = dynamic_cast<PubSubUnsubscriptionMessage*>(msg) ){
- <a name="l00252"></a>00252 <a class="code" href="classPubSubMMOG.html#a1e837eb023ac96a24c564e8c42da7c87">handleUnsubscriptionMessage</a>( unsMsg );
- <a name="l00253"></a>00253 <span class="keyword">delete</span> unsMsg;
- <a name="l00254"></a>00254 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>* leftMsg = dynamic_cast<PubSubNodeLeftMessage*>(msg) ){
- <a name="l00255"></a>00255 <a class="code" href="classPubSubMMOG.html#a73afcba7483897f08cfb5d258e569683">handleNodeLeftMessage</a>( leftMsg );
- <a name="l00256"></a>00256 <span class="keyword">delete</span> leftMsg;
- <a name="l00257"></a>00257 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <a class="code" href="classPubSubReplacementMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubReplacementMessage</a>* replaceMsg = dynamic_cast<PubSubReplacementMessage*>(msg) ){
- <a name="l00258"></a>00258 <a class="code" href="classPubSubMMOG.html#abd3f25e6c1521cc5d6959fc1929a2ac6">handleReplacementMessage</a>( replaceMsg );
- <a name="l00259"></a>00259 <span class="keyword">delete</span> replaceMsg;
- <a name="l00260"></a>00260 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>* backupMsg = dynamic_cast<PubSubBackupSubscriptionMessage*>(msg) ){
- <a name="l00261"></a>00261 <a class="code" href="classPubSubMMOG.html#a354f1a0173cb3cc5a00bc7d16d17f73a">handleSubscriptionBackup</a>( backupMsg );
- <a name="l00262"></a>00262 <span class="keyword">delete</span> backupMsg;
- <a name="l00263"></a>00263 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <a class="code" href="classPubSubBackupUnsubscribeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupUnsubscribeMessage</a>* backupMsg = dynamic_cast<PubSubBackupUnsubscribeMessage*>(msg) ){
- <a name="l00264"></a>00264 <a class="code" href="classPubSubMMOG.html#a74e961ef109ba657e32f82519721eeaf">handleUnsubscribeBackup</a>( backupMsg );
- <a name="l00265"></a>00265 <span class="keyword">delete</span> backupMsg;
- <a name="l00266"></a>00266 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <a class="code" href="classPubSubBackupIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupIntermediateMessage</a>* backupMsg = dynamic_cast<PubSubBackupIntermediateMessage*>(msg) ){
- <a name="l00267"></a>00267 <a class="code" href="classPubSubMMOG.html#a77b144f6034216ef0184589cf5b4da8d">handleIntermediateBackup</a>( backupMsg );
- <a name="l00268"></a>00268 <span class="keyword">delete</span> backupMsg;
- <a name="l00269"></a>00269 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <a class="code" href="classPubSubReleaseIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubReleaseIntermediateMessage</a>* releaseMsg = dynamic_cast<PubSubReleaseIntermediateMessage*>(msg) ){
- <a name="l00270"></a>00270 <a class="code" href="classPubSubMMOG.html#af1197b5fab38765c9e510cb6e755f62a">handleReleaseIntermediate</a>( releaseMsg );
- <a name="l00271"></a>00271 <span class="keyword">delete</span> releaseMsg;
- <a name="l00272"></a>00272 }
- <a name="l00273"></a>00273 }
- <a name="l00274"></a>00274
- <a name="l00275"></a><a class="code" href="classPubSubMMOG.html#a3df1116194918ab1768c1afbdef4fb00">00275</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a3df1116194918ab1768c1afbdef4fb00">PubSubMMOG::handleTimerEvent</a>(cMessage* msg)
- <a name="l00276"></a>00276 {
- <a name="l00277"></a>00277 <span class="keywordflow">if</span>( <a class="code" href="classPubSubTimer.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTimer</a>* timer = dynamic_cast<PubSubTimer*>(msg) ) {
- <a name="l00278"></a>00278 <span class="keywordflow">switch</span>( timer->getType() ) {
- <a name="l00279"></a>00279 <span class="keywordflow">case</span> <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04caec28dc4bd962108ceb27575f46b81ebd">PUBSUB_HEARTBEAT</a>:
- <a name="l00280"></a>00280 <a class="code" href="classPubSubMMOG.html#a237b78a3abc9b6cbb95021e25306e2e2">sendHearbeatToChildren</a>();
- <a name="l00281"></a>00281 <a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">startTimer</a>( timer );
- <a name="l00282"></a>00282 <span class="keywordflow">break</span>;
- <a name="l00283"></a>00283 <span class="keywordflow">case</span> <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04caa64f2984ebaaa94fb52bc3ff99d24fa1">PUBSUB_CHILDPING</a>:
- <a name="l00284"></a>00284 <a class="code" href="classPubSubMMOG.html#abd00be445c110f527365d00553713334">sendPingToChildren</a>();
- <a name="l00285"></a>00285 <a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">startTimer</a>( timer );
- <a name="l00286"></a>00286 <span class="keywordflow">break</span>;
- <a name="l00287"></a>00287 <span class="keywordflow">case</span> <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04cad6da37474996a5016fe145fcc24a52c8">PUBSUB_PARENT_TIMEOUT</a>:
- <a name="l00288"></a>00288 <a class="code" href="classPubSubMMOG.html#a01a6bc8e4b0e38e57d2e3108088f67f3">handleParentTimeout</a>( timer );
- <a name="l00289"></a>00289 <span class="keywordflow">break</span>;
- <a name="l00290"></a>00290 <span class="keywordflow">case</span> <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04cab87b77accd020036a875063be27c753c">PUBSUB_EVENTDELIVERY</a>:
- <a name="l00291"></a>00291 <a class="code" href="classPubSubMMOG.html#a3c4d846c243253afb0f72592e44590ff">publishEvents</a>();
- <a name="l00292"></a>00292 <a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">startTimer</a>( timer );
- <a name="l00293"></a>00293 <span class="keywordflow">break</span>;
- <a name="l00294"></a>00294 }
- <a name="l00295"></a>00295 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( msg == <a class="code" href="classPubSubMMOG.html#a04199b677abdfd25b29f9a5f79c19426">joinTimer</a> ) {
- <a name="l00296"></a>00296 <span class="comment">// send a fake ready message to app to get initial position</span>
- <a name="l00297"></a>00297 <span class="comment">// Note: This is not consistent to the paper, where the lobby server</span>
- <a name="l00298"></a>00298 <span class="comment">// positions player. But it is needed for consistency with other MMOG protocols</span>
- <a name="l00299"></a>00299 <a class="code" href="classCompReadyMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">CompReadyMessage</a>* msg = <span class="keyword">new</span> <a class="code" href="classCompReadyMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">CompReadyMessage</a>(<span class="stringliteral">"fake READY"</span>);
- <a name="l00300"></a>00300 msg-><a class="code" href="classCompReadyMessage.html#ac5158504d6b97a32974f14c9b1a7a662">setReady</a>(<span class="keyword">true</span>);
- <a name="l00301"></a>00301 msg-><a class="code" href="classCompReadyMessage.html#ad9a52c5f788e0c11a75bbb5df3855ac0">setComp</a>(<a class="code" href="classBaseOverlay.html#a92e0d3f96a5716245465e05da60ef487">getThisCompType</a>());
- <a name="l00302"></a>00302 send( msg, <span class="stringliteral">"appOut"</span>);
- <a name="l00303"></a>00303 <span class="keyword">delete</span> <a class="code" href="classPubSubMMOG.html#a04199b677abdfd25b29f9a5f79c19426">joinTimer</a>;
- <a name="l00304"></a>00304 <a class="code" href="classPubSubMMOG.html#a04199b677abdfd25b29f9a5f79c19426">joinTimer</a> = NULL;
- <a name="l00305"></a>00305 <span class="comment">// send initial AOI size to the application</span>
- <a name="l00306"></a>00306 <span class="comment">// Note: This is not consistent to the paper.</span>
- <a name="l00307"></a>00307 <span class="comment">// But it is needed for this nodes movement generation within the application layer.</span>
- <a name="l00308"></a>00308 <a class="code" href="classGameAPIResizeAOIMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">GameAPIResizeAOIMessage</a>* gameMsg = <span class="keyword">new</span> <a class="code" href="classGameAPIResizeAOIMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">GameAPIResizeAOIMessage</a>(<span class="stringliteral">"RESIZE_AOI"</span>);
- <a name="l00309"></a>00309 gameMsg-><a class="code" href="classGameAPIMessage.html#a3c12a88e720037a70248b0db6a46fc99">setCommand</a>(<a class="code" href="CommonMessages__m_8h.html#ac76e82bc37e4b2b364247c7cff8f7b6ba04223e5523bbf330b2553e5ba3e320d1">RESIZE_AOI</a>);
- <a name="l00310"></a>00310 gameMsg-><a class="code" href="classGameAPIResizeAOIMessage.html#a8fc4ba8f739fae9c8f24eae1482271c3">setAOIsize</a>(<a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a>);
- <a name="l00311"></a>00311 send( gameMsg, <span class="stringliteral">"appOut"</span>);
- <a name="l00312"></a>00312 }
- <a name="l00313"></a>00313 }
- <a name="l00314"></a>00314
- <a name="l00315"></a><a class="code" href="classPubSubMMOG.html#aa755315cd277b3c3cad5522cb7acb9dc">00315</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#aa755315cd277b3c3cad5522cb7acb9dc" title="Processes &quot;timer&quot; self-messages.">PubSubMMOG::handleAppMessage</a>(cMessage* msg)
- <a name="l00316"></a>00316 {
- <a name="l00317"></a>00317 <span class="keywordflow">if</span>( <a class="code" href="classGameAPIPositionMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">GameAPIPositionMessage</a> *posMsg = dynamic_cast<GameAPIPositionMessage*>(msg) ) {
- <a name="l00318"></a>00318 <span class="keywordflow">if</span>( <a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> == <a class="code" href="classBaseOverlay.html#a0ad4b12b0c9949661f66db7fbbf7d40fab3a263fb274a58d63b15cd61ba910335">READY</a> ) {
- <a name="l00319"></a>00319 <a class="code" href="classPubSubMMOG.html#a271c0f8b14c7c023c26a1a3f19e156a4">handleMove</a>( posMsg );
- <a name="l00320"></a>00320 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( <a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> == <a class="code" href="classBaseOverlay.html#a0ad4b12b0c9949661f66db7fbbf7d40fabe22ce6e9471e472a566ba6cc27fbb5a">JOINING</a> ) {
- <a name="l00321"></a>00321 <span class="comment">// We are not connected to our responsible node, inform app</span>
- <a name="l00322"></a>00322 <a class="code" href="classCompReadyMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">CompReadyMessage</a>* msg = <span class="keyword">new</span> <a class="code" href="classCompReadyMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">CompReadyMessage</a>(<span class="stringliteral">"Overlay not READY!"</span>);
- <a name="l00323"></a>00323 msg-><a class="code" href="classCompReadyMessage.html#ac5158504d6b97a32974f14c9b1a7a662">setReady</a>(<span class="keyword">false</span>);
- <a name="l00324"></a>00324 msg-><a class="code" href="classCompReadyMessage.html#ad9a52c5f788e0c11a75bbb5df3855ac0">setComp</a>(<a class="code" href="classBaseOverlay.html#a92e0d3f96a5716245465e05da60ef487">getThisCompType</a>());
- <a name="l00325"></a>00325 send( msg, <span class="stringliteral">"appOut"</span>);
- <a name="l00326"></a>00326 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( <a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> == <a class="code" href="classBaseOverlay.html#a0ad4b12b0c9949661f66db7fbbf7d40fa4c1b397f6c4682baf7db280e7f15520a">INIT</a> ) {
- <a name="l00327"></a>00327 <span class="comment">// This is only called for the first MOVE message</span>
- <a name="l00328"></a>00328 <span class="comment">// Trigger login</span>
- <a name="l00329"></a>00329 <a class="code" href="classPubSubJoinCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubJoinCall</a>* joinMsg = <span class="keyword">new</span> <a class="code" href="classPubSubJoinCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubJoinCall</a>(<span class="stringliteral">"Login"</span>);
- <a name="l00330"></a>00330 joinMsg-><a class="code" href="classPubSubJoinCall.html#aa1d1f2b5fcf350365345935911a762b9">setPosition</a>( posMsg->getPosition() );
- <a name="l00331"></a>00331 <span class="comment">// FIXME: Ressource handling not yet supported!</span>
- <a name="l00332"></a>00332 joinMsg-><a class="code" href="classPubSubJoinCall.html#a671222a538f28ecafafef8991bf45dde">setRessources</a>( 4 );
- <a name="l00333"></a>00333 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, joinMsg );
- <a name="l00334"></a>00334
- <a name="l00335"></a>00335 <a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> = JOINING;
- <a name="l00336"></a>00336 <a class="code" href="classPubSubMMOG.html#a3e573d9ce39091daea435016a587b239">setBootstrapedIcon</a>();
- <a name="l00337"></a>00337
- <a name="l00338"></a>00338 <span class="comment">// tell app to wait until login is confirmed...</span>
- <a name="l00339"></a>00339 <a class="code" href="classCompReadyMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">CompReadyMessage</a>* readyMsg = <span class="keyword">new</span> <a class="code" href="classCompReadyMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">CompReadyMessage</a>(<span class="stringliteral">"Overlay not READY!"</span>);
- <a name="l00340"></a>00340 readyMsg-><a class="code" href="classCompReadyMessage.html#ac5158504d6b97a32974f14c9b1a7a662">setReady</a>(<span class="keyword">false</span>);
- <a name="l00341"></a>00341 readyMsg-><a class="code" href="classCompReadyMessage.html#ad9a52c5f788e0c11a75bbb5df3855ac0">setComp</a>(<a class="code" href="classBaseOverlay.html#a92e0d3f96a5716245465e05da60ef487">getThisCompType</a>());
- <a name="l00342"></a>00342 send( readyMsg, <span class="stringliteral">"appOut"</span>);
- <a name="l00343"></a>00343
- <a name="l00344"></a>00344 <a class="code" href="classPubSubMMOG.html#a6adc937050de85cfcffa4561b6daee84">currentRegionX</a> = (<span class="keywordtype">unsigned</span> int) (posMsg->getPosition().x/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00345"></a>00345 <a class="code" href="classPubSubMMOG.html#aa43137704c5ad5a9fecbff8a01ce38bc">currentRegionY</a> = (<span class="keywordtype">unsigned</span> int) (posMsg->getPosition().y/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00346"></a>00346 }
- <a name="l00347"></a>00347 <span class="keyword">delete</span> msg;
- <a name="l00348"></a>00348 }
- <a name="l00349"></a>00349 }
- <a name="l00350"></a>00350
- <a name="l00351"></a><a class="code" href="classPubSubMMOG.html#a7d6b63042aee9dfbe3d11d2062a43a05">00351</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a7d6b63042aee9dfbe3d11d2062a43a05">PubSubMMOG::handleSubscriptionResponse</a>( <a class="code" href="classPubSubSubscriptionResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionResponse</a>* subResp )
- <a name="l00352"></a>00352 {
- <a name="l00353"></a>00353 <span class="keywordflow">if</span>( subResp-><a class="code" href="classPubSubSubscriptionResponse.html#a8b39219b33424e4eeac34caa2b835156">getFailed</a>() ) {
- <a name="l00354"></a>00354 <span class="comment">// TODO: get new resp node...</span>
- <a name="l00355"></a>00355 } <span class="keywordflow">else</span> {
- <a name="l00356"></a>00356 <span class="keywordflow">if</span>( <a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> != <a class="code" href="classBaseOverlay.html#a0ad4b12b0c9949661f66db7fbbf7d40fab3a263fb274a58d63b15cd61ba910335">READY</a> ){
- <a name="l00357"></a>00357 <a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> = READY;
- <a name="l00358"></a>00358 <a class="code" href="classPubSubMMOG.html#a3e573d9ce39091daea435016a587b239">setBootstrapedIcon</a>();
- <a name="l00359"></a>00359 <a class="code" href="classCompReadyMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">CompReadyMessage</a>* readyMsg = <span class="keyword">new</span> <a class="code" href="classCompReadyMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">CompReadyMessage</a>(<span class="stringliteral">"Overlay READY!"</span>);
- <a name="l00360"></a>00360 readyMsg-><a class="code" href="classCompReadyMessage.html#ac5158504d6b97a32974f14c9b1a7a662">setReady</a>(<span class="keyword">true</span>);
- <a name="l00361"></a>00361 readyMsg-><a class="code" href="classCompReadyMessage.html#ad9a52c5f788e0c11a75bbb5df3855ac0">setComp</a>(<a class="code" href="classBaseOverlay.html#a92e0d3f96a5716245465e05da60ef487">getThisCompType</a>());
- <a name="l00362"></a>00362 sendDelayed( readyMsg, ceil(simTime()) - simTime(), <span class="stringliteral">"appOut"</span> );
- <a name="l00363"></a>00363 }
- <a name="l00364"></a>00364 }
- <a name="l00365"></a>00365 }
- <a name="l00366"></a>00366
- <a name="l00367"></a><a class="code" href="classPubSubMMOG.html#a90f7b9fa68b400b80892d642f4c439b4">00367</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a90f7b9fa68b400b80892d642f4c439b4">PubSubMMOG::handleJoinResponse</a>( <a class="code" href="classPubSubJoinResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubJoinResponse</a>* joinResp )
- <a name="l00368"></a>00368 {
- <a name="l00369"></a>00369 <a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> = JOINING;
- <a name="l00370"></a>00370 <a class="code" href="classPubSubMMOG.html#a3e573d9ce39091daea435016a587b239">setBootstrapedIcon</a>();
- <a name="l00371"></a>00371 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> region( <a class="code" href="classPubSubMMOG.html#a6adc937050de85cfcffa4561b6daee84">currentRegionX</a>, <a class="code" href="classPubSubMMOG.html#aa43137704c5ad5a9fecbff8a01ce38bc">currentRegionY</a>, <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l00372"></a>00372
- <a name="l00373"></a>00373 <a class="code" href="classNodeHandle.html" title="This class implements a node handle.">NodeHandle</a> respNode = joinResp-><a class="code" href="classPubSubJoinResponse.html#af6b6ef0423fb75458fdde7f977ad8623">getResponsibleNode</a>();
- <a name="l00374"></a>00374 <a class="code" href="classPubSubSubspace.html">PubSubSubspace</a> sub(region);
- <a name="l00375"></a>00375 sub.<a class="code" href="classPubSubSubspace.html#addf352c69955906dd9bda7e0a0c09dbb">setResponsibleNode</a>( respNode );
- <a name="l00376"></a>00376 <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.push_back( sub );
- <a name="l00377"></a>00377 <span class="keywordflow">if</span>( respNode.<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ) {
- <a name="l00378"></a>00378 <a class="code" href="classPubSubResponsibleNodeCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubResponsibleNodeCall</a>* respCall = <span class="keyword">new</span> <a class="code" href="classPubSubResponsibleNodeCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubResponsibleNodeCall</a>(<span class="stringliteral">"Request Responsible NodeHandle"</span>);
- <a name="l00379"></a>00379 respCall-><a class="code" href="classPubSubResponsibleNodeCall.html#a061903ad243ddb58c094ee5a3c5a206b">setSubspacePos</a>( <a class="code" href="classVector2D.html">Vector2D</a>(<a class="code" href="classPubSubMMOG.html#a6adc937050de85cfcffa4561b6daee84">currentRegionX</a>, <a class="code" href="classPubSubMMOG.html#aa43137704c5ad5a9fecbff8a01ce38bc">currentRegionY</a>) );
- <a name="l00380"></a>00380 respCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a5d4e7d4a5b91386ccba0e0a03330ab9d">PUBSUB_RESPONSIBLENODECALL_L</a>( respCall ) );
- <a name="l00381"></a>00381 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00382"></a>00382 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00383"></a>00383 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= respCall->getByteLength()
- <a name="l00384"></a>00384 );
- <a name="l00385"></a>00385 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, respCall, NULL, 5, 5 ); <span class="comment">// FIXME: Make it a parameter...</span>
- <a name="l00386"></a>00386 } <span class="keywordflow">else</span> {
- <a name="l00387"></a>00387 <a class="code" href="classPubSubSubscriptionCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionCall</a>* subCall = <span class="keyword">new</span> <a class="code" href="classPubSubSubscriptionCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionCall</a>(<span class="stringliteral">"JoinSubspace"</span>);
- <a name="l00388"></a>00388 subCall-><a class="code" href="classPubSubSubscriptionCall.html#a355f33ad98b1c4c34b0a41196470f5c7">setSubspaceId</a>( region.<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l00389"></a>00389 subCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a2b5451b24d68787636358002b3292042">PUBSUB_SUBSCRIPTIONCALL_L</a>( subCall ));
- <a name="l00390"></a>00390 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00391"></a>00391 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00392"></a>00392 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= subCall->getByteLength()
- <a name="l00393"></a>00393 );
- <a name="l00394"></a>00394 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( respNode, subCall );
- <a name="l00395"></a>00395 }
- <a name="l00396"></a>00396 }
- <a name="l00397"></a>00397
- <a name="l00398"></a><a class="code" href="classPubSubMMOG.html#a7e351287bef39afa54408e4fce0fdf26">00398</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a7e351287bef39afa54408e4fce0fdf26">PubSubMMOG::handleResponsibleNodeResponse</a>( <a class="code" href="classPubSubResponsibleNodeResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubResponsibleNodeResponse</a>* subResp )
- <a name="l00399"></a>00399 {
- <a name="l00400"></a>00400 <span class="keywordtype">int</span> subspaceId = subResp-><a class="code" href="classPubSubResponsibleNodeResponse.html#a90f846a8230ff1c298116eae9320fc5f">getSubspaceId</a>();
- <a name="l00401"></a>00401 <a class="code" href="classNodeHandle.html" title="This class implements a node handle.">NodeHandle</a> respNode = subResp-><a class="code" href="classPubSubResponsibleNodeResponse.html#a9c9dcf7c0e9e43a34b80baba9761481d">getResponsibleNode</a>();
- <a name="l00402"></a>00402
- <a name="l00403"></a>00403 std::list<PubSubSubspace>::iterator it = <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.begin();
- <a name="l00404"></a>00404 <span class="keywordflow">while</span>( it != <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.end() ) {
- <a name="l00405"></a>00405 <span class="keywordflow">if</span>( it->getId().getId() == subspaceId) <span class="keywordflow">break</span>;
- <a name="l00406"></a>00406 ++it;
- <a name="l00407"></a>00407 }
- <a name="l00408"></a>00408 <span class="keywordflow">if</span>( it != <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.end() ) {
- <a name="l00409"></a>00409 it->setResponsibleNode( respNode );
- <a name="l00410"></a>00410
- <a name="l00411"></a>00411 <a class="code" href="classPubSubSubscriptionCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionCall</a>* subCall = <span class="keyword">new</span> <a class="code" href="classPubSubSubscriptionCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionCall</a>(<span class="stringliteral">"JoinSubspace"</span>);
- <a name="l00412"></a>00412 subCall-><a class="code" href="classPubSubSubscriptionCall.html#a355f33ad98b1c4c34b0a41196470f5c7">setSubspaceId</a>( subspaceId );
- <a name="l00413"></a>00413 subCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a2b5451b24d68787636358002b3292042">PUBSUB_SUBSCRIPTIONCALL_L</a>( subCall ));
- <a name="l00414"></a>00414 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00415"></a>00415 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00416"></a>00416 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= subCall->getByteLength()
- <a name="l00417"></a>00417 );
- <a name="l00418"></a>00418 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( respNode, subCall );
- <a name="l00419"></a>00419 }
- <a name="l00420"></a>00420 }
- <a name="l00421"></a>00421
- <a name="l00422"></a><a class="code" href="classPubSubMMOG.html#a1e837eb023ac96a24c564e8c42da7c87">00422</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a1e837eb023ac96a24c564e8c42da7c87">PubSubMMOG::handleUnsubscriptionMessage</a>( <a class="code" href="classPubSubUnsubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubUnsubscriptionMessage</a>* unsMsg )
- <a name="l00423"></a>00423 {
- <a name="l00424"></a>00424 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l00425"></a>00425 it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(unsMsg-><a class="code" href="classPubSubUnsubscriptionMessage.html#aefd5581bbccb1322572d4623a9b7098c">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l00426"></a>00426
- <a name="l00427"></a>00427 <span class="keywordflow">if</span>( it != <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end() ) {
- <a name="l00428"></a>00428 <a class="code" href="classPubSubMMOG.html#a104570a1f3f3f4951bf67e9b8e09b0e8">unsubscribeChild</a>( unsMsg-><a class="code" href="classPubSubUnsubscriptionMessage.html#a4c20f9918ebc12a6567fb6600abbca19">getSrc</a>(), it->second );
- <a name="l00429"></a>00429 }
- <a name="l00430"></a>00430 }
- <a name="l00431"></a>00431
- <a name="l00432"></a><a class="code" href="classPubSubMMOG.html#a73afcba7483897f08cfb5d258e569683">00432</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a73afcba7483897f08cfb5d258e569683">PubSubMMOG::handleNodeLeftMessage</a>( <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>* leftMsg )
- <a name="l00433"></a>00433 {
- <a name="l00434"></a>00434 std::map<PubSubSubspaceId, PubSubSubspaceIntermediate>::iterator it;
- <a name="l00435"></a>00435 it = <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(leftMsg-><a class="code" href="classPubSubNodeLeftMessage.html#a5bdc2448771e8e102f2a1742669e3ff4">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l00436"></a>00436
- <a name="l00437"></a>00437 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.end() ) <span class="keywordflow">return</span>;
- <a name="l00438"></a>00438
- <a name="l00439"></a>00439 it->second.removeChild( leftMsg-><a class="code" href="classPubSubNodeLeftMessage.html#a3ade8236d7ce506a1805f3e1f7aa87d8">getNode</a>() );
- <a name="l00440"></a>00440 }
- <a name="l00441"></a>00441
- <a name="l00442"></a><a class="code" href="classPubSubMMOG.html#a3d1fd761fc46a4b56f1c7e852bf41207">00442</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a3d1fd761fc46a4b56f1c7e852bf41207">PubSubMMOG::handleSubscriptionCall</a>( <a class="code" href="classPubSubSubscriptionCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionCall</a>* subCall )
- <a name="l00443"></a>00443 {
- <a name="l00444"></a>00444 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l00445"></a>00445 it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(subCall-><a class="code" href="classPubSubSubscriptionCall.html#a6cba83861e6c98de7a2721a596d2ff14">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l00446"></a>00446
- <a name="l00447"></a>00447 <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>* backupMsg = 0;
- <a name="l00448"></a>00448 <a class="code" href="classPubSubSubscriptionResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionResponse</a>* resp;
- <a name="l00449"></a>00449 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end() ) {
- <a name="l00450"></a>00450 resp = <span class="keyword">new</span> <a class="code" href="classPubSubSubscriptionResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionResponse</a>(<span class="stringliteral">"Subscription failed"</span>);
- <a name="l00451"></a>00451 resp-><a class="code" href="classPubSubSubscriptionResponse.html#abad61d57d13b094bce4e5979ad5c58ff">setFailed</a>( <span class="keyword">true</span> );
- <a name="l00452"></a>00452 } <span class="keywordflow">else</span> {
- <a name="l00453"></a>00453 resp = <span class="keyword">new</span> <a class="code" href="classPubSubSubscriptionResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionResponse</a>(<span class="stringliteral">"Subscription successful"</span>);
- <a name="l00454"></a>00454 backupMsg = <span class="keyword">new</span> <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>(<span class="stringliteral">"Backup: new subscription"</span>);
- <a name="l00455"></a>00455 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a3b6847353d9871bcc13c01ac682c7739">setSubspaceId</a>( subCall-><a class="code" href="classPubSubSubscriptionCall.html#a6cba83861e6c98de7a2721a596d2ff14">getSubspaceId</a>() );
- <a name="l00456"></a>00456 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#ab3a10059be8de4c048576c72a1c83fc7">setChild</a>( subCall-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>() );
- <a name="l00457"></a>00457
- <a name="l00458"></a>00458 <span class="keywordflow">if</span>( it->second.addChild( subCall-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>() )) {
- <a name="l00459"></a>00459 <span class="comment">// We have still room for the child</span>
- <a name="l00460"></a>00460 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#af4c25a5bb0a0f1efeb34cf2c13a9bc38">setParent</a>( <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a> );
- <a name="l00461"></a>00461 } <span class="keywordflow">else</span> {
- <a name="l00462"></a>00462 <span class="comment">// Child has to go to an intermediate node...</span>
- <a name="l00463"></a>00463 <span class="keywordflow">if</span>( <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a>* iNode = it->second.getNextFreeIntermediate() ){
- <a name="l00464"></a>00464 <span class="comment">// find intermediate node with free slots</span>
- <a name="l00465"></a>00465 <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>* adoptCall = <span class="keyword">new</span> <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>(<span class="stringliteral">"Adopt child"</span>);
- <a name="l00466"></a>00466 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a117550b7b25e69c5b16b35a6a7d6d019">setChild</a>( subCall-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>() );
- <a name="l00467"></a>00467 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a2c7d51a5d0c8ef5b2f7a07d9a4559aa1">setSubspaceId</a>( subCall-><a class="code" href="classPubSubSubscriptionCall.html#a6cba83861e6c98de7a2721a596d2ff14">getSubspaceId</a>() );
- <a name="l00468"></a>00468 adoptCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a40172b8994bee9881c879d1f69994013">PUBSUB_ADOPTCHILDCALL_L</a>( adoptCall ));
- <a name="l00469"></a>00469 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( iNode->node, adoptCall );
- <a name="l00470"></a>00470 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00471"></a>00471 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00472"></a>00472 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= adoptCall->getByteLength()
- <a name="l00473"></a>00473 );
- <a name="l00474"></a>00474 iNode->waitingChildren++;
- <a name="l00475"></a>00475 } <span class="keywordflow">else</span> {
- <a name="l00476"></a>00476 <span class="comment">// no free slots available, create new intermediate node</span>
- <a name="l00477"></a>00477 <span class="comment">// FIXME: when getting two subscriptions at once, we're requesting too many intermediates</span>
- <a name="l00478"></a>00478 <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>* helpCall = <span class="keyword">new</span> <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>(<span class="stringliteral">"I need an intermediate node"</span>);
- <a name="l00479"></a>00479 helpCall-><a class="code" href="classPubSubHelpCall.html#a8f442b6f719d15e347aa4187fb3d2b47">setHelpType</a>( <a class="code" href="PubSubMessage__m_8h.html#a0a7abf0acc5a382f3b386ab1a09cd07aa99501a84d5d53b3a4c78362dc7c7a551">PUBSUB_INTERMEDIATE</a> );
- <a name="l00480"></a>00480 helpCall-><a class="code" href="classPubSubHelpCall.html#a526546e7f6cc281b640ffabca6fd4f29">setSubspaceId</a>( subCall-><a class="code" href="classPubSubSubscriptionCall.html#a6cba83861e6c98de7a2721a596d2ff14">getSubspaceId</a>() );
- <a name="l00481"></a>00481 helpCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#aac95c8ba038a0a9dd3671a29330493a9">PUBSUB_HELPCALL_L</a>( helpCall ));
- <a name="l00482"></a>00482 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, helpCall );
- <a name="l00483"></a>00483 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00484"></a>00484 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00485"></a>00485 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= helpCall->getByteLength()
- <a name="l00486"></a>00486 );
- <a name="l00487"></a>00487 }
- <a name="l00488"></a>00488 }
- <a name="l00489"></a>00489 }
- <a name="l00490"></a>00490 resp->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a2d60280823412936f4ce8dc98ae3fb41">PUBSUB_SUBSCRIPTIONRESPONSE_L</a>( resp ));
- <a name="l00491"></a>00491 <a class="code" href="classBaseRpc.html#adc06091d348c98a5efbf54fe0afe8747" title="Send Remote-Procedure response message and deletes call message.">sendRpcResponse</a>( subCall, resp );
- <a name="l00492"></a>00492 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00493"></a>00493 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00494"></a>00494 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= resp->getByteLength()
- <a name="l00495"></a>00495 );
- <a name="l00496"></a>00496
- <a name="l00497"></a>00497 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end() ) <span class="keywordflow">return</span>;
- <a name="l00498"></a>00498
- <a name="l00499"></a>00499 <span class="comment">// FIXME: just for testing</span>
- <a name="l00500"></a>00500 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace = it->second;
- <a name="l00501"></a>00501 <span class="keywordtype">int</span> iii = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>();
- <a name="l00502"></a>00502 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l00503"></a>00503 <span class="keywordflow">if</span>( iii != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>() ){
- <a name="l00504"></a>00504 opp_error(<span class="stringliteral">"Huh?"</span>);
- <a name="l00505"></a>00505 }
- <a name="l00506"></a>00506
- <a name="l00507"></a>00507 <span class="keywordflow">if</span>( !it->second.getBackupNode().isUnspecified() ){
- <a name="l00508"></a>00508 backupMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a485654404a477aa60cb34dd0ae722258">PUBSUB_BACKUPSUBSCRIPTION_L</a>( backupMsg ));
- <a name="l00509"></a>00509 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00510"></a>00510 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00511"></a>00511 pubSubSignalingMessagesSize+= backupMsg->getByteLength()
- <a name="l00512"></a>00512 );
- <a name="l00513"></a>00513 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( it->second.getBackupNode(), backupMsg );
- <a name="l00514"></a>00514 } <span class="keywordflow">else</span> {
- <a name="l00515"></a>00515 <span class="keyword">delete</span> backupMsg;
- <a name="l00516"></a>00516 }
- <a name="l00517"></a>00517 }
- <a name="l00518"></a>00518
- <a name="l00519"></a><a class="code" href="classPubSubMMOG.html#af504bf4e0b52404912395baefed9f5c5">00519</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#af504bf4e0b52404912395baefed9f5c5">PubSubMMOG::handleTakeOver</a>( <a class="code" href="classPubSubTakeOverSubspaceCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTakeOverSubspaceCall</a>* toCall )
- <a name="l00520"></a>00520 {
- <a name="l00521"></a>00521 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> region((<span class="keywordtype">int</span>) toCall-><a class="code" href="classPubSubTakeOverSubspaceCall.html#afed679f34e29e2f4265a16e6e59e38ec">getSubspacePos</a>().<a class="code" href="classVector2D.html#ac5c4e553815737aa24bec8281270178f">x</a>, (int) toCall-><a class="code" href="classPubSubTakeOverSubspaceCall.html#afed679f34e29e2f4265a16e6e59e38ec">getSubspacePos</a>().<a class="code" href="classVector2D.html#ac38d0179cfe74c30fee290a703ab209a">y</a>, <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l00522"></a>00522
- <a name="l00523"></a>00523 <a class="code" href="classPubSubMMOG.html#a0fe097eb8ff809023d0a119b2dc17d61">takeOverNewSubspace</a>( region );
- <a name="l00524"></a>00524
- <a name="l00525"></a>00525 <a class="code" href="classPubSubTakeOverSubspaceResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTakeOverSubspaceResponse</a>* toResp = <span class="keyword">new</span> <a class="code" href="classPubSubTakeOverSubspaceResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTakeOverSubspaceResponse</a>(<span class="stringliteral">"Accept subspace responsibility"</span>);
- <a name="l00526"></a>00526 toResp-><a class="code" href="classPubSubTakeOverSubspaceResponse.html#ae49972429f20a87863627c7ec3e13ac4">setSubspacePos</a>( toCall-><a class="code" href="classPubSubTakeOverSubspaceCall.html#afed679f34e29e2f4265a16e6e59e38ec">getSubspacePos</a>() );
- <a name="l00527"></a>00527 toResp->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a4b113dcf08095771bd96237e30495a29">PUBSUB_TAKEOVERSUBSPACERESPONSE_L</a>( toResp ));
- <a name="l00528"></a>00528 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00529"></a>00529 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00530"></a>00530 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= toResp->getByteLength()
- <a name="l00531"></a>00531 );
- <a name="l00532"></a>00532 <a class="code" href="classBaseRpc.html#adc06091d348c98a5efbf54fe0afe8747" title="Send Remote-Procedure response message and deletes call message.">sendRpcResponse</a>( toCall, toResp );
- <a name="l00533"></a>00533 }
- <a name="l00534"></a>00534
- <a name="l00535"></a><a class="code" href="classPubSubMMOG.html#ac789c61936dbd0e4787822022f0ecfba">00535</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#ac789c61936dbd0e4787822022f0ecfba" title="callback-method for events at the NotificationBoard">PubSubMMOG::receiveChangeNotification</a>(<span class="keywordtype">int</span> category, <span class="keyword">const</span> cPolymorphic *details)
- <a name="l00536"></a>00536 {
- <a name="l00537"></a>00537 <span class="keywordflow">if</span>(category == NF_OVERLAY_NODE_GRACEFUL_LEAVE && <a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> == <a class="code" href="classBaseOverlay.html#a0ad4b12b0c9949661f66db7fbbf7d40fab3a263fb274a58d63b15cd61ba910335">READY</a>) {
- <a name="l00538"></a>00538 }
- <a name="l00539"></a>00539 }
- <a name="l00540"></a>00540
- <a name="l00541"></a><a class="code" href="classPubSubMMOG.html#a271c0f8b14c7c023c26a1a3f19e156a4">00541</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a271c0f8b14c7c023c26a1a3f19e156a4">PubSubMMOG::handleMove</a>( <a class="code" href="classGameAPIPositionMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">GameAPIPositionMessage</a>* posMsg )
- <a name="l00542"></a>00542 {
- <a name="l00543"></a>00543 <a class="code" href="classPubSubMMOG.html#a6adc937050de85cfcffa4561b6daee84">currentRegionX</a> = (<span class="keywordtype">unsigned</span> int) (posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac5c4e553815737aa24bec8281270178f">x</a>/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00544"></a>00544 <a class="code" href="classPubSubMMOG.html#aa43137704c5ad5a9fecbff8a01ce38bc">currentRegionY</a> = (<span class="keywordtype">unsigned</span> int) (posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac38d0179cfe74c30fee290a703ab209a">y</a>/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00545"></a>00545
- <a name="l00546"></a>00546 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> region( <a class="code" href="classPubSubMMOG.html#a6adc937050de85cfcffa4561b6daee84">currentRegionX</a>, <a class="code" href="classPubSubMMOG.html#aa43137704c5ad5a9fecbff8a01ce38bc">currentRegionY</a>, <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l00547"></a>00547
- <a name="l00548"></a>00548 set<PubSubSubspaceId> expectedRegions;
- <a name="l00549"></a>00549 <span class="keywordtype">int</span> minX = (int) ((posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac5c4e553815737aa24bec8281270178f">x</a> - <a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a>)/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00550"></a>00550 <span class="keywordflow">if</span>( minX < 0 ) minX = 0;
- <a name="l00551"></a>00551 <span class="keywordtype">int</span> maxX = (int) ((posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac5c4e553815737aa24bec8281270178f">x</a> + <a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a>)/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00552"></a>00552 <span class="keywordflow">if</span>( maxX >= <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> ) maxX = <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> -1;
- <a name="l00553"></a>00553 <span class="keywordtype">int</span> minY = (int) ((posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac38d0179cfe74c30fee290a703ab209a">y</a> - <a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a>)/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00554"></a>00554 <span class="keywordflow">if</span>( minY < 0 ) minY = 0;
- <a name="l00555"></a>00555 <span class="keywordtype">int</span> maxY = (int) ((posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac38d0179cfe74c30fee290a703ab209a">y</a> + <a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a>)/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00556"></a>00556 <span class="keywordflow">if</span>( maxY >= <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> ) maxY = <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> -1;
- <a name="l00557"></a>00557
- <a name="l00558"></a>00558 <span class="comment">// FIXME: make parameter: unsubscription size</span>
- <a name="l00559"></a>00559 <span class="keywordtype">int</span> minUnsubX = (int) ((posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac5c4e553815737aa24bec8281270178f">x</a> - 1.5*<a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a>)/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00560"></a>00560 <span class="keywordflow">if</span>( minUnsubX < 0 ) minUnsubX = 0;
- <a name="l00561"></a>00561 <span class="keywordtype">int</span> maxUnsubX = (int) ((posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac5c4e553815737aa24bec8281270178f">x</a> + 1.5*<a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a>)/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00562"></a>00562 <span class="keywordflow">if</span>( maxUnsubX >= <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> ) maxUnsubX = <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> -1;
- <a name="l00563"></a>00563 <span class="keywordtype">int</span> minUnsubY = (int) ((posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac38d0179cfe74c30fee290a703ab209a">y</a> - 1.5*<a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a>)/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00564"></a>00564 <span class="keywordflow">if</span>( minUnsubY < 0 ) minUnsubY = 0;
- <a name="l00565"></a>00565 <span class="keywordtype">int</span> maxUnsubY = (int) ((posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>().<a class="code" href="classVector2D.html#ac38d0179cfe74c30fee290a703ab209a">y</a> + 1.5+<a class="code" href="classPubSubMMOG.html#ae02428124f2ac8a32da65ce4bcc7a927">AOIWidth</a>)/<a class="code" href="classPubSubMMOG.html#a45ee110f2b164e1902266585eaa1fb2c">subspaceSize</a>);
- <a name="l00566"></a>00566 <span class="keywordflow">if</span>( maxUnsubY >= <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> ) maxUnsubY = <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> -1;
- <a name="l00567"></a>00567
- <a name="l00568"></a>00568 <span class="keywordflow">for</span>( <span class="keywordtype">int</span> x = minX; x <= maxX; ++x ){
- <a name="l00569"></a>00569 <span class="keywordflow">for</span>( <span class="keywordtype">int</span> y = minY; y <= maxY; ++y ){
- <a name="l00570"></a>00570 expectedRegions.insert( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>( x, y, <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a> ));
- <a name="l00571"></a>00571 }
- <a name="l00572"></a>00572 }
- <a name="l00573"></a>00573
- <a name="l00574"></a>00574 list<PubSubSubspace>::iterator subIt = <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.begin();
- <a name="l00575"></a>00575 <a class="code" href="classPubSubSubspace.html">PubSubSubspace</a>* subspace = NULL;
- <a name="l00576"></a>00576 <span class="keywordflow">while</span>( subIt != <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.end() ){
- <a name="l00577"></a>00577 <span class="keywordflow">if</span>( subIt->getId() == region ){
- <a name="l00578"></a>00578 subspace = &*subIt;
- <a name="l00579"></a>00579 }
- <a name="l00580"></a>00580 expectedRegions.erase( subIt->getId() );
- <a name="l00581"></a>00581
- <a name="l00582"></a>00582 <span class="comment">// unsubscribe region if to far away</span>
- <a name="l00583"></a>00583 <span class="keywordflow">if</span>( subIt->getId().getX() < minX || subIt->getId().getX() > maxX ||
- <a name="l00584"></a>00584 subIt->getId().getY() < minY || subIt->getId().getY() > maxY ){
- <a name="l00585"></a>00585 <span class="keywordflow">if</span>( !subIt->getResponsibleNode().isUnspecified() ){
- <a name="l00586"></a>00586 <a class="code" href="classPubSubUnsubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubUnsubscriptionMessage</a>* unsubMsg = <span class="keyword">new</span> <a class="code" href="classPubSubUnsubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubUnsubscriptionMessage</a>(<span class="stringliteral">"Unsubscribe from subspace"</span>);
- <a name="l00587"></a>00587 unsubMsg-><a class="code" href="classPubSubUnsubscriptionMessage.html#a656cf3c6c48c16578ae1d65b73877484">setSubspaceId</a>( subIt->getId().getId() );
- <a name="l00588"></a>00588 unsubMsg-><a class="code" href="classPubSubUnsubscriptionMessage.html#ac537ed0026c0ee573cec021ad1c36168">setSrc</a>( <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a> );
- <a name="l00589"></a>00589 unsubMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a88c175706edd5bdd237ad0768aeb6ef8">PUBSUB_UNSUBSCRIPTION_L</a>( unsubMsg ));
- <a name="l00590"></a>00590 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00591"></a>00591 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00592"></a>00592 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= unsubMsg->getByteLength()
- <a name="l00593"></a>00593 );
- <a name="l00594"></a>00594 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( subIt->getResponsibleNode(), unsubMsg );
- <a name="l00595"></a>00595 }
- <a name="l00596"></a>00596 <span class="comment">// Erase subspace from subscribedList and increase iterator</span>
- <a name="l00597"></a>00597 <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.erase( subIt++ );
- <a name="l00598"></a>00598 } <span class="keywordflow">else</span> {
- <a name="l00599"></a>00599 ++subIt;
- <a name="l00600"></a>00600 }
- <a name="l00601"></a>00601 }
- <a name="l00602"></a>00602
- <a name="l00603"></a>00603 <span class="comment">// if any "near" region is not yet subscribed, subscribe</span>
- <a name="l00604"></a>00604 <span class="keywordflow">for</span>( set<PubSubSubspaceId>::iterator regionIt = expectedRegions.begin(); regionIt != expectedRegions.end(); ++regionIt ){
- <a name="l00605"></a>00605 <a class="code" href="classPubSubSubspace.html">PubSubSubspace</a> sub( *regionIt );
- <a name="l00606"></a>00606 <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.push_back( sub );
- <a name="l00607"></a>00607 <a class="code" href="classPubSubResponsibleNodeCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubResponsibleNodeCall</a>* respCall = <span class="keyword">new</span> <a class="code" href="classPubSubResponsibleNodeCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubResponsibleNodeCall</a>(<span class="stringliteral">"Request Responsible NodeHandle"</span>);
- <a name="l00608"></a>00608 respCall-><a class="code" href="classPubSubResponsibleNodeCall.html#a061903ad243ddb58c094ee5a3c5a206b">setSubspacePos</a>( <a class="code" href="classVector2D.html">Vector2D</a>(regionIt->getX(), regionIt->getY()) );
- <a name="l00609"></a>00609 respCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a5d4e7d4a5b91386ccba0e0a03330ab9d">PUBSUB_RESPONSIBLENODECALL_L</a>( respCall ));
- <a name="l00610"></a>00610 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00611"></a>00611 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00612"></a>00612 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= respCall->getByteLength()
- <a name="l00613"></a>00613 );
- <a name="l00614"></a>00614 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, respCall, NULL, 5, 5 ); <span class="comment">// FIXME: Make it a parameter...</span>
- <a name="l00615"></a>00615 }
- <a name="l00616"></a>00616
- <a name="l00617"></a>00617 <span class="keywordflow">if</span>( subspace && !subspace-><a class="code" href="classPubSubSubspace.html#a996b0242f4c47164d5ee2141755d8fb1">getResponsibleNode</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l00618"></a>00618 <a class="code" href="classPubSubMoveMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubMoveMessage</a>* moveMsg = <span class="keyword">new</span> <a class="code" href="classPubSubMoveMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubMoveMessage</a>(<span class="stringliteral">"Player move"</span>);
- <a name="l00619"></a>00619 moveMsg-><a class="code" href="classPubSubMoveMessage.html#a3681b2b0d2e91725b8b2ed5f5a41e0eb">setSubspaceId</a>( region.<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l00620"></a>00620 moveMsg-><a class="code" href="classPubSubMoveMessage.html#a81e96c238b0ae5e817f068e40d18c1b4">setPlayer</a>( <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a> );
- <a name="l00621"></a>00621 moveMsg-><a class="code" href="classPubSubMoveMessage.html#a519aeb2020aac887bd7b2955fbde056a">setPosition</a>( posMsg-><a class="code" href="classGameAPIPositionMessage.html#a62cb5e229193a2e0118e240de2494d53">getPosition</a>() );
- <a name="l00622"></a>00622 moveMsg-><a class="code" href="classPubSubMoveMessage.html#ae6b89218819defd7251470d3c5a7ab57">setTimestamp</a>( simTime() );
- <a name="l00623"></a>00623 moveMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a07feb8f3c2aaad5db67ec6860dec5c5d">PUBSUB_MOVE_L</a>( moveMsg ));
- <a name="l00624"></a>00624 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00625"></a>00625 ++<a class="code" href="classPubSubMMOG.html#a11ca86e89977d8bb4d1512a5e64ce8d3">numMoveMessages</a>;
- <a name="l00626"></a>00626 <a class="code" href="classPubSubMMOG.html#a122b6f4eacfc82a453cdabace026a0d5">moveMessagesSize</a>+= moveMsg->getByteLength()
- <a name="l00627"></a>00627 );
- <a name="l00628"></a>00628 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( subspace-><a class="code" href="classPubSubSubspace.html#a996b0242f4c47164d5ee2141755d8fb1">getResponsibleNode</a>(), moveMsg );
- <a name="l00629"></a>00629 } <span class="keywordflow">else</span> {
- <a name="l00630"></a>00630 <span class="comment">// trying to move to not-yet subscribed region</span>
- <a name="l00631"></a>00631 <span class="comment">// FIXME: change state to JOINING?</span>
- <a name="l00632"></a>00632 }
- <a name="l00633"></a>00633 }
- <a name="l00634"></a>00634
- <a name="l00635"></a><a class="code" href="classPubSubMMOG.html#aa5f5b3bb6f7a4a26ab45dfdb6248f21b">00635</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#aa5f5b3bb6f7a4a26ab45dfdb6248f21b">PubSubMMOG::handleMoveMessage</a>( <a class="code" href="classPubSubMoveMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubMoveMessage</a>* moveMsg )
- <a name="l00636"></a>00636 {
- <a name="l00637"></a>00637 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l00638"></a>00638 it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(moveMsg-><a class="code" href="classPubSubMoveMessage.html#ac5824dff148c7bface7054d5c257e14d">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l00639"></a>00639 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end() ){
- <a name="l00640"></a>00640 EV << <span class="stringliteral">"[PubSubMMOG::handleMoveMessage() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00641"></a>00641 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00642"></a>00642 << <span class="stringliteral">" received moveMessage for unknown subspace"</span> << moveMsg-><a class="code" href="classPubSubMoveMessage.html#ac5824dff148c7bface7054d5c257e14d">getSubspaceId</a>() << <span class="stringliteral">"\n"</span>
- <a name="l00643"></a>00643 << endl;
- <a name="l00644"></a>00644 <span class="keywordflow">return</span>;
- <a name="l00645"></a>00645 }
- <a name="l00646"></a>00646
- <a name="l00647"></a>00647 <span class="comment">// If message arrived in the correct timeslot, store move message until deadline</span>
- <a name="l00648"></a>00648 <span class="comment">// Note: This assumes, we get no messages with future timestamps. At least in</span>
- <a name="l00649"></a>00649 <span class="comment">// the simulation, this assumption will hold.</span>
- <a name="l00650"></a>00650 <span class="comment">// The allowOldMoveMessages parameter allows overriding the timeslot barriers and forward all</span>
- <a name="l00651"></a>00651 <span class="comment">// messages.</span>
- <a name="l00652"></a>00652 <span class="keywordflow">if</span>( <a class="code" href="classPubSubMMOG.html#aced8c7945b0f77560359167cc5f398f6">allowOldMoveMessages</a> || moveMsg-><a class="code" href="classPubSubMoveMessage.html#a6cbaea29f897c198f6de3afa14226055">getTimestamp</a>() >= <a class="code" href="classPubSubMMOG.html#a5c7d73c47298f65748e65abc506b9611">eventDeliveryTimer</a>->getArrivalTime() - 1.0/(2*<a class="code" href="classPubSubMMOG.html#a228fe6f61d1fe510d1336296c4bf254c">movementRate</a>) ){
- <a name="l00653"></a>00653 it->second.waitingMoveMessages.push_back( moveMsg );
- <a name="l00654"></a>00654 ++<a class="code" href="classPubSubMMOG.html#a0adb17b77190fd14c0979fe39a5889cc">numEventsCorrectTimeslot</a>;
- <a name="l00655"></a>00655 } <span class="keywordflow">else</span> {
- <a name="l00656"></a>00656 EV << <span class="stringliteral">"[PubSubMMOG::handleMoveMessage() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00657"></a>00657 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00658"></a>00658 << <span class="stringliteral">" received moveMesage with Timestamp: "</span> << moveMsg-><a class="code" href="classPubSubMoveMessage.html#a6cbaea29f897c198f6de3afa14226055">getTimestamp</a>() << <span class="stringliteral">"\n"</span>
- <a name="l00659"></a>00659 << <span class="stringliteral">" deadline was: "</span> << <a class="code" href="classPubSubMMOG.html#a5c7d73c47298f65748e65abc506b9611">eventDeliveryTimer</a>->getArrivalTime() - 1.0/(2*<a class="code" href="classPubSubMMOG.html#a228fe6f61d1fe510d1336296c4bf254c">movementRate</a>) << <span class="stringliteral">"\n"</span>
- <a name="l00660"></a>00660 << endl;
- <a name="l00661"></a>00661 ++<a class="code" href="classPubSubMMOG.html#aa809123a9ef7f64ea622400ed60a2d4c">numEventsWrongTimeslot</a>;
- <a name="l00662"></a>00662 cancelAndDelete( moveMsg );
- <a name="l00663"></a>00663 }
- <a name="l00664"></a>00664 }
- <a name="l00665"></a>00665
- <a name="l00666"></a><a class="code" href="classPubSubMMOG.html#a9d46909d81ca32d3ec2020a7184c3f50">00666</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a9d46909d81ca32d3ec2020a7184c3f50">PubSubMMOG::handleMoveListMessage</a>( <a class="code" href="classPubSubMoveListMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubMoveListMessage</a>* moveMsg )
- <a name="l00667"></a>00667 {
- <a name="l00668"></a>00668 simtime_t timestamp = moveMsg-><a class="code" href="classPubSubMoveListMessage.html#a3d67a3591e45877525dbd887bd3406d0">getTimestamp</a>();
- <a name="l00669"></a>00669
- <a name="l00670"></a>00670 <span class="comment">// If I'm intermediate node for this subspace, forward message to children</span>
- <a name="l00671"></a>00671 std::map<PubSubSubspaceId, PubSubSubspaceIntermediate>::iterator it;
- <a name="l00672"></a>00672 it = <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(moveMsg-><a class="code" href="classPubSubMoveListMessage.html#ac3f12e1ebacfa47cfcdfb5d032be6a55">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l00673"></a>00673 <span class="keywordflow">if</span>( it != <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.end() ){
- <a name="l00674"></a>00674 <span class="comment">// Forward only if the message has not already been forwarded</span>
- <a name="l00675"></a>00675 <span class="keywordflow">if</span>( it->second.getLastTimestamp() < moveMsg-><a class="code" href="classPubSubMoveListMessage.html#a3d67a3591e45877525dbd887bd3406d0">getTimestamp</a>() ){
- <a name="l00676"></a>00676 set<NodeHandle>::iterator childIt;
- <a name="l00677"></a>00677 <span class="keywordflow">for</span>( childIt = it->second.children.begin(); childIt != it->second.children.end(); ++childIt ){
- <a name="l00678"></a>00678 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( *childIt, (<a class="code" href="classBaseOverlayMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseOverlayMessage</a>*) moveMsg-><a class="code" href="classPubSubMoveListMessage.html#a5d61d0f12b29063f944e6fd5775d3da7">dup</a>() );
- <a name="l00679"></a>00679 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00680"></a>00680 ++<a class="code" href="classPubSubMMOG.html#ae81f55efe5b21342597e408ff3474eee">numMoveListMessages</a>;
- <a name="l00681"></a>00681 <a class="code" href="classPubSubMMOG.html#a5a665dd74681081d669ea57efd5d83b0">moveListMessagesSize</a>+= moveMsg->getByteLength()
- <a name="l00682"></a>00682 );
- <a name="l00683"></a>00683 }
- <a name="l00684"></a>00684 it->second.setTimestamp( timestamp );
- <a name="l00685"></a>00685 }
- <a name="l00686"></a>00686 }
- <a name="l00687"></a>00687
- <a name="l00688"></a>00688 <span class="comment">// If I'm subscribed to the subspace, transfer a GameAPIMoveList to app</span>
- <a name="l00689"></a>00689 std::list<PubSubSubspace>::iterator subIt;
- <a name="l00690"></a>00690 <span class="keywordflow">for</span>( subIt = <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.begin(); subIt != <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.end(); ++subIt ){
- <a name="l00691"></a>00691 <span class="keywordflow">if</span>( subIt->getId().getId() == moveMsg-><a class="code" href="classPubSubMoveListMessage.html#ac3f12e1ebacfa47cfcdfb5d032be6a55">getSubspaceId</a>() ){
- <a name="l00692"></a>00692 <span class="keywordflow">if</span>( subIt->getLastTimestamp() < moveMsg-><a class="code" href="classPubSubMoveListMessage.html#a3d67a3591e45877525dbd887bd3406d0">getTimestamp</a>() ){
- <a name="l00693"></a>00693 <a class="code" href="classGameAPIListMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">GameAPIListMessage</a>* moveList = <span class="keyword">new</span> <a class="code" href="classGameAPIListMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">GameAPIListMessage</a>(<span class="stringliteral">"player position update"</span>);
- <a name="l00694"></a>00694 moveList-><a class="code" href="classGameAPIMessage.html#a3c12a88e720037a70248b0db6a46fc99">setCommand</a>( <a class="code" href="CommonMessages__m_8h.html#ac76e82bc37e4b2b364247c7cff8f7b6ba360dbdf5c7f61a4d26263e2a010057d7">NEIGHBOR_UPDATE</a> );
- <a name="l00695"></a>00695 moveList-><a class="code" href="classGameAPIListMessage.html#a6bac1604abbdf9c0ec959343b7b64834">setAddNeighborArraySize</a>( moveMsg-><a class="code" href="classPubSubMoveListMessage.html#aa41dbdd97c91926ec1b86116a9750802">getPlayerArraySize</a>() );
- <a name="l00696"></a>00696 moveList-><a class="code" href="classGameAPIListMessage.html#a81292ede7c0903f5982efcc7625024f1">setNeighborPositionArraySize</a>( moveMsg-><a class="code" href="classPubSubMoveListMessage.html#a2f87ee7e50d5d28b31f86dd2cc219d63">getPositionArraySize</a>() );
- <a name="l00697"></a>00697 <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < moveMsg-><a class="code" href="classPubSubMoveListMessage.html#aa41dbdd97c91926ec1b86116a9750802">getPlayerArraySize</a>(); ++i ){
- <a name="l00698"></a>00698 moveList-><a class="code" href="classGameAPIListMessage.html#ad0a32a6a2f89f49e1824578e0b7a640a">setAddNeighbor</a>( i, moveMsg-><a class="code" href="classPubSubMoveListMessage.html#a6c8be50200570e0c4c45dd809c3b5dbe">getPlayer</a>(i) );
- <a name="l00699"></a>00699 moveList-><a class="code" href="classGameAPIListMessage.html#a32b3e775c8f0f5b850bf3047f7ddc30f">setNeighborPosition</a>( i, moveMsg-><a class="code" href="classPubSubMoveListMessage.html#a59cce8e96288c2874df9d3fe72096fa8">getPosition</a>(i) );
- <a name="l00700"></a>00700 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00701"></a>00701 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: MoveDelay"</span>,
- <a name="l00702"></a>00702 SIMTIME_DBL(simTime() - timestamp + moveMsg-><a class="code" href="classPubSubMoveListMessage.html#a75c129b174b7e91b314cb13c475f3021">getPositionAge</a>(i)) );
- <a name="l00703"></a>00703 );
- <a name="l00704"></a>00704 }
- <a name="l00705"></a>00705 send( moveList, <span class="stringliteral">"appOut"</span> );
- <a name="l00706"></a>00706 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00707"></a>00707 <span class="keywordflow">if</span>( timestamp < simTime() - <a class="code" href="classPubSubMMOG.html#a219753e4fc3eae95cd21f70bc40017e7">maxMoveDelay</a> ){
- <a name="l00708"></a>00708 ++<a class="code" href="classPubSubMMOG.html#a1450e36b5a7103fe4581f271fac13340">lostMovementLists</a>;
- <a name="l00709"></a>00709 } <span class="keywordflow">else</span> {
- <a name="l00710"></a>00710 ++<a class="code" href="classPubSubMMOG.html#a8415fe6a47b3b961fd54f9e3b5f8d3f0">receivedMovementLists</a>;
- <a name="l00711"></a>00711 }
- <a name="l00712"></a>00712 <span class="keywordflow">if</span>( subIt->getLastTimestamp() != 0) <a class="code" href="classPubSubMMOG.html#a1450e36b5a7103fe4581f271fac13340">lostMovementLists</a> += (<span class="keywordtype">int</span>)(SIMTIME_DBL(timestamp - subIt->getLastTimestamp())*<a class="code" href="classPubSubMMOG.html#a228fe6f61d1fe510d1336296c4bf254c">movementRate</a> -1);
- <a name="l00713"></a>00713
- <a name="l00714"></a>00714 );
- <a name="l00715"></a>00715 subIt->setTimestamp( timestamp );
- <a name="l00716"></a>00716 }
- <a name="l00717"></a>00717 <span class="keywordflow">return</span>;
- <a name="l00718"></a>00718 }
- <a name="l00719"></a>00719 }
- <a name="l00720"></a>00720 }
- <a name="l00721"></a>00721
- <a name="l00722"></a><a class="code" href="classPubSubMMOG.html#a7d28b4484518dcf34fbc2cb462bf620b">00722</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a7d28b4484518dcf34fbc2cb462bf620b">PubSubMMOG::handleHelpResponse</a>( <a class="code" href="classPubSubHelpResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpResponse</a>* helpResp )
- <a name="l00723"></a>00723 {
- <a name="l00724"></a>00724 <span class="comment">// lobby server answered our call for help</span>
- <a name="l00725"></a>00725 <span class="comment">// (i.e. he sends us a candidate for backup/intermediate nodes</span>
- <a name="l00726"></a>00726 <span class="keywordflow">if</span>( helpResp-><a class="code" href="classPubSubHelpResponse.html#a22f7d6407dbc34eed5cab79a3a0d27bb">getHelpType</a>() == PUBSUB_BACKUP ){
- <a name="l00727"></a>00727 <a class="code" href="classPubSubBackupCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupCall</a>* backupCall = <span class="keyword">new</span> <a class="code" href="classPubSubBackupCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupCall</a>(<span class="stringliteral">"Become my backup node!"</span>);
- <a name="l00728"></a>00728 backupCall-><a class="code" href="classPubSubBackupCall.html#a6ab72a64e226c723778471d63351709b">setSubspaceId</a>( helpResp-><a class="code" href="classPubSubHelpResponse.html#a3dfeaa012bc872e1ebdfe89e57af4e38">getSubspaceId</a>() );
- <a name="l00729"></a>00729
- <a name="l00730"></a>00730 <span class="comment">// Find the subspace in the subspace map</span>
- <a name="l00731"></a>00731 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l00732"></a>00732 it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(helpResp-><a class="code" href="classPubSubHelpResponse.html#a3dfeaa012bc872e1ebdfe89e57af4e38">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l00733"></a>00733 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end() ){
- <a name="l00734"></a>00734 EV << <span class="stringliteral">"[PubSubMMOG::handleHelpResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00735"></a>00735 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00736"></a>00736 << <span class="stringliteral">" received helpResponse for unknown subspace"</span> << helpResp-><a class="code" href="classPubSubHelpResponse.html#a3dfeaa012bc872e1ebdfe89e57af4e38">getSubspaceId</a>() << <span class="stringliteral">"\n"</span>
- <a name="l00737"></a>00737 << endl;
- <a name="l00738"></a>00738 <span class="keywordflow">return</span>;
- <a name="l00739"></a>00739 }
- <a name="l00740"></a>00740 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace = it->second;
- <a name="l00741"></a>00741
- <a name="l00742"></a>00742 <span class="comment">// Assume the new backup will not refuse his task</span>
- <a name="l00743"></a>00743 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a462a25a436aa25d8cc38310119a5d671">setBackupNode</a>( helpResp-><a class="code" href="classPubSubHelpResponse.html#a380c4de936be194d72ff943761e2f6dc">getNode</a>() );
- <a name="l00744"></a>00744
- <a name="l00745"></a>00745 <span class="comment">// FIXME: just for testing</span>
- <a name="l00746"></a>00746 <span class="keywordtype">int</span> iii = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>();
- <a name="l00747"></a>00747 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l00748"></a>00748 <span class="keywordflow">if</span>( iii != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>() ){
- <a name="l00749"></a>00749 opp_error(<span class="stringliteral">"Huh?"</span>);
- <a name="l00750"></a>00750 }
- <a name="l00751"></a>00751
- <a name="l00752"></a>00752 <span class="comment">// backup the load balancing tree</span>
- <a name="l00753"></a>00753 backupCall-><a class="code" href="classPubSubBackupCall.html#a6a950c9a840ca3ab3bddfa5d61f87fa7">setChildrenArraySize</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>() );
- <a name="l00754"></a>00754 backupCall-><a class="code" href="classPubSubBackupCall.html#ac5761ad291a99fda13ebb23d5adc8f62">setChildrenPosArraySize</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>() );
- <a name="l00755"></a>00755 backupCall-><a class="code" href="classPubSubBackupCall.html#a35e138c413c33667d8c1be7a8f8e84fa">setIntermediatesArraySize</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.size() );
- <a name="l00756"></a>00756
- <a name="l00757"></a>00757 set<NodeHandle>::iterator childIt;
- <a name="l00758"></a>00758 map<NodeHandle, bool>::iterator childMapIt;
- <a name="l00759"></a>00759 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0;
- <a name="l00760"></a>00760 <span class="keywordflow">for</span>( childMapIt = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.begin(); childMapIt != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.end(); ++childMapIt ){
- <a name="l00761"></a>00761 backupCall-><a class="code" href="classPubSubBackupCall.html#a52748a54593511a55a0485028d3eab6a">setChildren</a>(i, childMapIt->first);
- <a name="l00762"></a>00762 backupCall-><a class="code" href="classPubSubBackupCall.html#a361dbd938656d13424a03efb9c6e24b6">setChildrenPos</a>(i, -2);
- <a name="l00763"></a>00763 ++i;
- <a name="l00764"></a>00764 }
- <a name="l00765"></a>00765 <span class="keywordflow">for</span>( childIt = subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.begin(); childIt != subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.end(); ++childIt ){
- <a name="l00766"></a>00766 backupCall-><a class="code" href="classPubSubBackupCall.html#a52748a54593511a55a0485028d3eab6a">setChildren</a>(i, *childIt);
- <a name="l00767"></a>00767 backupCall-><a class="code" href="classPubSubBackupCall.html#a361dbd938656d13424a03efb9c6e24b6">setChildrenPos</a>(i, -1);
- <a name="l00768"></a>00768 ++i;
- <a name="l00769"></a>00769 }
- <a name="l00770"></a>00770 <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ii = 0; ii < subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.size(); ++ii ){
- <a name="l00771"></a>00771 <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a>& iNode = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[ii];
- <a name="l00772"></a>00772 backupCall-><a class="code" href="classPubSubBackupCall.html#a208443ba3ffe4f6b2d865467ff445221">setIntermediates</a>(ii, iNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>);
- <a name="l00773"></a>00773 <span class="keywordflow">for</span>( childIt = iNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.begin(); childIt != iNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.end(); ++childIt ){
- <a name="l00774"></a>00774 backupCall-><a class="code" href="classPubSubBackupCall.html#a52748a54593511a55a0485028d3eab6a">setChildren</a>(i, *childIt);
- <a name="l00775"></a>00775 backupCall-><a class="code" href="classPubSubBackupCall.html#a361dbd938656d13424a03efb9c6e24b6">setChildrenPos</a>(i, ii);
- <a name="l00776"></a>00776 ++i;
- <a name="l00777"></a>00777 }
- <a name="l00778"></a>00778 }
- <a name="l00779"></a>00779
- <a name="l00780"></a>00780 backupCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a571c4080ef67f0cfe61d2e1a8f80243d">PUBSUB_BACKUPCALL_L</a>( backupCall ));
- <a name="l00781"></a>00781 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00782"></a>00782 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00783"></a>00783 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= backupCall->getByteLength()
- <a name="l00784"></a>00784 );
- <a name="l00785"></a>00785 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( helpResp-><a class="code" href="classPubSubHelpResponse.html#a380c4de936be194d72ff943761e2f6dc">getNode</a>(), backupCall );
- <a name="l00786"></a>00786
- <a name="l00787"></a>00787 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( helpResp-><a class="code" href="classPubSubHelpResponse.html#a22f7d6407dbc34eed5cab79a3a0d27bb">getHelpType</a>() == PUBSUB_INTERMEDIATE ){
- <a name="l00788"></a>00788 <a class="code" href="classPubSubIntermediateCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubIntermediateCall</a>* intermediateCall = <span class="keyword">new</span> <a class="code" href="classPubSubIntermediateCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubIntermediateCall</a>(<span class="stringliteral">"Become my intermediate node!"</span>);
- <a name="l00789"></a>00789 intermediateCall-><a class="code" href="classPubSubIntermediateCall.html#a3bc74e30d831eee9481f62ce671f1b70">setSubspaceId</a>( helpResp-><a class="code" href="classPubSubHelpResponse.html#a3dfeaa012bc872e1ebdfe89e57af4e38">getSubspaceId</a>() );
- <a name="l00790"></a>00790 intermediateCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a961df784f796bd894a954761e5585e72">PUBSUB_INTERMEDIATECALL_L</a>( intermediateCall ));
- <a name="l00791"></a>00791 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00792"></a>00792 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00793"></a>00793 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= intermediateCall->getByteLength()
- <a name="l00794"></a>00794 );
- <a name="l00795"></a>00795 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( helpResp-><a class="code" href="classPubSubHelpResponse.html#a380c4de936be194d72ff943761e2f6dc">getNode</a>(), intermediateCall );
- <a name="l00796"></a>00796 }
- <a name="l00797"></a>00797 }
- <a name="l00798"></a>00798
- <a name="l00799"></a><a class="code" href="classPubSubMMOG.html#ac7e55bce3aa2a48f4367977e081eb9e1">00799</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#ac7e55bce3aa2a48f4367977e081eb9e1">PubSubMMOG::handleBackupCall</a>( <a class="code" href="classPubSubBackupCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupCall</a>* backupCall )
- <a name="l00800"></a>00800 {
- <a name="l00801"></a>00801 <span class="keywordtype">int</span> intId = backupCall-><a class="code" href="classPubSubBackupCall.html#a78774c6987e65617ae00b8f896f2963b">getSubspaceId</a>();
- <a name="l00802"></a>00802 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(intId, <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l00803"></a>00803
- <a name="l00804"></a>00804 <span class="comment">// Start Heartbeat Timer</span>
- <a name="l00805"></a>00805 <a class="code" href="classPubSubTimer.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTimer</a>* <a class="code" href="classPubSubMMOG.html#a98fd6baf72474a184c902133581273fa">parentTimeout</a> = <span class="keyword">new</span> <a class="code" href="classPubSubTimer.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTimer</a>(<span class="stringliteral">"ParentTimeout"</span>);
- <a name="l00806"></a>00806 parentTimeout-><a class="code" href="classPubSubTimer.html#a09825991200a1fa76d4cfc9549ac51f5">setType</a>( <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04cad6da37474996a5016fe145fcc24a52c8">PUBSUB_PARENT_TIMEOUT</a> );
- <a name="l00807"></a>00807 parentTimeout-><a class="code" href="classPubSubTimer.html#a9b0ce83bc691ae0d4d35844c6aac569b">setSubspaceId</a>( intId );
- <a name="l00808"></a>00808 <a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">startTimer</a>( parentTimeout );
- <a name="l00809"></a>00809
- <a name="l00810"></a>00810 <span class="comment">// insert subspace into responsible list</span>
- <a name="l00811"></a>00811 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a> subspace( subspaceId );
- <a name="l00812"></a>00812 subspace.<a class="code" href="classPubSubSubspace.html#addf352c69955906dd9bda7e0a0c09dbb">setResponsibleNode</a>( backupCall-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>() );
- <a name="l00813"></a>00813 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a807b58c353071f116890aa5fbe6c47b2">setHeartbeatTimer</a>( parentTimeout );
- <a name="l00814"></a>00814
- <a name="l00815"></a>00815 <span class="comment">// recounstruct load balancing tree</span>
- <a name="l00816"></a>00816 <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < backupCall-><a class="code" href="classPubSubBackupCall.html#a2212ccff087366a67e9a2d1fa78f561c">getIntermediatesArraySize</a>(); ++i ){
- <a name="l00817"></a>00817 <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a> iNode;
- <a name="l00818"></a>00818 iNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a> = backupCall-><a class="code" href="classPubSubBackupCall.html#a613d13441964c55384fd9aff6c260c65">getIntermediates</a>(i);
- <a name="l00819"></a>00819 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.push_back( iNode );
- <a name="l00820"></a>00820 }
- <a name="l00821"></a>00821 <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < backupCall-><a class="code" href="classPubSubBackupCall.html#a25900d74688009c610a11996861cd2cc">getChildrenArraySize</a>(); ++i ){
- <a name="l00822"></a>00822 <span class="keywordtype">int</span> pos = backupCall-><a class="code" href="classPubSubBackupCall.html#ae6261425fc1f1b5eb1febe963b14e386">getChildrenPos</a>( i );
- <a name="l00823"></a>00823 <span class="keywordflow">if</span>( pos == -2 ){
- <a name="l00824"></a>00824 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert( make_pair( backupCall-><a class="code" href="classPubSubBackupCall.html#a3038e30f56f73cb460d72bbee8b2f13d">getChildren</a>(i), false ));
- <a name="l00825"></a>00825 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( pos == -1 ){
- <a name="l00826"></a>00826 subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.insert( backupCall-><a class="code" href="classPubSubBackupCall.html#a3038e30f56f73cb460d72bbee8b2f13d">getChildren</a>(i) );
- <a name="l00827"></a>00827 } <span class="keywordflow">else</span> {
- <a name="l00828"></a>00828 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[pos].children.insert( backupCall-><a class="code" href="classPubSubBackupCall.html#a3038e30f56f73cb460d72bbee8b2f13d">getChildren</a>(i) );
- <a name="l00829"></a>00829 }
- <a name="l00830"></a>00830 }
- <a name="l00831"></a>00831
- <a name="l00832"></a>00832 <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.insert( make_pair(subspaceId, subspace) );
- <a name="l00833"></a>00833
- <a name="l00834"></a>00834 <a class="code" href="classPubSubBackupResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupResponse</a>* backupResp = <span class="keyword">new</span> <a class="code" href="classPubSubBackupResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupResponse</a>(<span class="stringliteral">"I'll be your backup"</span>);
- <a name="l00835"></a>00835 backupResp-><a class="code" href="classPubSubBackupResponse.html#a8635388afb5931d313140c3f9d3d9b8d">setSubspaceId</a>( intId );
- <a name="l00836"></a>00836 backupResp->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a3a767754300bd5331a8bfabb54477377">PUBSUB_BACKUPRESPONSE_L</a>( backupResp ));
- <a name="l00837"></a>00837 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00838"></a>00838 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00839"></a>00839 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= backupResp->getByteLength()
- <a name="l00840"></a>00840 );
- <a name="l00841"></a>00841 <a class="code" href="classBaseRpc.html#adc06091d348c98a5efbf54fe0afe8747" title="Send Remote-Procedure response message and deletes call message.">sendRpcResponse</a>( backupCall, backupResp );
- <a name="l00842"></a>00842 }
- <a name="l00843"></a>00843
- <a name="l00844"></a><a class="code" href="classPubSubMMOG.html#a401659ffbdca793a6f7d97e9737a70d0">00844</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a401659ffbdca793a6f7d97e9737a70d0">PubSubMMOG::handleBackupResponse</a>( <a class="code" href="classPubSubBackupResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupResponse</a>* backupResp )
- <a name="l00845"></a>00845 {
- <a name="l00846"></a>00846 <span class="comment">// Nothing to be done</span>
- <a name="l00847"></a>00847 <span class="comment">// HandleHelpResponse() already did everything important</span>
- <a name="l00848"></a>00848 }
- <a name="l00849"></a>00849
- <a name="l00850"></a><a class="code" href="classPubSubMMOG.html#a77d17c923e8b43f0bf38222dd58d3969">00850</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a77d17c923e8b43f0bf38222dd58d3969">PubSubMMOG::handleIntermediateCall</a>( <a class="code" href="classPubSubIntermediateCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubIntermediateCall</a>* intermediateCall )
- <a name="l00851"></a>00851 {
- <a name="l00852"></a>00852 <span class="comment">// insert subspace into intermediate list</span>
- <a name="l00853"></a>00853 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(intermediateCall-><a class="code" href="classPubSubIntermediateCall.html#aae48f9b0cfa46ea154a2ff0ed6edfb73">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l00854"></a>00854 <a class="code" href="classPubSubSubspaceIntermediate.html">PubSubSubspaceIntermediate</a> subspace( subspaceId );
- <a name="l00855"></a>00855 subspace.setResponsibleNode( intermediateCall-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>() );
- <a name="l00856"></a>00856 subspace.setTimestamp(0);
- <a name="l00857"></a>00857 <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.insert( make_pair(subspaceId, subspace) );
- <a name="l00858"></a>00858
- <a name="l00859"></a>00859 <a class="code" href="classPubSubIntermediateResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubIntermediateResponse</a>* iResp = <span class="keyword">new</span> <a class="code" href="classPubSubIntermediateResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubIntermediateResponse</a>(<span class="stringliteral">"I'll be your intermediate node"</span>);
- <a name="l00860"></a>00860 iResp-><a class="code" href="classPubSubIntermediateResponse.html#a1eead87d5182177810012b77b6a62c01">setSubspaceId</a>( intermediateCall-><a class="code" href="classPubSubIntermediateCall.html#aae48f9b0cfa46ea154a2ff0ed6edfb73">getSubspaceId</a>() );
- <a name="l00861"></a>00861 iResp->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a520b21326aecd010016e460c12c4a572">PUBSUB_INTERMEDIATERESPONSE_L</a>( iResp ));
- <a name="l00862"></a>00862 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00863"></a>00863 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00864"></a>00864 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= iResp->getByteLength()
- <a name="l00865"></a>00865 );
- <a name="l00866"></a>00866 <a class="code" href="classBaseRpc.html#adc06091d348c98a5efbf54fe0afe8747" title="Send Remote-Procedure response message and deletes call message.">sendRpcResponse</a>( intermediateCall, iResp );
- <a name="l00867"></a>00867 }
- <a name="l00868"></a>00868
- <a name="l00869"></a><a class="code" href="classPubSubMMOG.html#ac41702ca41ffae439637504939856f4f">00869</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#ac41702ca41ffae439637504939856f4f">PubSubMMOG::handleIntermediateResponse</a>( <a class="code" href="classPubSubIntermediateResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubIntermediateResponse</a>* intermediateResp )
- <a name="l00870"></a>00870 {
- <a name="l00871"></a>00871 <span class="comment">// we found a new intermediate node for a subspace</span>
- <a name="l00872"></a>00872 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l00873"></a>00873 it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(intermediateResp-><a class="code" href="classPubSubIntermediateResponse.html#a10274ee87eb24712c45b63ac3456d835">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l00874"></a>00874 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end() ) {
- <a name="l00875"></a>00875 EV << <span class="stringliteral">"[PubSubMMOG::handleIntermediateResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l00876"></a>00876 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l00877"></a>00877 << <span class="stringliteral">" Received Intermediate Response for unknown Subspace!\n"</span>
- <a name="l00878"></a>00878 << endl;
- <a name="l00879"></a>00879 <span class="keywordflow">return</span>;
- <a name="l00880"></a>00880 }
- <a name="l00881"></a>00881 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace = it->second;
- <a name="l00882"></a>00882 <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a> iNode;
- <a name="l00883"></a>00883 iNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a> = intermediateResp-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>();
- <a name="l00884"></a>00884
- <a name="l00885"></a>00885 <span class="comment">// if there is any broken intermediate node in list, replace it</span>
- <a name="l00886"></a>00886 <span class="keywordtype">bool</span> newIntermediate = <span class="keyword">true</span>;
- <a name="l00887"></a>00887 deque<PubSubSubspaceResponsible::IntermediateNode>::iterator iit;
- <a name="l00888"></a>00888 <span class="keywordflow">for</span>( iit = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin(); iit != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end(); ++iit ){
- <a name="l00889"></a>00889 <span class="keywordflow">if</span>( iit->node.isUnspecified() ){
- <a name="l00890"></a>00890 iit->node = iNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>;
- <a name="l00891"></a>00891 newIntermediate = <span class="keyword">false</span>;
- <a name="l00892"></a>00892 <span class="keywordflow">break</span>;
- <a name="l00893"></a>00893 }
- <a name="l00894"></a>00894 }
- <a name="l00895"></a>00895 <span class="keywordflow">if</span>( iit == subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end() ){
- <a name="l00896"></a>00896 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.push_back( iNode );
- <a name="l00897"></a>00897 iit = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end() - 1;
- <a name="l00898"></a>00898 }
- <a name="l00899"></a>00899
- <a name="l00900"></a>00900 <span class="comment">// inform Backup</span>
- <a name="l00901"></a>00901 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l00902"></a>00902 <a class="code" href="classPubSubBackupIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupIntermediateMessage</a>* backupMsg = <span class="keyword">new</span> <a class="code" href="classPubSubBackupIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupIntermediateMessage</a>(<span class="stringliteral">"Backup: new Intermediate"</span>);
- <a name="l00903"></a>00903 backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#ae84b3d586b249c5d8b0c99cc5d199a5a">setSubspaceId</a>( intermediateResp-><a class="code" href="classPubSubIntermediateResponse.html#a10274ee87eb24712c45b63ac3456d835">getSubspaceId</a>() );
- <a name="l00904"></a>00904 backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#a43a3abbbddbcdc5f14dc38867bab7b2c">setNode</a>( iNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a> );
- <a name="l00905"></a>00905 backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#adea3fba4eae66064247ab342fc487302">setPos</a>( iit - subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin() );
- <a name="l00906"></a>00906 backupMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#af0f2565f24c2e5b8e3655c3fb073d887">PUBSUB_BACKUPINTERMEDIATE_L</a>( backupMsg ));
- <a name="l00907"></a>00907 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00908"></a>00908 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00909"></a>00909 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= backupMsg->getByteLength()
- <a name="l00910"></a>00910 );
- <a name="l00911"></a>00911 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>(), backupMsg );
- <a name="l00912"></a>00912 }
- <a name="l00913"></a>00913
- <a name="l00914"></a>00914 <span class="comment">// if needed, send adopt to parent</span>
- <a name="l00915"></a>00915 <span class="keywordtype">int</span> intermediatePos = iit - subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin();
- <a name="l00916"></a>00916 <span class="keywordtype">int</span> parentPos = intermediatePos/<a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> -1;
- <a name="l00917"></a>00917 <span class="keywordflow">if</span>( parentPos >= 0 && !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[parentPos].node.isUnspecified() ){
- <a name="l00918"></a>00918 <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>* adoptCall = <span class="keyword">new</span> <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>(<span class="stringliteral">"Adopt (intermediate) Node"</span>);
- <a name="l00919"></a>00919 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a2c7d51a5d0c8ef5b2f7a07d9a4559aa1">setSubspaceId</a>( intermediateResp-><a class="code" href="classPubSubIntermediateResponse.html#a10274ee87eb24712c45b63ac3456d835">getSubspaceId</a>() );
- <a name="l00920"></a>00920 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a117550b7b25e69c5b16b35a6a7d6d019">setChild</a>( iit->node );
- <a name="l00921"></a>00921 adoptCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a40172b8994bee9881c879d1f69994013">PUBSUB_ADOPTCHILDCALL_L</a>( adoptCall ));
- <a name="l00922"></a>00922 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00923"></a>00923 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00924"></a>00924 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= adoptCall->getByteLength()
- <a name="l00925"></a>00925 );
- <a name="l00926"></a>00926 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[parentPos].node, adoptCall );
- <a name="l00927"></a>00927 }
- <a name="l00928"></a>00928
- <a name="l00929"></a>00929 <span class="keywordflow">if</span>( newIntermediate ){
- <a name="l00930"></a>00930 <span class="comment">// move one child from iNodes's parent to cache</span>
- <a name="l00931"></a>00931 <span class="keywordflow">if</span>( parentPos >= 0 ) {
- <a name="l00932"></a>00932 <span class="comment">// parent is an intermediate node</span>
- <a name="l00933"></a>00933 <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a>& parent = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[parentPos];
- <a name="l00934"></a>00934 <span class="keywordflow">if</span>( parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.begin() != parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.end() ){
- <a name="l00935"></a>00935 <span class="keywordtype">bool</span> fixNeeded = <span class="keyword">false</span>;
- <a name="l00936"></a>00936 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert( make_pair( *(parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.begin()), <span class="keyword">false</span> )).second ){
- <a name="l00937"></a>00937 fixNeeded = <span class="keyword">true</span>;
- <a name="l00938"></a>00938 }
- <a name="l00939"></a>00939 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l00940"></a>00940 <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>* backupMsg = <span class="keyword">new</span> <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>(<span class="stringliteral">"Backup: nodes moved to cache"</span>);
- <a name="l00941"></a>00941 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a3b6847353d9871bcc13c01ac682c7739">setSubspaceId</a>( intermediateResp-><a class="code" href="classPubSubIntermediateResponse.html#a10274ee87eb24712c45b63ac3456d835">getSubspaceId</a>() );
- <a name="l00942"></a>00942 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#ab3a10059be8de4c048576c72a1c83fc7">setChild</a>( *(parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.begin()) );
- <a name="l00943"></a>00943 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a45ca49bce2d925ec64da036f7c67ec1f">setOldParent</a>( parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a> );
- <a name="l00944"></a>00944 backupMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a485654404a477aa60cb34dd0ae722258">PUBSUB_BACKUPSUBSCRIPTION_L</a>( backupMsg ));
- <a name="l00945"></a>00945 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00946"></a>00946 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00947"></a>00947 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= backupMsg->getByteLength()
- <a name="l00948"></a>00948 );
- <a name="l00949"></a>00949 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>(), backupMsg );
- <a name="l00950"></a>00950 }
- <a name="l00951"></a>00951 <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>* goneMsg = <span class="keyword">new</span> <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>(<span class="stringliteral">"Node left: moved"</span>);
- <a name="l00952"></a>00952 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#a0e52c6bd254d41b146393d4b825f5cb8">setNode</a>( *(parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.begin()) );
- <a name="l00953"></a>00953 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#ac7572204eed418bb6befc42859d682bc">setSubspaceId</a>( intermediateResp-><a class="code" href="classPubSubIntermediateResponse.html#a10274ee87eb24712c45b63ac3456d835">getSubspaceId</a>() );
- <a name="l00954"></a>00954 goneMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#ac2a4c9a20c40c17b2a948f346d5ae4fc">PUBSUB_NODELEFT_L</a>( goneMsg ));
- <a name="l00955"></a>00955 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00956"></a>00956 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00957"></a>00957 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= goneMsg->getByteLength()
- <a name="l00958"></a>00958 );
- <a name="l00959"></a>00959 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>, goneMsg );
- <a name="l00960"></a>00960 parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.erase( parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.begin() );
- <a name="l00961"></a>00961 <span class="keywordflow">if</span>( fixNeeded ){
- <a name="l00962"></a>00962 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l00963"></a>00963 }
- <a name="l00964"></a>00964 }
- <a name="l00965"></a>00965
- <a name="l00966"></a>00966 } <span class="keywordflow">else</span> {
- <a name="l00967"></a>00967 <span class="comment">// we are parent</span>
- <a name="l00968"></a>00968 <span class="keywordflow">if</span>( subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.begin() != subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.end() ){
- <a name="l00969"></a>00969 <span class="keywordtype">bool</span> fixNeeded = <span class="keyword">false</span>;
- <a name="l00970"></a>00970 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert( make_pair( *(subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.begin()), <span class="keyword">false</span> )).second ){
- <a name="l00971"></a>00971 fixNeeded = <span class="keyword">true</span>;
- <a name="l00972"></a>00972 }
- <a name="l00973"></a>00973 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l00974"></a>00974 <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>* backupMsg = <span class="keyword">new</span> <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>(<span class="stringliteral">"Backup: nodes moved to cache"</span>);
- <a name="l00975"></a>00975 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a3b6847353d9871bcc13c01ac682c7739">setSubspaceId</a>( intermediateResp-><a class="code" href="classPubSubIntermediateResponse.html#a10274ee87eb24712c45b63ac3456d835">getSubspaceId</a>() );
- <a name="l00976"></a>00976 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#ab3a10059be8de4c048576c72a1c83fc7">setChild</a>( *(subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.begin()) );
- <a name="l00977"></a>00977 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a45ca49bce2d925ec64da036f7c67ec1f">setOldParent</a>( <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a> );
- <a name="l00978"></a>00978 backupMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a485654404a477aa60cb34dd0ae722258">PUBSUB_BACKUPSUBSCRIPTION_L</a>( backupMsg ));
- <a name="l00979"></a>00979 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l00980"></a>00980 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l00981"></a>00981 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= backupMsg->getByteLength()
- <a name="l00982"></a>00982 );
- <a name="l00983"></a>00983 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>(), backupMsg );
- <a name="l00984"></a>00984 }
- <a name="l00985"></a>00985 subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.erase( *(subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.begin()) );
- <a name="l00986"></a>00986 <span class="keywordflow">if</span>( fixNeeded ){
- <a name="l00987"></a>00987 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l00988"></a>00988 }
- <a name="l00989"></a>00989 }
- <a name="l00990"></a>00990 }
- <a name="l00991"></a>00991 } <span class="keywordflow">else</span> {
- <a name="l00992"></a>00992 <span class="comment">// send adopt for all children intermediates</span>
- <a name="l00993"></a>00993 <span class="keywordflow">for</span>( <span class="keywordtype">int</span> pos = (intermediatePos+1) * <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a>; pos < (int) subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.size() &&
- <a name="l00994"></a>00994 pos < (intermediatePos+2) * <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a>; ++pos ){
- <a name="l00995"></a>00995 <span class="keywordflow">if</span>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[pos].node.isUnspecified() ) <span class="keywordflow">continue</span>;
- <a name="l00996"></a>00996 <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>* adoptCall = <span class="keyword">new</span> <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>(<span class="stringliteral">"Adopt (intermediate) Node"</span>);
- <a name="l00997"></a>00997 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a2c7d51a5d0c8ef5b2f7a07d9a4559aa1">setSubspaceId</a>( intermediateResp-><a class="code" href="classPubSubIntermediateResponse.html#a10274ee87eb24712c45b63ac3456d835">getSubspaceId</a>() );
- <a name="l00998"></a>00998 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a117550b7b25e69c5b16b35a6a7d6d019">setChild</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[pos].node );
- <a name="l00999"></a>00999 adoptCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a40172b8994bee9881c879d1f69994013">PUBSUB_ADOPTCHILDCALL_L</a>( adoptCall ));
- <a name="l01000"></a>01000 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01001"></a>01001 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01002"></a>01002 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= adoptCall->getByteLength()
- <a name="l01003"></a>01003 );
- <a name="l01004"></a>01004 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( iit->node, adoptCall );
- <a name="l01005"></a>01005 }
- <a name="l01006"></a>01006 }
- <a name="l01007"></a>01007
- <a name="l01008"></a>01008 <span class="comment">// move as many cached children to the new node as possible</span>
- <a name="l01009"></a>01009 std::map<NodeHandle,bool>::iterator childIt;
- <a name="l01010"></a>01010 <span class="keywordflow">for</span>( childIt = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.begin(); childIt != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.end(); ++childIt ){
- <a name="l01011"></a>01011 <span class="keywordflow">if</span>( childIt->second ) <span class="keywordflow">continue</span>;
- <a name="l01012"></a>01012 <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>* adoptCall = <span class="keyword">new</span> <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>(<span class="stringliteral">"Adopt Node"</span>);
- <a name="l01013"></a>01013 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a2c7d51a5d0c8ef5b2f7a07d9a4559aa1">setSubspaceId</a>( intermediateResp-><a class="code" href="classPubSubIntermediateResponse.html#a10274ee87eb24712c45b63ac3456d835">getSubspaceId</a>() );
- <a name="l01014"></a>01014 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a117550b7b25e69c5b16b35a6a7d6d019">setChild</a>( childIt->first );
- <a name="l01015"></a>01015 adoptCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a40172b8994bee9881c879d1f69994013">PUBSUB_ADOPTCHILDCALL_L</a>( adoptCall ));
- <a name="l01016"></a>01016 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01017"></a>01017 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01018"></a>01018 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= adoptCall->getByteLength()
- <a name="l01019"></a>01019 );
- <a name="l01020"></a>01020 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( intermediateResp-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>(), adoptCall );
- <a name="l01021"></a>01021 childIt->second = <span class="keyword">true</span>;
- <a name="l01022"></a>01022 <span class="keywordflow">if</span>( (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> == ++(iit->waitingChildren) ) <span class="keywordflow">break</span>;
- <a name="l01023"></a>01023 }
- <a name="l01024"></a>01024 }
- <a name="l01025"></a>01025
- <a name="l01026"></a><a class="code" href="classPubSubMMOG.html#a301bb30f1b9239fa5ea744400be48a1b">01026</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a301bb30f1b9239fa5ea744400be48a1b">PubSubMMOG::handleAdoptChildCall</a>( <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>* adoptCall )
- <a name="l01027"></a>01027 {
- <a name="l01028"></a>01028 std::map<PubSubSubspaceId, PubSubSubspaceIntermediate>::iterator it;
- <a name="l01029"></a>01029 it = <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a55f2fabdda4d8e593f62af92f6320efb">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l01030"></a>01030 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.end() ) {
- <a name="l01031"></a>01031 EV << <span class="stringliteral">"[PubSubMMOG::handleAdoptChildCall() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l01032"></a>01032 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l01033"></a>01033 << <span class="stringliteral">" Received Adopt Child Call for unknown Subspace!\n"</span>
- <a name="l01034"></a>01034 << endl;
- <a name="l01035"></a>01035 cancelAndDelete( adoptCall );
- <a name="l01036"></a>01036 <span class="keywordflow">return</span>;
- <a name="l01037"></a>01037 }
- <a name="l01038"></a>01038
- <a name="l01039"></a>01039 it->second.addChild( adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a47f61a8c6ac788a183fafe93ada0e149">getChild</a>() );
- <a name="l01040"></a>01040 <a class="code" href="classPubSubAdoptChildResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildResponse</a>* adoptResp = <span class="keyword">new</span> <a class="code" href="classPubSubAdoptChildResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildResponse</a>(<span class="stringliteral">"I adopted child"</span>);
- <a name="l01041"></a>01041 adoptResp-><a class="code" href="classPubSubAdoptChildResponse.html#ac2b8964ee2f2c7c009ddead070e4fee5">setSubspaceId</a>( adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a55f2fabdda4d8e593f62af92f6320efb">getSubspaceId</a>() );
- <a name="l01042"></a>01042 adoptResp-><a class="code" href="classPubSubAdoptChildResponse.html#aafd3f2482f2ec5da47cc69b088f99d78">setChild</a>( adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a47f61a8c6ac788a183fafe93ada0e149">getChild</a>() );
- <a name="l01043"></a>01043 adoptResp->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a245e5d150580b43d98348a8cd4008373">PUBSUB_ADOPTCHILDRESPONSE_L</a>( adoptResp ));
- <a name="l01044"></a>01044 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01045"></a>01045 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01046"></a>01046 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= adoptResp->getByteLength()
- <a name="l01047"></a>01047 );
- <a name="l01048"></a>01048 <a class="code" href="classBaseRpc.html#adc06091d348c98a5efbf54fe0afe8747" title="Send Remote-Procedure response message and deletes call message.">sendRpcResponse</a>( adoptCall, adoptResp );
- <a name="l01049"></a>01049 }
- <a name="l01050"></a>01050
- <a name="l01051"></a><a class="code" href="classPubSubMMOG.html#a9f396c585cfb16b476047c35fbbe05fa">01051</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a9f396c585cfb16b476047c35fbbe05fa">PubSubMMOG::handleAdoptChildResponse</a>( <a class="code" href="classPubSubAdoptChildResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildResponse</a>* adoptResp )
- <a name="l01052"></a>01052 {
- <a name="l01053"></a>01053 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01054"></a>01054 it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(adoptResp-><a class="code" href="classPubSubAdoptChildResponse.html#ac06febb4c2fd644ad5c31b844e6356de">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l01055"></a>01055 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end() ) {
- <a name="l01056"></a>01056 EV << <span class="stringliteral">"[PubSubMMOG::handleAdoptChildResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l01057"></a>01057 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l01058"></a>01058 << <span class="stringliteral">" Received AdoptChild Response for unknown Subspace!\n"</span>
- <a name="l01059"></a>01059 << endl;
- <a name="l01060"></a>01060 <span class="keywordflow">return</span>;
- <a name="l01061"></a>01061 }
- <a name="l01062"></a>01062
- <a name="l01063"></a>01063 <span class="comment">// FIXME: just for testing</span>
- <a name="l01064"></a>01064 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace = it->second;
- <a name="l01065"></a>01065 <span class="keywordtype">int</span> iii = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>();
- <a name="l01066"></a>01066 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l01067"></a>01067 <span class="keywordflow">if</span>( iii != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>() ){
- <a name="l01068"></a>01068 opp_error(<span class="stringliteral">"Huh?"</span>);
- <a name="l01069"></a>01069 }
- <a name="l01070"></a>01070
- <a name="l01071"></a>01071 <span class="comment">// Find intermediate node in subspace</span>
- <a name="l01072"></a>01072 deque<PubSubSubspaceResponsible::IntermediateNode>::iterator iit;
- <a name="l01073"></a>01073 <span class="keywordflow">for</span>( iit = it->second.intermediateNodes.begin(); iit != it->second.intermediateNodes.end(); ++iit ){
- <a name="l01074"></a>01074 <span class="keywordflow">if</span>( !iit->node.isUnspecified() && iit->node == adoptResp-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>() ){
- <a name="l01075"></a>01075
- <a name="l01076"></a>01076 <span class="comment">// if adoption was for a child intermediate node, nothing is to be done</span>
- <a name="l01077"></a>01077 <span class="keywordtype">int</span> intermediatePos = iit - it->second.intermediateNodes.begin();
- <a name="l01078"></a>01078 <span class="keywordflow">for</span>( <span class="keywordtype">int</span> pos = (intermediatePos+1) * <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a>; pos < (int) it->second.intermediateNodes.size() &&
- <a name="l01079"></a>01079 pos < (intermediatePos+2) * <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a>; ++pos )
- <a name="l01080"></a>01080 {
- <a name="l01081"></a>01081 <span class="keywordflow">if</span>( !it->second.intermediateNodes[pos].node.isUnspecified() &&
- <a name="l01082"></a>01082 adoptResp-><a class="code" href="classPubSubAdoptChildResponse.html#a2ec09ab70ab5e0f4603c3b856acfde80">getChild</a>() == it->second.intermediateNodes[pos].node ){
- <a name="l01083"></a>01083 <span class="keywordflow">return</span>;
- <a name="l01084"></a>01084 }
- <a name="l01085"></a>01085 }
- <a name="l01086"></a>01086
- <a name="l01087"></a>01087 <span class="comment">// child is a "real" child->remove it from cache</span>
- <a name="l01088"></a>01088 <span class="keywordflow">if</span>( !it->second.cachedChildren.erase( adoptResp-><a class="code" href="classPubSubAdoptChildResponse.html#a2ec09ab70ab5e0f4603c3b856acfde80">getChild</a>() ) ){
- <a name="l01089"></a>01089 <span class="comment">// if node got deleted in the meantime, inform parent...</span>
- <a name="l01090"></a>01090 <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>* goneMsg = <span class="keyword">new</span> <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>(<span class="stringliteral">"Node left Subspace"</span>);
- <a name="l01091"></a>01091 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#a0e52c6bd254d41b146393d4b825f5cb8">setNode</a>( adoptResp-><a class="code" href="classPubSubAdoptChildResponse.html#a2ec09ab70ab5e0f4603c3b856acfde80">getChild</a>() );
- <a name="l01092"></a>01092 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#ac7572204eed418bb6befc42859d682bc">setSubspaceId</a>( it->second.getId().getId() );
- <a name="l01093"></a>01093 goneMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#ac2a4c9a20c40c17b2a948f346d5ae4fc">PUBSUB_NODELEFT_L</a>( goneMsg ));
- <a name="l01094"></a>01094 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01095"></a>01095 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01096"></a>01096 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= goneMsg->getByteLength()
- <a name="l01097"></a>01097 );
- <a name="l01098"></a>01098 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( adoptResp-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>(), goneMsg );
- <a name="l01099"></a>01099 <span class="keywordflow">return</span>;
- <a name="l01100"></a>01100 }
- <a name="l01101"></a>01101
- <a name="l01102"></a>01102 <span class="comment">// move child to intermediate node's childrenlist</span>
- <a name="l01103"></a>01103 <span class="keywordflow">if</span>( !iit->children.insert( adoptResp-><a class="code" href="classPubSubAdoptChildResponse.html#a2ec09ab70ab5e0f4603c3b856acfde80">getChild</a>() ).second ){
- <a name="l01104"></a>01104 <span class="comment">// Node was already in children list, fix children count</span>
- <a name="l01105"></a>01105 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l01106"></a>01106 }
- <a name="l01107"></a>01107 iit->waitingChildren--;
- <a name="l01108"></a>01108
- <a name="l01109"></a>01109 <span class="comment">// FIXME: just for testing</span>
- <a name="l01110"></a>01110 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace = it->second;
- <a name="l01111"></a>01111 <span class="keywordtype">int</span> iii = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>();
- <a name="l01112"></a>01112 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l01113"></a>01113 <span class="keywordflow">if</span>( iii != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>() ){
- <a name="l01114"></a>01114 opp_error(<span class="stringliteral">"Huh?"</span>);
- <a name="l01115"></a>01115 }
- <a name="l01116"></a>01116
- <a name="l01117"></a>01117 <span class="comment">// Inform Backup</span>
- <a name="l01118"></a>01118 <span class="keywordflow">if</span>( !it->second.getBackupNode().isUnspecified() ){
- <a name="l01119"></a>01119 <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>* backupMsg = <span class="keyword">new</span> <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>(<span class="stringliteral">"Backup: node got a new parent"</span>);
- <a name="l01120"></a>01120 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a3b6847353d9871bcc13c01ac682c7739">setSubspaceId</a>( adoptResp-><a class="code" href="classPubSubAdoptChildResponse.html#ac06febb4c2fd644ad5c31b844e6356de">getSubspaceId</a>() );
- <a name="l01121"></a>01121 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#ab3a10059be8de4c048576c72a1c83fc7">setChild</a>( adoptResp-><a class="code" href="classPubSubAdoptChildResponse.html#a2ec09ab70ab5e0f4603c3b856acfde80">getChild</a>() );
- <a name="l01122"></a>01122 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#af4c25a5bb0a0f1efeb34cf2c13a9bc38">setParent</a>( adoptResp-><a class="code" href="classBaseRpcMessage.html#ada3e122125cfb5acc7350277ca69c45a">getSrcNode</a>() );
- <a name="l01123"></a>01123 backupMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a485654404a477aa60cb34dd0ae722258">PUBSUB_BACKUPSUBSCRIPTION_L</a>( backupMsg ));
- <a name="l01124"></a>01124 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01125"></a>01125 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01126"></a>01126 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= backupMsg->getByteLength()
- <a name="l01127"></a>01127 );
- <a name="l01128"></a>01128 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( it->second.getBackupNode(), backupMsg );
- <a name="l01129"></a>01129 <span class="keywordflow">return</span>;
- <a name="l01130"></a>01130 }
- <a name="l01131"></a>01131 }
- <a name="l01132"></a>01132 }
- <a name="l01133"></a>01133
- <a name="l01134"></a>01134 EV << <span class="stringliteral">"[PubSubMMOG::handleAdoptChildResponse() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l01135"></a>01135 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l01136"></a>01136 << <span class="stringliteral">" Received AdoptChild Response for unknown child!\n"</span>
- <a name="l01137"></a>01137 << endl;
- <a name="l01138"></a>01138 }
- <a name="l01139"></a>01139
- <a name="l01140"></a><a class="code" href="classPubSubMMOG.html#a7179d8d2355f09e50e5172a8bc4e60b1">01140</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a7179d8d2355f09e50e5172a8bc4e60b1">PubSubMMOG::handlePingCall</a>( <a class="code" href="classPubSubPingCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingCall</a>* pingCall )
- <a name="l01141"></a>01141 {
- <a name="l01142"></a>01142 <span class="keywordtype">int</span> subspaceId = pingCall-><a class="code" href="classPubSubPingCall.html#a6c09797ec1a7e667e85b3daba1dc5a60">getSubspaceId</a>();
- <a name="l01143"></a>01143
- <a name="l01144"></a>01144 <span class="keywordflow">if</span>( pingCall-><a class="code" href="classPubSubPingCall.html#ad2d88a7b8ff45cf95aabfcb792490d1d">getPingType</a>() == PUBSUB_PING_BACKUP ){
- <a name="l01145"></a>01145 <span class="comment">// reset heartbeat timer</span>
- <a name="l01146"></a>01146 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01147"></a>01147 it = <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.find( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>(pingCall-><a class="code" href="classPubSubPingCall.html#a6c09797ec1a7e667e85b3daba1dc5a60">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>) );
- <a name="l01148"></a>01148 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.end() ) {
- <a name="l01149"></a>01149 EV << <span class="stringliteral">"[PubSubMMOG::handlePingCall() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l01150"></a>01150 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l01151"></a>01151 << <span class="stringliteral">" Received PingCall for unknown Subspace!\n"</span>
- <a name="l01152"></a>01152 << endl;
- <a name="l01153"></a>01153 <span class="comment">// FIXME: Somebody thinks we are his backup. What shall we do?</span>
- <a name="l01154"></a>01154 } <span class="keywordflow">else</span> {
- <a name="l01155"></a>01155 it->second.resetHeartbeatFailCount();
- <a name="l01156"></a>01156 <a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">startTimer</a>( it->second.getHeartbeatTimer() );
- <a name="l01157"></a>01157 }
- <a name="l01158"></a>01158 }
- <a name="l01159"></a>01159
- <a name="l01160"></a>01160 <a class="code" href="classPubSubPingResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingResponse</a>* pingResp = <span class="keyword">new</span> <a class="code" href="classPubSubPingResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingResponse</a>(<span class="stringliteral">"PingResponse"</span>);
- <a name="l01161"></a>01161 pingResp-><a class="code" href="classPubSubPingResponse.html#a76a52d9b6b986a51d8c1c4797de9b271">setSubspaceId</a>( subspaceId );
- <a name="l01162"></a>01162 pingResp->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a9221c16747bc0f1ebce9a85e72a5d479">PUBSUB_PINGRESPONSE_L</a>( pingResp ));
- <a name="l01163"></a>01163 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01164"></a>01164 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01165"></a>01165 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= pingResp->getByteLength()
- <a name="l01166"></a>01166 );
- <a name="l01167"></a>01167 <a class="code" href="classBaseRpc.html#adc06091d348c98a5efbf54fe0afe8747" title="Send Remote-Procedure response message and deletes call message.">sendRpcResponse</a>( pingCall, pingResp );
- <a name="l01168"></a>01168 }
- <a name="l01169"></a>01169
- <a name="l01170"></a><a class="code" href="classPubSubMMOG.html#a6ade874ae0f4871c157cbf3e4334724c">01170</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a6ade874ae0f4871c157cbf3e4334724c">PubSubMMOG::handlePingResponse</a>( <a class="code" href="classPubSubPingResponse.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingResponse</a>* pingResp )
- <a name="l01171"></a>01171 {
- <a name="l01172"></a>01172 }
- <a name="l01173"></a>01173
- <a name="l01174"></a><a class="code" href="classPubSubMMOG.html#a0fe097eb8ff809023d0a119b2dc17d61">01174</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a0fe097eb8ff809023d0a119b2dc17d61">PubSubMMOG::takeOverNewSubspace</a>( <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId )
- <a name="l01175"></a>01175 {
- <a name="l01176"></a>01176 <span class="comment">// create a new subspace</span>
- <a name="l01177"></a>01177 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a> subspace( subspaceId );
- <a name="l01178"></a>01178 <a class="code" href="classPubSubMMOG.html#a60f9145524471fe4aa44641f1d0e6a17">takeOverSubspace</a>( subspace, <span class="keyword">true</span> );
- <a name="l01179"></a>01179 }
- <a name="l01180"></a>01180
- <a name="l01181"></a><a class="code" href="classPubSubMMOG.html#a60f9145524471fe4aa44641f1d0e6a17">01181</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a60f9145524471fe4aa44641f1d0e6a17">PubSubMMOG::takeOverSubspace</a>( <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace, <span class="keywordtype">bool</span> isNew = <span class="keyword">false</span> )
- <a name="l01182"></a>01182 {
- <a name="l01183"></a>01183 <span class="keyword">const</span> <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a>& subspaceId = subspace.<a class="code" href="classPubSubSubspace.html#a68c0be6c59e362d291533d74a65aa187">getId</a>();
- <a name="l01184"></a>01184 <span class="keywordtype">int</span> intId = subspaceId.<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>();
- <a name="l01185"></a>01185
- <a name="l01186"></a>01186 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l01187"></a>01187
- <a name="l01188"></a>01188 <a class="code" href="classNodeHandle.html" title="This class implements a node handle.">NodeHandle</a> oldNode = subspace.<a class="code" href="classPubSubSubspace.html#a996b0242f4c47164d5ee2141755d8fb1">getResponsibleNode</a>();
- <a name="l01189"></a>01189
- <a name="l01190"></a>01190 <span class="comment">// insert subspace into responsible list</span>
- <a name="l01191"></a>01191 subspace.<a class="code" href="classPubSubSubspace.html#addf352c69955906dd9bda7e0a0c09dbb">setResponsibleNode</a>( <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a> );
- <a name="l01192"></a>01192 <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.insert( make_pair(subspaceId, subspace) );
- <a name="l01193"></a>01193
- <a name="l01194"></a>01194 <span class="comment">// request backup</span>
- <a name="l01195"></a>01195 <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>* helpCall = <span class="keyword">new</span> <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>(<span class="stringliteral">"I need a backup node"</span>);
- <a name="l01196"></a>01196 helpCall-><a class="code" href="classPubSubHelpCall.html#a8f442b6f719d15e347aa4187fb3d2b47">setHelpType</a>( <a class="code" href="PubSubMessage__m_8h.html#a0a7abf0acc5a382f3b386ab1a09cd07aaa575d5ab279429401172053d228e4838">PUBSUB_BACKUP</a> );
- <a name="l01197"></a>01197 helpCall-><a class="code" href="classPubSubHelpCall.html#a526546e7f6cc281b640ffabca6fd4f29">setSubspaceId</a>( intId );
- <a name="l01198"></a>01198 helpCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#aac95c8ba038a0a9dd3671a29330493a9">PUBSUB_HELPCALL_L</a>( helpCall ));
- <a name="l01199"></a>01199 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01200"></a>01200 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01201"></a>01201 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= helpCall->getByteLength()
- <a name="l01202"></a>01202 );
- <a name="l01203"></a>01203 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, helpCall );
- <a name="l01204"></a>01204
- <a name="l01205"></a>01205 <span class="keywordflow">if</span>( !isNew ) {
- <a name="l01206"></a>01206 <a class="code" href="classPubSubReplacementMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubReplacementMessage</a>* repMsg = <span class="keyword">new</span> <a class="code" href="classPubSubReplacementMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubReplacementMessage</a>(<span class="stringliteral">"I replaced the responsible node"</span>);
- <a name="l01207"></a>01207 repMsg-><a class="code" href="classPubSubReplacementMessage.html#af6e6940ad03c2ebda468601eb8c69d08">setSubspaceId</a>( intId );
- <a name="l01208"></a>01208 repMsg-><a class="code" href="classPubSubReplacementMessage.html#a9561d83a385ef0f9cba891ba4a96e61a">setNewResponsibleNode</a>( <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a> );
- <a name="l01209"></a>01209 repMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a9dd61fb5cd5685440c7e610a2800b1f9">PUBSUB_REPLACEMENT_L</a>( repMsg ));
- <a name="l01210"></a>01210
- <a name="l01211"></a>01211 <span class="comment">// Inform children and lobbyserver about takeover</span>
- <a name="l01212"></a>01212 <a class="code" href="classPubSubMMOG.html#aedde86c47759c2ab5b61744c7065377c">sendMessageToChildren</a>( subspace, repMsg, NULL, repMsg );
- <a name="l01213"></a>01213 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, repMsg );
- <a name="l01214"></a>01214
- <a name="l01215"></a>01215 <span class="comment">// inform lobby server over failed node</span>
- <a name="l01216"></a>01216 <a class="code" href="classPubSubFailedNodeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubFailedNodeMessage</a>* failedNode = <span class="keyword">new</span> <a class="code" href="classPubSubFailedNodeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubFailedNodeMessage</a>(<span class="stringliteral">"Node failed"</span>);
- <a name="l01217"></a>01217 failedNode-><a class="code" href="classPubSubFailedNodeMessage.html#adc7577760792d9a3a2285fb5a368c24d">setFailedNode</a>( oldNode );
- <a name="l01218"></a>01218 failedNode->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#acb366745fb62311b100b1632b04b1141">PUBSUB_FAILEDNODE_L</a>( failedNode ));
- <a name="l01219"></a>01219 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01220"></a>01220 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01221"></a>01221 pubSubSignalingMessagesSize+= failedNode->getByteLength()
- <a name="l01222"></a>01222 );
- <a name="l01223"></a>01223 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, failedNode );
- <a name="l01224"></a>01224 }
- <a name="l01225"></a>01225 }
- <a name="l01226"></a>01226
- <a name="l01227"></a><a class="code" href="classPubSubMMOG.html#a237b78a3abc9b6cbb95021e25306e2e2">01227</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a237b78a3abc9b6cbb95021e25306e2e2">PubSubMMOG::sendHearbeatToChildren</a>()
- <a name="l01228"></a>01228 {
- <a name="l01229"></a>01229 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01230"></a>01230 <span class="keywordflow">for</span>( it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.begin(); it != <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end(); ++it) {
- <a name="l01231"></a>01231 <a class="code" href="classPubSubPingCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingCall</a>* bHeartbeat = <span class="keyword">new</span> <a class="code" href="classPubSubPingCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingCall</a>(<span class="stringliteral">"Heartbeat Backup"</span>);
- <a name="l01232"></a>01232 bHeartbeat-><a class="code" href="classPubSubPingCall.html#a13e6a60918d785ba886728b5f4bfe784">setPingType</a>( <a class="code" href="PubSubMessage__m_8h.html#a955af4961bb8702caeddf04706c0681ba4bcfe90f539ae081948077a9d0c1d992">PUBSUB_PING_BACKUP</a> );
- <a name="l01233"></a>01233 bHeartbeat-><a class="code" href="classPubSubPingCall.html#a33af6b48853e7c263c97ed80be0374ae">setSubspaceId</a>( it->second.getId().getId() );
- <a name="l01234"></a>01234 bHeartbeat->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a5afa100d3f724e66abc9356ec55342b5">PUBSUB_PINGCALL_L</a>( bHeartbeat ));
- <a name="l01235"></a>01235
- <a name="l01236"></a>01236 <a class="code" href="classPubSubPingCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingCall</a>* iHeartbeat = <span class="keyword">new</span> <a class="code" href="classPubSubPingCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingCall</a>(<span class="stringliteral">"Heartbeat Intermediate"</span>);
- <a name="l01237"></a>01237 iHeartbeat-><a class="code" href="classPubSubPingCall.html#a13e6a60918d785ba886728b5f4bfe784">setPingType</a>( <a class="code" href="PubSubMessage__m_8h.html#a955af4961bb8702caeddf04706c0681ba3402d727b81d4511a52d09df2252918c">PUBSUB_PING_INTERMEDIATE</a> );
- <a name="l01238"></a>01238 iHeartbeat-><a class="code" href="classPubSubPingCall.html#a33af6b48853e7c263c97ed80be0374ae">setSubspaceId</a>( it->second.getId().getId() );
- <a name="l01239"></a>01239 iHeartbeat->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a5afa100d3f724e66abc9356ec55342b5">PUBSUB_PINGCALL_L</a>( iHeartbeat ));
- <a name="l01240"></a>01240
- <a name="l01241"></a>01241 <a class="code" href="classPubSubMMOG.html#aedde86c47759c2ab5b61744c7065377c">sendMessageToChildren</a>( it->second, iHeartbeat, bHeartbeat, NULL);
- <a name="l01242"></a>01242 <span class="keyword">delete</span> bHeartbeat;
- <a name="l01243"></a>01243 <span class="keyword">delete</span> iHeartbeat;
- <a name="l01244"></a>01244 }
- <a name="l01245"></a>01245 }
- <a name="l01246"></a>01246
- <a name="l01247"></a><a class="code" href="classPubSubMMOG.html#abd00be445c110f527365d00553713334">01247</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#abd00be445c110f527365d00553713334">PubSubMMOG::sendPingToChildren</a>()
- <a name="l01248"></a>01248 {
- <a name="l01249"></a>01249 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01250"></a>01250 <span class="keywordflow">for</span>( it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.begin(); it != <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end(); ++it) {
- <a name="l01251"></a>01251 <a class="code" href="classPubSubPingCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingCall</a>* heartbeat = <span class="keyword">new</span> <a class="code" href="classPubSubPingCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingCall</a>(<span class="stringliteral">"Ping"</span>);
- <a name="l01252"></a>01252 heartbeat-><a class="code" href="classPubSubPingCall.html#a13e6a60918d785ba886728b5f4bfe784">setPingType</a>( <a class="code" href="PubSubMessage__m_8h.html#a955af4961bb8702caeddf04706c0681ba6be4bc3a5b9c7bee39a3eed787e5eb90">PUBSUB_PING_CHILD</a> );
- <a name="l01253"></a>01253 heartbeat-><a class="code" href="classPubSubPingCall.html#a33af6b48853e7c263c97ed80be0374ae">setSubspaceId</a>( it->second.getId().getId() );
- <a name="l01254"></a>01254 heartbeat->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a5afa100d3f724e66abc9356ec55342b5">PUBSUB_PINGCALL_L</a>( heartbeat ));
- <a name="l01255"></a>01255 <a class="code" href="classPubSubMMOG.html#aedde86c47759c2ab5b61744c7065377c">sendMessageToChildren</a>( it->second, NULL, NULL, heartbeat );
- <a name="l01256"></a>01256 <span class="keyword">delete</span> heartbeat;
- <a name="l01257"></a>01257 }
- <a name="l01258"></a>01258 }
- <a name="l01259"></a>01259
- <a name="l01260"></a><a class="code" href="classPubSubMMOG.html#a01a6bc8e4b0e38e57d2e3108088f67f3">01260</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a01a6bc8e4b0e38e57d2e3108088f67f3">PubSubMMOG::handleParentTimeout</a>( <a class="code" href="classPubSubTimer.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTimer</a>* timer )
- <a name="l01261"></a>01261 {
- <a name="l01262"></a>01262 <span class="comment">// our parent timed out. we have to take over the subspace...</span>
- <a name="l01263"></a>01263 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(timer-><a class="code" href="classPubSubTimer.html#a5d7727faa7e6264688af6211880bbff8">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l01264"></a>01264 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01265"></a>01265 it = <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.find( subspaceId );
- <a name="l01266"></a>01266 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.end() ) {
- <a name="l01267"></a>01267 <span class="keyword">delete</span> timer;
- <a name="l01268"></a>01268 <span class="keywordflow">return</span>;
- <a name="l01269"></a>01269 }
- <a name="l01270"></a>01270
- <a name="l01271"></a>01271 <span class="comment">// increase fail count; if to high, take over subspace</span>
- <a name="l01272"></a>01272 it->second.incHeartbeatFailCount();
- <a name="l01273"></a>01273 <span class="keywordflow">if</span>( it->second.getHeartbeatFailCount() > 1 ) { <span class="comment">// FIXME: make it a parameter</span>
- <a name="l01274"></a>01274
- <a name="l01275"></a>01275 <span class="comment">// Delete Timer</span>
- <a name="l01276"></a>01276 cancelAndDelete( timer );
- <a name="l01277"></a>01277 it->second.setHeartbeatTimer( NULL );
- <a name="l01278"></a>01278
- <a name="l01279"></a>01279 <span class="comment">// Take over Subspace</span>
- <a name="l01280"></a>01280 <a class="code" href="classPubSubMMOG.html#a60f9145524471fe4aa44641f1d0e6a17">takeOverSubspace</a>( it->second );
- <a name="l01281"></a>01281 <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.erase( it );
- <a name="l01282"></a>01282
- <a name="l01283"></a>01283 } <span class="keywordflow">else</span> {
- <a name="l01284"></a>01284 <a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">startTimer</a>( timer );
- <a name="l01285"></a>01285 }
- <a name="l01286"></a>01286 }
- <a name="l01287"></a>01287
- <a name="l01288"></a><a class="code" href="classPubSubMMOG.html#a217e815ddc5ba02f8afe33a73389184f">01288</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a217e815ddc5ba02f8afe33a73389184f">PubSubMMOG::handleBackupCallTimeout</a>( <a class="code" href="classPubSubBackupCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupCall</a>* backupCall, <span class="keyword">const</span> <a class="code" href="classTransportAddress.html" title="This class implements a common transport address.">TransportAddress</a>& oldNode )
- <a name="l01289"></a>01289 {
- <a name="l01290"></a>01290 <span class="comment">// FIXME: cast oldNode to NodeHandle</span>
- <a name="l01291"></a>01291 <span class="comment">// Inform Lobbyserver over failed node</span>
- <a name="l01292"></a>01292 <a class="code" href="classPubSubFailedNodeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubFailedNodeMessage</a>* failedNode = <span class="keyword">new</span> <a class="code" href="classPubSubFailedNodeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubFailedNodeMessage</a>(<span class="stringliteral">"Node failed"</span>);
- <a name="l01293"></a>01293 failedNode-><a class="code" href="classPubSubFailedNodeMessage.html#adc7577760792d9a3a2285fb5a368c24d">setFailedNode</a>( oldNode );
- <a name="l01294"></a>01294 failedNode->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#acb366745fb62311b100b1632b04b1141">PUBSUB_FAILEDNODE_L</a>( failedNode ));
- <a name="l01295"></a>01295 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01296"></a>01296 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01297"></a>01297 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= failedNode->getByteLength()
- <a name="l01298"></a>01298 );
- <a name="l01299"></a>01299 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, failedNode );
- <a name="l01300"></a>01300
- <a name="l01301"></a>01301 <span class="comment">// Request new Backup</span>
- <a name="l01302"></a>01302 <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>* helpCall = <span class="keyword">new</span> <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>(<span class="stringliteral">"I need a backup node"</span>);
- <a name="l01303"></a>01303 helpCall-><a class="code" href="classPubSubHelpCall.html#a8f442b6f719d15e347aa4187fb3d2b47">setHelpType</a>( <a class="code" href="PubSubMessage__m_8h.html#a0a7abf0acc5a382f3b386ab1a09cd07aaa575d5ab279429401172053d228e4838">PUBSUB_BACKUP</a> );
- <a name="l01304"></a>01304 helpCall-><a class="code" href="classPubSubHelpCall.html#a526546e7f6cc281b640ffabca6fd4f29">setSubspaceId</a>( backupCall-><a class="code" href="classPubSubBackupCall.html#a78774c6987e65617ae00b8f896f2963b">getSubspaceId</a>() );
- <a name="l01305"></a>01305 helpCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#aac95c8ba038a0a9dd3671a29330493a9">PUBSUB_HELPCALL_L</a>( helpCall ));
- <a name="l01306"></a>01306 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01307"></a>01307 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01308"></a>01308 pubSubSignalingMessagesSize+= helpCall->getByteLength()
- <a name="l01309"></a>01309 );
- <a name="l01310"></a>01310 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, helpCall );
- <a name="l01311"></a>01311
- <a name="l01312"></a>01312 <span class="comment">// find appropriate subspace and mark backup as failed</span>
- <a name="l01313"></a>01313 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(backupCall-><a class="code" href="classPubSubBackupCall.html#a78774c6987e65617ae00b8f896f2963b">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l01314"></a>01314 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01315"></a>01315 it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.find( subspaceId );
- <a name="l01316"></a>01316 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end() ) {
- <a name="l01317"></a>01317 <span class="keywordflow">return</span>;
- <a name="l01318"></a>01318 }
- <a name="l01319"></a>01319 it->second.setBackupNode( <a class="code" href="classNodeHandle.html#a79bf2c5e29c969cbd0b2581cb188d8a6" title="the unspecified NodeHandle">NodeHandle::UNSPECIFIED_NODE</a> );
- <a name="l01320"></a>01320 }
- <a name="l01321"></a>01321
- <a name="l01322"></a><a class="code" href="classPubSubMMOG.html#a0ca3bd97cac131ba5c2ff02235cc6a2f">01322</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a0ca3bd97cac131ba5c2ff02235cc6a2f">PubSubMMOG::handlePingCallTimeout</a>( <a class="code" href="classPubSubPingCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubPingCall</a>* pingCall, <span class="keyword">const</span> <a class="code" href="classTransportAddress.html" title="This class implements a common transport address.">TransportAddress</a>& oldNode )
- <a name="l01323"></a>01323 {
- <a name="l01324"></a>01324 <span class="comment">// Inform Lobbyserver over failed node</span>
- <a name="l01325"></a>01325 <span class="keyword">const</span> <a class="code" href="classNodeHandle.html" title="This class implements a node handle.">NodeHandle</a>& oldNodeHandle = <span class="keyword">dynamic_cast<</span><span class="keyword">const </span><a class="code" href="classNodeHandle.html" title="This class implements a node handle.">NodeHandle</a>&<span class="keyword">></span>(oldNode);
- <a name="l01326"></a>01326 <span class="comment">// FIXME: use oldNodeHandle instead of oldNode</span>
- <a name="l01327"></a>01327 <a class="code" href="classPubSubFailedNodeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubFailedNodeMessage</a>* failedNode = <span class="keyword">new</span> <a class="code" href="classPubSubFailedNodeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubFailedNodeMessage</a>(<span class="stringliteral">"Node failed"</span>);
- <a name="l01328"></a>01328 failedNode->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#acb366745fb62311b100b1632b04b1141">PUBSUB_FAILEDNODE_L</a>( failedNode ));
- <a name="l01329"></a>01329 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01330"></a>01330 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01331"></a>01331 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= failedNode->getByteLength()
- <a name="l01332"></a>01332 );
- <a name="l01333"></a>01333 failedNode-><a class="code" href="classPubSubFailedNodeMessage.html#adc7577760792d9a3a2285fb5a368c24d">setFailedNode</a>( oldNode );
- <a name="l01334"></a>01334 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, failedNode );
- <a name="l01335"></a>01335
- <a name="l01336"></a>01336 <span class="comment">// find appropriate subspace</span>
- <a name="l01337"></a>01337 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(pingCall-><a class="code" href="classPubSubPingCall.html#a6c09797ec1a7e667e85b3daba1dc5a60">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l01338"></a>01338 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01339"></a>01339 it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.find( subspaceId );
- <a name="l01340"></a>01340 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end() ) {
- <a name="l01341"></a>01341 <span class="keywordflow">return</span>;
- <a name="l01342"></a>01342 }
- <a name="l01343"></a>01343 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace = it->second;
- <a name="l01344"></a>01344
- <a name="l01345"></a>01345 <span class="keywordflow">if</span>( pingCall-><a class="code" href="classPubSubPingCall.html#ad2d88a7b8ff45cf95aabfcb792490d1d">getPingType</a>() == PUBSUB_PING_CHILD ){
- <a name="l01346"></a>01346 <span class="comment">// remove child</span>
- <a name="l01347"></a>01347 <a class="code" href="classPubSubMMOG.html#a104570a1f3f3f4951bf67e9b8e09b0e8">unsubscribeChild</a>( oldNodeHandle, subspace );
- <a name="l01348"></a>01348
- <a name="l01349"></a>01349 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( pingCall-><a class="code" href="classPubSubPingCall.html#ad2d88a7b8ff45cf95aabfcb792490d1d">getPingType</a>() == PUBSUB_PING_BACKUP ){
- <a name="l01350"></a>01350
- <a name="l01351"></a>01351 <span class="comment">// if we didn't already have (or asked for) a new backup</span>
- <a name="l01352"></a>01352 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() &&
- <a name="l01353"></a>01353 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>() == oldNodeHandle )
- <a name="l01354"></a>01354 {
- <a name="l01355"></a>01355 <span class="comment">// our backup timed out. we have to request a new one...</span>
- <a name="l01356"></a>01356 <span class="comment">// delete old backup entry</span>
- <a name="l01357"></a>01357 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a462a25a436aa25d8cc38310119a5d671">setBackupNode</a>( <a class="code" href="classNodeHandle.html#a79bf2c5e29c969cbd0b2581cb188d8a6" title="the unspecified NodeHandle">NodeHandle::UNSPECIFIED_NODE</a> );
- <a name="l01358"></a>01358
- <a name="l01359"></a>01359 <span class="comment">// Request new Backup</span>
- <a name="l01360"></a>01360 <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>* helpCall = <span class="keyword">new</span> <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>(<span class="stringliteral">"I need a backup node"</span>);
- <a name="l01361"></a>01361 helpCall-><a class="code" href="classPubSubHelpCall.html#a8f442b6f719d15e347aa4187fb3d2b47">setHelpType</a>( <a class="code" href="PubSubMessage__m_8h.html#a0a7abf0acc5a382f3b386ab1a09cd07aaa575d5ab279429401172053d228e4838">PUBSUB_BACKUP</a> );
- <a name="l01362"></a>01362 helpCall-><a class="code" href="classPubSubHelpCall.html#a526546e7f6cc281b640ffabca6fd4f29">setSubspaceId</a>( pingCall-><a class="code" href="classPubSubPingCall.html#a6c09797ec1a7e667e85b3daba1dc5a60">getSubspaceId</a>() );
- <a name="l01363"></a>01363 helpCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#aac95c8ba038a0a9dd3671a29330493a9">PUBSUB_HELPCALL_L</a>( helpCall ));
- <a name="l01364"></a>01364 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01365"></a>01365 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01366"></a>01366 pubSubSignalingMessagesSize+= helpCall->getByteLength()
- <a name="l01367"></a>01367 );
- <a name="l01368"></a>01368 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, helpCall );
- <a name="l01369"></a>01369 }
- <a name="l01370"></a>01370
- <a name="l01371"></a>01371 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( pingCall-><a class="code" href="classPubSubPingCall.html#ad2d88a7b8ff45cf95aabfcb792490d1d">getPingType</a>() == PUBSUB_PING_INTERMEDIATE ){
- <a name="l01372"></a>01372 <span class="comment">// one intermediate node timed out. we have to request a new one...</span>
- <a name="l01373"></a>01373 <span class="comment">// delete old intermediate entry</span>
- <a name="l01374"></a>01374 deque<PubSubSubspaceResponsible::IntermediateNode>::iterator iit;
- <a name="l01375"></a>01375 <span class="keywordflow">for</span>( iit = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin(); iit != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end(); ++iit ){
- <a name="l01376"></a>01376 <span class="keywordflow">if</span>( !iit->node.isUnspecified() && oldNode == iit->node ) <span class="keywordflow">break</span>;
- <a name="l01377"></a>01377 }
- <a name="l01378"></a>01378 <span class="keywordflow">if</span>( iit == subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end() ) <span class="keywordflow">return</span>;
- <a name="l01379"></a>01379
- <a name="l01380"></a>01380 <a class="code" href="classNodeHandle.html" title="This class implements a node handle.">NodeHandle</a> oldNode = iit->node;
- <a name="l01381"></a>01381 iit->node = <a class="code" href="classNodeHandle.html#a79bf2c5e29c969cbd0b2581cb188d8a6" title="the unspecified NodeHandle">NodeHandle::UNSPECIFIED_NODE</a>;
- <a name="l01382"></a>01382
- <a name="l01383"></a>01383 <span class="comment">// inform Backup</span>
- <a name="l01384"></a>01384 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l01385"></a>01385 <a class="code" href="classPubSubBackupIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupIntermediateMessage</a>* backupMsg = <span class="keyword">new</span> <a class="code" href="classPubSubBackupIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupIntermediateMessage</a>(<span class="stringliteral">"Backup: Intermediate failed"</span>);
- <a name="l01386"></a>01386 backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#ae84b3d586b249c5d8b0c99cc5d199a5a">setSubspaceId</a>( pingCall-><a class="code" href="classPubSubPingCall.html#a6c09797ec1a7e667e85b3daba1dc5a60">getSubspaceId</a>() );
- <a name="l01387"></a>01387 backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#adea3fba4eae66064247ab342fc487302">setPos</a>( iit - it->second.intermediateNodes.begin() );
- <a name="l01388"></a>01388 backupMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#af0f2565f24c2e5b8e3655c3fb073d887">PUBSUB_BACKUPINTERMEDIATE_L</a>( backupMsg ));
- <a name="l01389"></a>01389 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01390"></a>01390 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01391"></a>01391 pubSubSignalingMessagesSize+= backupMsg->getByteLength()
- <a name="l01392"></a>01392 );
- <a name="l01393"></a>01393 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>(), backupMsg );
- <a name="l01394"></a>01394 }
- <a name="l01395"></a>01395
- <a name="l01396"></a>01396 <span class="keywordtype">bool</span> fixNeeded = <span class="keyword">false</span>;
- <a name="l01397"></a>01397 <span class="comment">// Take over all children until new intermediate is found.</span>
- <a name="l01398"></a>01398 set<NodeHandle>::iterator childIt;
- <a name="l01399"></a>01399 <span class="keywordflow">for</span>( childIt = iit->children.begin(); childIt != iit->children.end(); ++childIt ){
- <a name="l01400"></a>01400 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert( make_pair(*childIt, <span class="keyword">false</span>)).second ){
- <a name="l01401"></a>01401 fixNeeded = <span class="keyword">true</span>;
- <a name="l01402"></a>01402 }
- <a name="l01403"></a>01403
- <a name="l01404"></a>01404 <span class="comment">// Inform Backup</span>
- <a name="l01405"></a>01405 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l01406"></a>01406 <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>* backupMsg = <span class="keyword">new</span> <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>(<span class="stringliteral">"Backup: nodes moved to cache"</span>);
- <a name="l01407"></a>01407 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a3b6847353d9871bcc13c01ac682c7739">setSubspaceId</a>( pingCall-><a class="code" href="classPubSubPingCall.html#a6c09797ec1a7e667e85b3daba1dc5a60">getSubspaceId</a>() );
- <a name="l01408"></a>01408 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#ab3a10059be8de4c048576c72a1c83fc7">setChild</a>( *childIt );
- <a name="l01409"></a>01409 backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a45ca49bce2d925ec64da036f7c67ec1f">setOldParent</a>( oldNodeHandle );
- <a name="l01410"></a>01410 backupMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a485654404a477aa60cb34dd0ae722258">PUBSUB_BACKUPSUBSCRIPTION_L</a>( backupMsg ));
- <a name="l01411"></a>01411 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01412"></a>01412 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01413"></a>01413 pubSubSignalingMessagesSize+= backupMsg->getByteLength()
- <a name="l01414"></a>01414 );
- <a name="l01415"></a>01415 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>(), backupMsg );
- <a name="l01416"></a>01416 }
- <a name="l01417"></a>01417 }
- <a name="l01418"></a>01418 iit->children.clear();
- <a name="l01419"></a>01419 <span class="keywordflow">if</span>( fixNeeded ) subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l01420"></a>01420
- <a name="l01421"></a>01421 <span class="comment">// inform parent of intermediate node</span>
- <a name="l01422"></a>01422 <span class="keywordtype">int</span> parentPos = (iit - subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin())/<a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> -1;
- <a name="l01423"></a>01423 <span class="keywordflow">if</span>( parentPos >= 0 ){
- <a name="l01424"></a>01424 <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a>& parent = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[parentPos];
- <a name="l01425"></a>01425 <span class="keywordflow">if</span>( !parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>.<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l01426"></a>01426 <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>* goneMsg = <span class="keyword">new</span> <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>(<span class="stringliteral">"Intermediate left Subspace"</span>);
- <a name="l01427"></a>01427 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#a0e52c6bd254d41b146393d4b825f5cb8">setNode</a>( oldNodeHandle );
- <a name="l01428"></a>01428 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#ac7572204eed418bb6befc42859d682bc">setSubspaceId</a>( subspace.<a class="code" href="classPubSubSubspace.html#a68c0be6c59e362d291533d74a65aa187">getId</a>().<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l01429"></a>01429 goneMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#ac2a4c9a20c40c17b2a948f346d5ae4fc">PUBSUB_NODELEFT_L</a>( goneMsg ));
- <a name="l01430"></a>01430 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01431"></a>01431 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01432"></a>01432 pubSubSignalingMessagesSize+= goneMsg->getByteLength()
- <a name="l01433"></a>01433 );
- <a name="l01434"></a>01434 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>, goneMsg );
- <a name="l01435"></a>01435 }
- <a name="l01436"></a>01436 }
- <a name="l01437"></a>01437
- <a name="l01438"></a>01438 <span class="comment">// Request new Intermediate</span>
- <a name="l01439"></a>01439 <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>* helpCall = <span class="keyword">new</span> <a class="code" href="classPubSubHelpCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpCall</a>(<span class="stringliteral">"I need an intermediate node"</span>);
- <a name="l01440"></a>01440 helpCall-><a class="code" href="classPubSubHelpCall.html#a8f442b6f719d15e347aa4187fb3d2b47">setHelpType</a>( <a class="code" href="PubSubMessage__m_8h.html#a0a7abf0acc5a382f3b386ab1a09cd07aa99501a84d5d53b3a4c78362dc7c7a551">PUBSUB_INTERMEDIATE</a> );
- <a name="l01441"></a>01441 helpCall-><a class="code" href="classPubSubHelpCall.html#a526546e7f6cc281b640ffabca6fd4f29">setSubspaceId</a>( pingCall-><a class="code" href="classPubSubPingCall.html#a6c09797ec1a7e667e85b3daba1dc5a60">getSubspaceId</a>() );
- <a name="l01442"></a>01442 helpCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#aac95c8ba038a0a9dd3671a29330493a9">PUBSUB_HELPCALL_L</a>( helpCall ));
- <a name="l01443"></a>01443 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01444"></a>01444 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01445"></a>01445 pubSubSignalingMessagesSize+= helpCall->getByteLength()
- <a name="l01446"></a>01446 );
- <a name="l01447"></a>01447 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, helpCall );
- <a name="l01448"></a>01448 }
- <a name="l01449"></a>01449 <span class="comment">// FIXME: just for testing</span>
- <a name="l01450"></a>01450 <span class="keywordtype">int</span> iii = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>();
- <a name="l01451"></a>01451 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l01452"></a>01452 <span class="keywordflow">if</span>( iii != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>() ){
- <a name="l01453"></a>01453 opp_error(<span class="stringliteral">"Huh?"</span>);
- <a name="l01454"></a>01454 }
- <a name="l01455"></a>01455
- <a name="l01456"></a>01456 }
- <a name="l01457"></a>01457
- <a name="l01458"></a><a class="code" href="classPubSubMMOG.html#a1e97ea82ff0848af1f5437b1c8da7c99">01458</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a1e97ea82ff0848af1f5437b1c8da7c99">PubSubMMOG::handleSubscriptionCallTimeout</a>( <a class="code" href="classPubSubSubscriptionCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubSubscriptionCall</a>* subscriptionCall, <span class="keyword">const</span> <a class="code" href="classTransportAddress.html" title="This class implements a common transport address.">TransportAddress</a>& oldNode )
- <a name="l01459"></a>01459 {
- <a name="l01460"></a>01460 <span class="comment">// FIXME: cast oldNode to NodeHandle</span>
- <a name="l01461"></a>01461 <span class="comment">// our subscription call timed out. This means the responsible node is dead...</span>
- <a name="l01462"></a>01462 <span class="comment">// Inform Lobbyserver over failed node</span>
- <a name="l01463"></a>01463 <a class="code" href="classPubSubFailedNodeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubFailedNodeMessage</a>* failedNode = <span class="keyword">new</span> <a class="code" href="classPubSubFailedNodeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubFailedNodeMessage</a>(<span class="stringliteral">"Node failed"</span>);
- <a name="l01464"></a>01464 failedNode-><a class="code" href="classPubSubFailedNodeMessage.html#adc7577760792d9a3a2285fb5a368c24d">setFailedNode</a>( oldNode );
- <a name="l01465"></a>01465 failedNode->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#acb366745fb62311b100b1632b04b1141">PUBSUB_FAILEDNODE_L</a>( failedNode ));
- <a name="l01466"></a>01466 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01467"></a>01467 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01468"></a>01468 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= failedNode->getByteLength()
- <a name="l01469"></a>01469 );
- <a name="l01470"></a>01470 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, failedNode );
- <a name="l01471"></a>01471
- <a name="l01472"></a>01472 <span class="comment">// Ask for new responsible node</span>
- <a name="l01473"></a>01473 <a class="code" href="classPubSubResponsibleNodeCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubResponsibleNodeCall</a>* respCall = <span class="keyword">new</span> <a class="code" href="classPubSubResponsibleNodeCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubResponsibleNodeCall</a>(<span class="stringliteral">"Request Responsible NodeHandle"</span>);
- <a name="l01474"></a>01474 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId( subscriptionCall-><a class="code" href="classPubSubSubscriptionCall.html#a6cba83861e6c98de7a2721a596d2ff14">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l01475"></a>01475 respCall-><a class="code" href="classPubSubResponsibleNodeCall.html#a061903ad243ddb58c094ee5a3c5a206b">setSubspacePos</a>( <a class="code" href="classVector2D.html">Vector2D</a>(subspaceId.getX(), subspaceId.getY()) );
- <a name="l01476"></a>01476 respCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a5d4e7d4a5b91386ccba0e0a03330ab9d">PUBSUB_RESPONSIBLENODECALL_L</a>( respCall ));
- <a name="l01477"></a>01477 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01478"></a>01478 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01479"></a>01479 pubSubSignalingMessagesSize+= respCall->getByteLength()
- <a name="l01480"></a>01480 );
- <a name="l01481"></a>01481 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, respCall, NULL, 5, 5 ); <span class="comment">// FIXME: Make it a parameter...</span>
- <a name="l01482"></a>01482 }
- <a name="l01483"></a>01483
- <a name="l01484"></a><a class="code" href="classPubSubMMOG.html#abd3f25e6c1521cc5d6959fc1929a2ac6">01484</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#abd3f25e6c1521cc5d6959fc1929a2ac6">PubSubMMOG::handleReplacementMessage</a>( <a class="code" href="classPubSubReplacementMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubReplacementMessage</a>* replaceMsg )
- <a name="l01485"></a>01485 {
- <a name="l01486"></a>01486 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(replaceMsg-><a class="code" href="classPubSubReplacementMessage.html#ab1379bead1302a2e9278039991db882f">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l01487"></a>01487
- <a name="l01488"></a>01488 <span class="comment">// There's a new responsible node for a subspace</span>
- <a name="l01489"></a>01489 <span class="comment">// Replace the old one in the intermediateSubspaces map...</span>
- <a name="l01490"></a>01490 std::map<PubSubSubspaceId, PubSubSubspaceIntermediate>::iterator it;
- <a name="l01491"></a>01491 it = <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.find( subspaceId );
- <a name="l01492"></a>01492 <span class="keywordflow">if</span>( it != <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.end() ) {
- <a name="l01493"></a>01493 it->second.setResponsibleNode( replaceMsg-><a class="code" href="classPubSubReplacementMessage.html#ad86ff24aed5d6c098aa882032966cb79">getNewResponsibleNode</a>() );
- <a name="l01494"></a>01494 }
- <a name="l01495"></a>01495
- <a name="l01496"></a>01496 <span class="comment">// ... and in the subsribed subspaces list</span>
- <a name="l01497"></a>01497 std::list<PubSubSubspace>::iterator iit;
- <a name="l01498"></a>01498 <span class="keywordflow">for</span>( iit = <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.begin(); iit != <a class="code" href="classPubSubMMOG.html#a0535f1d205515626aaa20d25f8da3cda">subscribedSubspaces</a>.end(); ++iit ){
- <a name="l01499"></a>01499 <span class="keywordflow">if</span>( iit->getId() == subspaceId ) {
- <a name="l01500"></a>01500 iit->setResponsibleNode( replaceMsg-><a class="code" href="classPubSubReplacementMessage.html#ad86ff24aed5d6c098aa882032966cb79">getNewResponsibleNode</a>() );
- <a name="l01501"></a>01501 <span class="keywordflow">return</span>;
- <a name="l01502"></a>01502 }
- <a name="l01503"></a>01503 }
- <a name="l01504"></a>01504 }
- <a name="l01505"></a>01505
- <a name="l01506"></a><a class="code" href="classPubSubMMOG.html#af1197b5fab38765c9e510cb6e755f62a">01506</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#af1197b5fab38765c9e510cb6e755f62a">PubSubMMOG::handleReleaseIntermediate</a>( <a class="code" href="classPubSubReleaseIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubReleaseIntermediateMessage</a>* releaseMsg )
- <a name="l01507"></a>01507 {
- <a name="l01508"></a>01508 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(releaseMsg-><a class="code" href="classPubSubReleaseIntermediateMessage.html#a18c562845e99ef0ef4d72faba29aded5">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l01509"></a>01509 <a class="code" href="classPubSubMMOG.html#ac2ff9ed8d82f2fd97f69343cd8ee78ac">intermediateSubspaces</a>.erase( subspaceId );
- <a name="l01510"></a>01510 }
- <a name="l01511"></a>01511
- <a name="l01512"></a><a class="code" href="classPubSubMMOG.html#a77b144f6034216ef0184589cf5b4da8d">01512</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a77b144f6034216ef0184589cf5b4da8d">PubSubMMOG::handleIntermediateBackup</a>( <a class="code" href="classPubSubBackupIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupIntermediateMessage</a>* backupMsg )
- <a name="l01513"></a>01513 {
- <a name="l01514"></a>01514 <span class="comment">// find appropriate subspace</span>
- <a name="l01515"></a>01515 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#a29368618e2b7954ae2080f6d3f53cada">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l01516"></a>01516 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01517"></a>01517 it = <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.find( subspaceId );
- <a name="l01518"></a>01518 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.end() ) {
- <a name="l01519"></a>01519 <span class="keywordflow">return</span>;
- <a name="l01520"></a>01520 }
- <a name="l01521"></a>01521
- <a name="l01522"></a>01522 <span class="keywordflow">if</span>( backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#ab6e4a0ccaf47b2adde4de6629eee7cd2">getPos</a>() >= (int) it->second.intermediateNodes.size() ){
- <a name="l01523"></a>01523 it->second.intermediateNodes.resize( backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#ab6e4a0ccaf47b2adde4de6629eee7cd2">getPos</a>() + 1 );
- <a name="l01524"></a>01524 }
- <a name="l01525"></a>01525 it->second.intermediateNodes[ backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#ab6e4a0ccaf47b2adde4de6629eee7cd2">getPos</a>() ].node = backupMsg-><a class="code" href="classPubSubBackupIntermediateMessage.html#ae375666139531eea47c20adc4d95437c">getNode</a>();
- <a name="l01526"></a>01526 }
- <a name="l01527"></a>01527
- <a name="l01528"></a><a class="code" href="classPubSubMMOG.html#a354f1a0173cb3cc5a00bc7d16d17f73a">01528</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a354f1a0173cb3cc5a00bc7d16d17f73a">PubSubMMOG::handleSubscriptionBackup</a>( <a class="code" href="classPubSubBackupSubscriptionMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupSubscriptionMessage</a>* backupMsg )
- <a name="l01529"></a>01529 {
- <a name="l01530"></a>01530 <span class="comment">// Note: this funktion may break subspace's tatalChildrenCall</span>
- <a name="l01531"></a>01531 <span class="comment">// You have to use fixTotalChildrenCount before using the subspace</span>
- <a name="l01532"></a>01532 <span class="comment">// find appropriate subspace</span>
- <a name="l01533"></a>01533 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a86c045717d5a7327f8e9484b399167d5">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l01534"></a>01534 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01535"></a>01535 it = <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.find( subspaceId );
- <a name="l01536"></a>01536 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.end() ) {
- <a name="l01537"></a>01537 <span class="keywordflow">return</span>;
- <a name="l01538"></a>01538 }
- <a name="l01539"></a>01539 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace = it->second;
- <a name="l01540"></a>01540
- <a name="l01541"></a>01541 deque<PubSubSubspaceResponsible::IntermediateNode>::iterator iit;
- <a name="l01542"></a>01542
- <a name="l01543"></a>01543 <span class="keywordflow">if</span>( !backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a9f318b50e53b2c75f8cac7ab2629a614">getOldParent</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l01544"></a>01544 <span class="comment">// oldParent set -> move child</span>
- <a name="l01545"></a>01545 <span class="keywordflow">if</span>( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a9f318b50e53b2c75f8cac7ab2629a614">getOldParent</a>() == subspace.<a class="code" href="classPubSubSubspace.html#a996b0242f4c47164d5ee2141755d8fb1">getResponsibleNode</a>() ){
- <a name="l01546"></a>01546 <span class="comment">// direct child -> cache</span>
- <a name="l01547"></a>01547 subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#ada0034be890586e3cc0305bfa089e031">removeChild</a>( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a457980ddd7bf8f15c5392ab43b0d090e">getChild</a>() );
- <a name="l01548"></a>01548 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert(make_pair( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a457980ddd7bf8f15c5392ab43b0d090e">getChild</a>(), <span class="keyword">false</span>) );
- <a name="l01549"></a>01549
- <a name="l01550"></a>01550 } <span class="keywordflow">else</span> {
- <a name="l01551"></a>01551 <span class="comment">// from I -> chache</span>
- <a name="l01552"></a>01552 <span class="keywordflow">for</span>( iit = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin(); iit != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end(); ++iit ){
- <a name="l01553"></a>01553 <span class="comment">// if( !iit->node.isUnspecified() && iit->node == backupMsg->getOldParent() ){</span>
- <a name="l01554"></a>01554 iit->children.erase( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a457980ddd7bf8f15c5392ab43b0d090e">getChild</a>() );
- <a name="l01555"></a>01555 <span class="comment">// }</span>
- <a name="l01556"></a>01556 }
- <a name="l01557"></a>01557 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert(make_pair( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a457980ddd7bf8f15c5392ab43b0d090e">getChild</a>(), <span class="keyword">false</span>) );
- <a name="l01558"></a>01558 }
- <a name="l01559"></a>01559 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#aaca1114e8cbfe010357b2088dbb5696a">getParent</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l01560"></a>01560 <span class="comment">// parent not set -> new child to chache</span>
- <a name="l01561"></a>01561 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert(make_pair( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a457980ddd7bf8f15c5392ab43b0d090e">getChild</a>(), <span class="keyword">false</span>) );
- <a name="l01562"></a>01562
- <a name="l01563"></a>01563 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#aaca1114e8cbfe010357b2088dbb5696a">getParent</a>() == subspace.<a class="code" href="classPubSubSubspace.html#a996b0242f4c47164d5ee2141755d8fb1">getResponsibleNode</a>() ){
- <a name="l01564"></a>01564 <span class="comment">// new direct child</span>
- <a name="l01565"></a>01565 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ae254ce652d4827abfb7981b4f067c89a">addChild</a>( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a457980ddd7bf8f15c5392ab43b0d090e">getChild</a>() );
- <a name="l01566"></a>01566 } <span class="keywordflow">else</span> {
- <a name="l01567"></a>01567 <span class="comment">// move child from cache to intermediate</span>
- <a name="l01568"></a>01568 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.erase( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a457980ddd7bf8f15c5392ab43b0d090e">getChild</a>() );
- <a name="l01569"></a>01569
- <a name="l01570"></a>01570 <span class="keywordflow">for</span>( iit = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin(); iit != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end(); ++iit ){
- <a name="l01571"></a>01571 <span class="keywordflow">if</span>( !iit->node.isUnspecified() && iit->node == backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#aaca1114e8cbfe010357b2088dbb5696a">getParent</a>() ){
- <a name="l01572"></a>01572 iit->children.insert( backupMsg-><a class="code" href="classPubSubBackupSubscriptionMessage.html#a457980ddd7bf8f15c5392ab43b0d090e">getChild</a>() );
- <a name="l01573"></a>01573 }
- <a name="l01574"></a>01574 }
- <a name="l01575"></a>01575 <span class="comment">// FIXME: check for errors</span>
- <a name="l01576"></a>01576 }
- <a name="l01577"></a>01577 }
- <a name="l01578"></a>01578
- <a name="l01579"></a><a class="code" href="classPubSubMMOG.html#a74e961ef109ba657e32f82519721eeaf">01579</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a74e961ef109ba657e32f82519721eeaf">PubSubMMOG::handleUnsubscribeBackup</a>( <a class="code" href="classPubSubBackupUnsubscribeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupUnsubscribeMessage</a>* backupMsg )
- <a name="l01580"></a>01580 {
- <a name="l01581"></a>01581 <span class="comment">// Note: this funktion may break subspace's tatalChildrenCall</span>
- <a name="l01582"></a>01582 <span class="comment">// You have to use fixTotalChildrenCount before using the subspace</span>
- <a name="l01583"></a>01583 <span class="comment">// find appropriate subspace</span>
- <a name="l01584"></a>01584 <a class="code" href="classPubSubSubspaceId.html">PubSubSubspaceId</a> subspaceId(backupMsg-><a class="code" href="classPubSubBackupUnsubscribeMessage.html#abd6c02f362cbe028c6734790c58c0f7a">getSubspaceId</a>(), <a class="code" href="classPubSubMMOG.html#a4051d53d8d09521b830246ca19b0004b">numSubspaces</a>);
- <a name="l01585"></a>01585 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01586"></a>01586 it = <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.find( subspaceId );
- <a name="l01587"></a>01587 <span class="keywordflow">if</span>( it == <a class="code" href="classPubSubMMOG.html#a9cb86fc744b2f9b087a66e0af879f1fc">backupSubspaces</a>.end() ) {
- <a name="l01588"></a>01588 <span class="keywordflow">return</span>;
- <a name="l01589"></a>01589 }
- <a name="l01590"></a>01590 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace = it->second;
- <a name="l01591"></a>01591
- <a name="l01592"></a>01592 deque<PubSubSubspaceResponsible::IntermediateNode>::iterator iit;
- <a name="l01593"></a>01593 set<NodeHandle>::iterator childIt;
- <a name="l01594"></a>01594
- <a name="l01595"></a>01595 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#ada0034be890586e3cc0305bfa089e031">removeChild</a>(backupMsg-><a class="code" href="classPubSubBackupUnsubscribeMessage.html#a67e1e3ffdb3722403645fbfdf007ae57">getChild</a>()) && !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.erase( backupMsg-><a class="code" href="classPubSubBackupUnsubscribeMessage.html#a67e1e3ffdb3722403645fbfdf007ae57">getChild</a>()) ){
- <a name="l01596"></a>01596 <span class="keywordflow">for</span>( iit = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin(); iit != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end(); ++iit ){
- <a name="l01597"></a>01597 iit->children.erase( backupMsg-><a class="code" href="classPubSubBackupUnsubscribeMessage.html#a67e1e3ffdb3722403645fbfdf007ae57">getChild</a>() );
- <a name="l01598"></a>01598 }
- <a name="l01599"></a>01599 }
- <a name="l01600"></a>01600 <span class="keywordflow">if</span>( !backupMsg-><a class="code" href="classPubSubBackupUnsubscribeMessage.html#a35249f2b557ff54817a03fcaa927f148">getIntermediate</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l01601"></a>01601 <span class="comment">// remove intermediate</span>
- <a name="l01602"></a>01602 <span class="keywordflow">for</span>( iit = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin(); iit != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end(); ++iit ){
- <a name="l01603"></a>01603 <span class="keywordflow">if</span>( !iit->node.isUnspecified() && iit->node == backupMsg-><a class="code" href="classPubSubBackupUnsubscribeMessage.html#a35249f2b557ff54817a03fcaa927f148">getIntermediate</a>() ){
- <a name="l01604"></a>01604 <span class="keywordflow">for</span>( childIt = iit->children.begin(); childIt != iit->children.end(); ++childIt ){
- <a name="l01605"></a>01605 <span class="comment">// FIXME: note really stable. let the resp node inform us about child moves</span>
- <a name="l01606"></a>01606 <span class="comment">// remove children of last intermediate</span>
- <a name="l01607"></a>01607 <span class="keywordflow">if</span>( subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#a17ae7d975c0ae11c5b8e25c970e2fdb4">getNumChildren</a>() + subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0037dfdbb81b9918713cba46ad994cb9">getNumIntermediates</a>() < <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> ){
- <a name="l01608"></a>01608 <span class="comment">// we have room for the child</span>
- <a name="l01609"></a>01609 subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.insert( *childIt );
- <a name="l01610"></a>01610 } <span class="keywordflow">else</span> {
- <a name="l01611"></a>01611 <span class="comment">// Node has to go to some intermediate</span>
- <a name="l01612"></a>01612 <span class="comment">// cache it</span>
- <a name="l01613"></a>01613 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert( make_pair(*childIt, <span class="keyword">true</span>) );
- <a name="l01614"></a>01614 }
- <a name="l01615"></a>01615 }
- <a name="l01616"></a>01616 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.erase( iit );
- <a name="l01617"></a>01617 <span class="keywordflow">break</span>;
- <a name="l01618"></a>01618 }
- <a name="l01619"></a>01619 }
- <a name="l01620"></a>01620 }
- <a name="l01621"></a>01621 }
- <a name="l01622"></a>01622
- <a name="l01623"></a><a class="code" href="classPubSubMMOG.html#a104570a1f3f3f4951bf67e9b8e09b0e8">01623</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a104570a1f3f3f4951bf67e9b8e09b0e8">PubSubMMOG::unsubscribeChild</a>( <span class="keyword">const</span> <a class="code" href="classNodeHandle.html" title="This class implements a node handle.">NodeHandle</a>& node, <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace )
- <a name="l01624"></a>01624 {
- <a name="l01625"></a>01625 <a class="code" href="classPubSubBackupUnsubscribeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupUnsubscribeMessage</a>* backupMsg = <span class="keyword">new</span> <a class="code" href="classPubSubBackupUnsubscribeMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubBackupUnsubscribeMessage</a>(<span class="stringliteral">"Backup: node left subspace"</span>);
- <a name="l01626"></a>01626 backupMsg-><a class="code" href="classPubSubBackupUnsubscribeMessage.html#af0f90e64fa9b7e0a1826020ffb261136">setChild</a>( node );
- <a name="l01627"></a>01627 backupMsg-><a class="code" href="classPubSubBackupUnsubscribeMessage.html#a1083ae2bea42efe011631f803428d694">setSubspaceId</a>( subspace.<a class="code" href="classPubSubSubspace.html#a68c0be6c59e362d291533d74a65aa187">getId</a>().<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l01628"></a>01628 <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a>* iNode = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a5380c2d29951d510f7dfc7808ebedf3b">removeAnyChild</a>( node );
- <a name="l01629"></a>01629 <span class="keywordflow">if</span>( iNode && !iNode-><a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>.<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ) {
- <a name="l01630"></a>01630 <span class="comment">// Node is handled by an intermediate node, inform him</span>
- <a name="l01631"></a>01631 <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>* goneMsg = <span class="keyword">new</span> <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>(<span class="stringliteral">"Node left Subspace"</span>);
- <a name="l01632"></a>01632 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#a0e52c6bd254d41b146393d4b825f5cb8">setNode</a>( node );
- <a name="l01633"></a>01633 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#ac7572204eed418bb6befc42859d682bc">setSubspaceId</a>( subspace.<a class="code" href="classPubSubSubspace.html#a68c0be6c59e362d291533d74a65aa187">getId</a>().<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l01634"></a>01634 goneMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#ac2a4c9a20c40c17b2a948f346d5ae4fc">PUBSUB_NODELEFT_L</a>( goneMsg ));
- <a name="l01635"></a>01635 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01636"></a>01636 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01637"></a>01637 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= goneMsg->getByteLength()
- <a name="l01638"></a>01638 );
- <a name="l01639"></a>01639 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( iNode-><a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>, goneMsg );
- <a name="l01640"></a>01640 }
- <a name="l01641"></a>01641 <span class="keywordflow">if</span> ( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>() < ( <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> - 1) * subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0037dfdbb81b9918713cba46ad994cb9">getNumIntermediates</a>()){<span class="comment">// FIXME: parameter when to start cleanup?</span>
- <a name="l01642"></a>01642 <span class="comment">// Too many "free" slots, remove one intermediate node</span>
- <a name="l01643"></a>01643 <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a>& liNode = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.back();
- <a name="l01644"></a>01644 <span class="keywordflow">if</span>( !liNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>.<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l01645"></a>01645 <span class="comment">// Inform node + lobby about release from intermediate node status</span>
- <a name="l01646"></a>01646 <a class="code" href="classPubSubReleaseIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubReleaseIntermediateMessage</a>* releaseMsg = <span class="keyword">new</span> <a class="code" href="classPubSubReleaseIntermediateMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubReleaseIntermediateMessage</a>(<span class="stringliteral">"I don't need you anymore as intermediate"</span>);
- <a name="l01647"></a>01647 releaseMsg-><a class="code" href="classPubSubReleaseIntermediateMessage.html#adc6c4cfc5ea1ab1cd1f12bba42ba569d">setSubspaceId</a>( subspace.<a class="code" href="classPubSubSubspace.html#a68c0be6c59e362d291533d74a65aa187">getId</a>().<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l01648"></a>01648 releaseMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a7a3eb4a2755d7c92be0f817a2a90340a">PUBSUB_RELEASEINTERMEDIATE_L</a>( releaseMsg ));
- <a name="l01649"></a>01649 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01650"></a>01650 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01651"></a>01651 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= releaseMsg->getByteLength()
- <a name="l01652"></a>01652 );
- <a name="l01653"></a>01653 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( liNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>, releaseMsg );
- <a name="l01654"></a>01654
- <a name="l01655"></a>01655 <a class="code" href="classPubSubHelpReleaseMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpReleaseMessage</a>* helpRMsg = <span class="keyword">new</span> <a class="code" href="classPubSubHelpReleaseMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubHelpReleaseMessage</a>(<span class="stringliteral">"node is not my intermediate anymore"</span>);
- <a name="l01656"></a>01656 helpRMsg-><a class="code" href="classPubSubHelpReleaseMessage.html#a5effa76957e673df36cb81367fe2d95e">setSubspaceId</a>( subspace.<a class="code" href="classPubSubSubspace.html#a68c0be6c59e362d291533d74a65aa187">getId</a>().<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l01657"></a>01657 helpRMsg-><a class="code" href="classPubSubHelpReleaseMessage.html#a6aadd8d27e6797da7cfb166ecfb0621f">setNode</a>( liNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a> );
- <a name="l01658"></a>01658 helpRMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#add2bbabb5819a74b1655d4f4ebdc5275">PUBSUB_HELPRELEASE_L</a>( helpRMsg ));
- <a name="l01659"></a>01659 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01660"></a>01660 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01661"></a>01661 pubSubSignalingMessagesSize+= helpRMsg->getByteLength()
- <a name="l01662"></a>01662 );
- <a name="l01663"></a>01663 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( <a class="code" href="classPubSubMMOG.html#a1e1ba5fd3c791f3aa2172e6b055f68bb">lobbyServer</a>, helpRMsg );
- <a name="l01664"></a>01664
- <a name="l01665"></a>01665 <span class="comment">// inform parent of intermediate node</span>
- <a name="l01666"></a>01666 <span class="keywordtype">int</span> parentPos = (subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.size()-1)/<a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> -1;
- <a name="l01667"></a>01667 <span class="keywordflow">if</span>( parentPos >= 0 ){
- <a name="l01668"></a>01668 <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a>& parent = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[parentPos];
- <a name="l01669"></a>01669 <span class="keywordflow">if</span>( !parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>.<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l01670"></a>01670 <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>* goneMsg = <span class="keyword">new</span> <a class="code" href="classPubSubNodeLeftMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubNodeLeftMessage</a>(<span class="stringliteral">"Intermediate left Subspace"</span>);
- <a name="l01671"></a>01671 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#a0e52c6bd254d41b146393d4b825f5cb8">setNode</a>( liNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a> );
- <a name="l01672"></a>01672 goneMsg-><a class="code" href="classPubSubNodeLeftMessage.html#ac7572204eed418bb6befc42859d682bc">setSubspaceId</a>( subspace.<a class="code" href="classPubSubSubspace.html#a68c0be6c59e362d291533d74a65aa187">getId</a>().<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l01673"></a>01673 goneMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#ac2a4c9a20c40c17b2a948f346d5ae4fc">PUBSUB_NODELEFT_L</a>( goneMsg ));
- <a name="l01674"></a>01674 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01675"></a>01675 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01676"></a>01676 pubSubSignalingMessagesSize+= goneMsg->getByteLength()
- <a name="l01677"></a>01677 );
- <a name="l01678"></a>01678 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( parent.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>, goneMsg );
- <a name="l01679"></a>01679 }
- <a name="l01680"></a>01680 }
- <a name="l01681"></a>01681 }
- <a name="l01682"></a>01682
- <a name="l01683"></a>01683 <span class="keywordtype">bool</span> fixNeeded = <span class="keyword">false</span>;
- <a name="l01684"></a>01684 set<NodeHandle>::iterator childIt;
- <a name="l01685"></a>01685 <span class="keywordflow">for</span>( childIt = liNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.begin(); childIt != liNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a2ddae3a07ad454ef312681659588b92a">children</a>.end(); ++childIt ){
- <a name="l01686"></a>01686 <span class="comment">// remove children of last intermediate</span>
- <a name="l01687"></a>01687 <span class="keywordflow">if</span>( subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#a17ae7d975c0ae11c5b8e25c970e2fdb4">getNumChildren</a>() + subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0037dfdbb81b9918713cba46ad994cb9">getNumIntermediates</a>() < <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> ){
- <a name="l01688"></a>01688 <span class="comment">// we have room for the child</span>
- <a name="l01689"></a>01689 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.insert( *childIt ).second ) fixNeeded = <span class="keyword">true</span>;
- <a name="l01690"></a>01690
- <a name="l01691"></a>01691 <span class="comment">//FIXME: send backup new->toMe</span>
- <a name="l01692"></a>01692 } <span class="keywordflow">else</span> {
- <a name="l01693"></a>01693 <span class="comment">// Node has to go to some intermediate</span>
- <a name="l01694"></a>01694 <span class="comment">// find intermediate with free capacities</span>
- <a name="l01695"></a>01695 <a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html">PubSubSubspaceResponsible::IntermediateNode</a>* newINode;
- <a name="l01696"></a>01696 newINode = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a2a6d3bc5ff302065df572a07f604a3de">getNextFreeIntermediate</a>();
- <a name="l01697"></a>01697
- <a name="l01698"></a>01698 <span class="keywordflow">if</span>( newINode && newINode-><a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a> != liNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a> ){
- <a name="l01699"></a>01699 <span class="comment">// cache it</span>
- <a name="l01700"></a>01700 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert( make_pair(*childIt, <span class="keyword">true</span>) ).second ) fixNeeded = <span class="keyword">true</span>;
- <a name="l01701"></a>01701 <span class="comment">//FIXME: send backup new->toCache</span>
- <a name="l01702"></a>01702
- <a name="l01703"></a>01703 ++(newINode-><a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#adc4e60645148ad5003649a9dd77587a6">waitingChildren</a>);
- <a name="l01704"></a>01704
- <a name="l01705"></a>01705 <span class="comment">// let him adopt the child</span>
- <a name="l01706"></a>01706 <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>* adoptCall = <span class="keyword">new</span> <a class="code" href="classPubSubAdoptChildCall.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubAdoptChildCall</a>(<span class="stringliteral">"Adopt Node"</span>);
- <a name="l01707"></a>01707 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a2c7d51a5d0c8ef5b2f7a07d9a4559aa1">setSubspaceId</a>( subspace.<a class="code" href="classPubSubSubspace.html#a68c0be6c59e362d291533d74a65aa187">getId</a>().<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l01708"></a>01708 adoptCall-><a class="code" href="classPubSubAdoptChildCall.html#a117550b7b25e69c5b16b35a6a7d6d019">setChild</a>( *childIt );
- <a name="l01709"></a>01709 adoptCall->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a40172b8994bee9881c879d1f69994013">PUBSUB_ADOPTCHILDCALL_L</a>( adoptCall ));
- <a name="l01710"></a>01710 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01711"></a>01711 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01712"></a>01712 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= adoptCall->getByteLength()
- <a name="l01713"></a>01713 );
- <a name="l01714"></a>01714 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( newINode-><a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a>, adoptCall );
- <a name="l01715"></a>01715 } <span class="keywordflow">else</span> {
- <a name="l01716"></a>01716 <span class="comment">// no intermediate found</span>
- <a name="l01717"></a>01717 <span class="comment">// just move child to cache and wait for a new one</span>
- <a name="l01718"></a>01718 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.insert( make_pair(*childIt, <span class="keyword">false</span>) ).second ) fixNeeded = <span class="keyword">true</span>;
- <a name="l01719"></a>01719 }
- <a name="l01720"></a>01720 }
- <a name="l01721"></a>01721 }
- <a name="l01722"></a>01722 <span class="comment">// delete node from subspace's intermediate node list</span>
- <a name="l01723"></a>01723 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.pop_back();
- <a name="l01724"></a>01724 <span class="comment">// inform backup about deleted intermediate</span>
- <a name="l01725"></a>01725 backupMsg-><a class="code" href="classPubSubBackupUnsubscribeMessage.html#a93305260d050119fc759f9e657d4420c">setIntermediate</a>( liNode.<a class="code" href="classPubSubSubspaceResponsible_1_1IntermediateNode.html#a597257efca218f9499aa4e113d99e139">node</a> );
- <a name="l01726"></a>01726
- <a name="l01727"></a>01727 <span class="keywordflow">if</span>( fixNeeded ) subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l01728"></a>01728 }
- <a name="l01729"></a>01729
- <a name="l01730"></a>01730 <span class="comment">// FIXME: just for testing</span>
- <a name="l01731"></a>01731 <span class="keywordtype">int</span> iii = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>();
- <a name="l01732"></a>01732 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ab2792e92420b16f1e971e9ff83ebce70">fixTotalChildrenCount</a>();
- <a name="l01733"></a>01733 <span class="keywordflow">if</span>( iii != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a41dc142fbdac4eebcadd7b62ee0a822e">getTotalChildrenCount</a>() ){
- <a name="l01734"></a>01734 opp_error(<span class="stringliteral">"Huh?"</span>);
- <a name="l01735"></a>01735 }
- <a name="l01736"></a>01736
- <a name="l01737"></a>01737 <span class="keywordflow">if</span>( !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ){
- <a name="l01738"></a>01738 backupMsg->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a7e3bc76c2154625bc34828f44408df2e">PUBSUB_BACKUPUNSUBSCRIBE_L</a>( backupMsg ));
- <a name="l01739"></a>01739 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01740"></a>01740 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01741"></a>01741 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= backupMsg->getByteLength()
- <a name="l01742"></a>01742 );
- <a name="l01743"></a>01743 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>(), backupMsg );
- <a name="l01744"></a>01744 } <span class="keywordflow">else</span> {
- <a name="l01745"></a>01745 <span class="keyword">delete</span> backupMsg;
- <a name="l01746"></a>01746 }
- <a name="l01747"></a>01747 }
- <a name="l01748"></a>01748
- <a name="l01749"></a><a class="code" href="classPubSubMMOG.html#aedde86c47759c2ab5b61744c7065377c">01749</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#aedde86c47759c2ab5b61744c7065377c">PubSubMMOG::sendMessageToChildren</a>( <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace,
- <a name="l01750"></a>01750 <a class="code" href="classBaseOverlayMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseOverlayMessage</a>* toIntermediates,
- <a name="l01751"></a>01751 <a class="code" href="classBaseOverlayMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseOverlayMessage</a>* toBackup,
- <a name="l01752"></a>01752 <a class="code" href="classBaseOverlayMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseOverlayMessage</a>* toPlayers )
- <a name="l01753"></a>01753 {
- <a name="l01754"></a>01754 <a class="code" href="classBaseCallMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseCallMessage</a>* intermediateCall = <span class="keyword">dynamic_cast<</span><a class="code" href="classBaseCallMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseCallMessage</a>*<span class="keyword">></span>(toIntermediates);
- <a name="l01755"></a>01755 <a class="code" href="classBaseCallMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseCallMessage</a>* backupCall = <span class="keyword">dynamic_cast<</span><a class="code" href="classBaseCallMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseCallMessage</a>*<span class="keyword">></span>(toBackup);
- <a name="l01756"></a>01756 <a class="code" href="classBaseCallMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseCallMessage</a>* playerCall = <span class="keyword">dynamic_cast<</span><a class="code" href="classBaseCallMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseCallMessage</a>*<span class="keyword">></span>(toPlayers);
- <a name="l01757"></a>01757
- <a name="l01758"></a>01758 std::set<NodeHandle>::iterator childIt;
- <a name="l01759"></a>01759
- <a name="l01760"></a>01760 <span class="keywordflow">if</span>( toPlayers ) {
- <a name="l01761"></a>01761 <span class="comment">// Inform all children ...</span>
- <a name="l01762"></a>01762 <span class="keywordflow">for</span>( childIt = subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.begin(); childIt != subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.end(); ++childIt ) {
- <a name="l01763"></a>01763 <span class="keywordflow">if</span>( playerCall ){
- <a name="l01764"></a>01764 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01765"></a>01765 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01766"></a>01766 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= playerCall->getByteLength()
- <a name="l01767"></a>01767 );
- <a name="l01768"></a>01768 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( *childIt, static_cast<BaseCallMessage*>(playerCall-><a class="code" href="classBaseCallMessage.html#a2e1b28efce2f3b0b45c6b101b9515704">dup</a>()) );
- <a name="l01769"></a>01769 } <span class="keywordflow">else</span> {
- <a name="l01770"></a>01770 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01771"></a>01771 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01772"></a>01772 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= toPlayers->getByteLength()
- <a name="l01773"></a>01773 );
- <a name="l01774"></a>01774 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( *childIt, static_cast<BaseOverlayMessage*>(toPlayers-><a class="code" href="classBaseOverlayMessage.html#ade9ac38d77f492e194e6f1129590f409">dup</a>()) );
- <a name="l01775"></a>01775 }
- <a name="l01776"></a>01776 }
- <a name="l01777"></a>01777 <span class="comment">// ... and all cached children ...</span>
- <a name="l01778"></a>01778 std::map<NodeHandle, bool>::iterator cacheChildIt;
- <a name="l01779"></a>01779 <span class="keywordflow">for</span>( cacheChildIt = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.begin(); cacheChildIt != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.end(); ++cacheChildIt ) {
- <a name="l01780"></a>01780 <span class="keywordflow">if</span>( playerCall ){
- <a name="l01781"></a>01781 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01782"></a>01782 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01783"></a>01783 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= playerCall->getByteLength()
- <a name="l01784"></a>01784 );
- <a name="l01785"></a>01785 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( cacheChildIt->first, static_cast<BaseCallMessage*>(playerCall-><a class="code" href="classBaseCallMessage.html#a2e1b28efce2f3b0b45c6b101b9515704">dup</a>()) );
- <a name="l01786"></a>01786 } <span class="keywordflow">else</span> {
- <a name="l01787"></a>01787 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01788"></a>01788 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01789"></a>01789 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= toPlayers->getByteLength()
- <a name="l01790"></a>01790 );
- <a name="l01791"></a>01791 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( cacheChildIt->first, static_cast<BaseOverlayMessage*>(toPlayers-><a class="code" href="classBaseOverlayMessage.html#ade9ac38d77f492e194e6f1129590f409">dup</a>()) );
- <a name="l01792"></a>01792 }
- <a name="l01793"></a>01793 }
- <a name="l01794"></a>01794 }
- <a name="l01795"></a>01795 deque<PubSubSubspaceResponsible::IntermediateNode>::iterator iit;
- <a name="l01796"></a>01796 <span class="comment">// ... all intermediate nodes ...</span>
- <a name="l01797"></a>01797 <span class="keywordflow">for</span>( iit = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin(); iit != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end(); ++iit ){
- <a name="l01798"></a>01798 <span class="keywordflow">if</span>( toIntermediates && !iit->node.isUnspecified() ){
- <a name="l01799"></a>01799 <span class="keywordflow">if</span>( intermediateCall ){
- <a name="l01800"></a>01800 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01801"></a>01801 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01802"></a>01802 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= intermediateCall->getByteLength()
- <a name="l01803"></a>01803 );
- <a name="l01804"></a>01804 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( iit->node, static_cast<BaseCallMessage*>(intermediateCall-><a class="code" href="classBaseCallMessage.html#a2e1b28efce2f3b0b45c6b101b9515704">dup</a>()) );
- <a name="l01805"></a>01805 } <span class="keywordflow">else</span> {
- <a name="l01806"></a>01806 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01807"></a>01807 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01808"></a>01808 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= toIntermediates->getByteLength()
- <a name="l01809"></a>01809 );
- <a name="l01810"></a>01810 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( iit->node, static_cast<BaseOverlayMessage*>(toIntermediates-><a class="code" href="classBaseOverlayMessage.html#ade9ac38d77f492e194e6f1129590f409">dup</a>()) );
- <a name="l01811"></a>01811 }
- <a name="l01812"></a>01812 }
- <a name="l01813"></a>01813 <span class="keywordflow">if</span>( toPlayers ) {
- <a name="l01814"></a>01814 <span class="comment">// .. and all intermediate node's children ...</span>
- <a name="l01815"></a>01815 <span class="keywordflow">for</span>( childIt = iit->children.begin(); childIt != iit->children.end(); ++childIt ){
- <a name="l01816"></a>01816 <span class="keywordflow">if</span>( playerCall ){
- <a name="l01817"></a>01817 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01818"></a>01818 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01819"></a>01819 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= playerCall->getByteLength()
- <a name="l01820"></a>01820 );
- <a name="l01821"></a>01821 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( *childIt, static_cast<BaseCallMessage*>(playerCall-><a class="code" href="classBaseCallMessage.html#a2e1b28efce2f3b0b45c6b101b9515704">dup</a>()) );
- <a name="l01822"></a>01822 } <span class="keywordflow">else</span> {
- <a name="l01823"></a>01823 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01824"></a>01824 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01825"></a>01825 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= toPlayers->getByteLength()
- <a name="l01826"></a>01826 );
- <a name="l01827"></a>01827 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( *childIt, static_cast<BaseOverlayMessage*>(toPlayers-><a class="code" href="classBaseOverlayMessage.html#ade9ac38d77f492e194e6f1129590f409">dup</a>()) );
- <a name="l01828"></a>01828 }
- <a name="l01829"></a>01829 }
- <a name="l01830"></a>01830 }
- <a name="l01831"></a>01831 }
- <a name="l01832"></a>01832 <span class="comment">// ... and the backup node</span>
- <a name="l01833"></a>01833 <span class="keywordflow">if</span>( toBackup && !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>().<a class="code" href="classNodeHandle.html#ab5136375a4548ced7c2014a73c8743c9" title="indicates if this NodeHandle is specified">isUnspecified</a>() ) {
- <a name="l01834"></a>01834 <span class="keywordflow">if</span>( backupCall ){
- <a name="l01835"></a>01835 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01836"></a>01836 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01837"></a>01837 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= backupCall->getByteLength()
- <a name="l01838"></a>01838 );
- <a name="l01839"></a>01839 <a class="code" href="classBaseRpc.html#ac128e0ff0d09f81b652f7d3e00ce9441" title="Sends a Remote-Procedure-Call message to the underlay ">sendUdpRpcCall</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>(), <span class="keyword">static_cast<</span><a class="code" href="classBaseCallMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseCallMessage</a>*<span class="keyword">></span>(backupCall-><a class="code" href="classBaseCallMessage.html#a2e1b28efce2f3b0b45c6b101b9515704">dup</a>()) );
- <a name="l01840"></a>01840 } <span class="keywordflow">else</span> {
- <a name="l01841"></a>01841 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01842"></a>01842 ++<a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a>;
- <a name="l01843"></a>01843 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a>+= toBackup->getByteLength()
- <a name="l01844"></a>01844 );
- <a name="l01845"></a>01845 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0c585a0f9e8162d0bd55a9698b5bff34">getBackupNode</a>(), <span class="keyword">static_cast<</span><a class="code" href="classBaseOverlayMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseOverlayMessage</a>*<span class="keyword">></span>(toBackup-><a class="code" href="classBaseOverlayMessage.html#ade9ac38d77f492e194e6f1129590f409">dup</a>()) );
- <a name="l01846"></a>01846 }
- <a name="l01847"></a>01847 }
- <a name="l01848"></a>01848 }
- <a name="l01849"></a>01849
- <a name="l01850"></a>01850
- <a name="l01851"></a><a class="code" href="classPubSubMMOG.html#a3c4d846c243253afb0f72592e44590ff">01851</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a3c4d846c243253afb0f72592e44590ff">PubSubMMOG::publishEvents</a>()
- <a name="l01852"></a>01852 {
- <a name="l01853"></a>01853 <span class="comment">// FOr all (responsible) subspaces</span>
- <a name="l01854"></a>01854 <span class="keywordtype">int</span> numRespSubspaces = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.size();
- <a name="l01855"></a>01855 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l01856"></a>01856 <span class="keywordflow">for</span>( it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.begin(); it != <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end(); ++it ){
- <a name="l01857"></a>01857 <a class="code" href="classPubSubSubspaceResponsible.html">PubSubSubspaceResponsible</a>& subspace = it->second;
- <a name="l01858"></a>01858
- <a name="l01859"></a>01859 <span class="comment">// Prepare a movement list message aggregating all stored move messages</span>
- <a name="l01860"></a>01860 <a class="code" href="classPubSubMoveListMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubMoveListMessage</a>* moveList = <span class="keyword">new</span> <a class="code" href="classPubSubMoveListMessage.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubMoveListMessage</a>(<span class="stringliteral">"Movement list"</span>);
- <a name="l01861"></a>01861 moveList-><a class="code" href="classPubSubMoveListMessage.html#af98f7efd6b1f747ed72c9e369d46401b">setTimestamp</a>( simTime() );
- <a name="l01862"></a>01862 moveList-><a class="code" href="classPubSubMoveListMessage.html#a54ee6ddb0320ba5d4232ce9d69a8bd27">setSubspaceId</a>( subspace.<a class="code" href="classPubSubSubspace.html#a68c0be6c59e362d291533d74a65aa187">getId</a>().<a class="code" href="classPubSubSubspaceId.html#afb4d71a54d5337d65bb89c27e4d4938c">getId</a>() );
- <a name="l01863"></a>01863 moveList-><a class="code" href="classPubSubMoveListMessage.html#a7cfc3016cda8ffe6a48efb921b17d454">setPlayerArraySize</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a3f199ce5648d14d4faf8672db1b9e8c7">waitingMoveMessages</a>.size() );
- <a name="l01864"></a>01864 moveList-><a class="code" href="classPubSubMoveListMessage.html#ac471ea4143307ab400a66a5d570a3579">setPositionArraySize</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a3f199ce5648d14d4faf8672db1b9e8c7">waitingMoveMessages</a>.size() );
- <a name="l01865"></a>01865 moveList-><a class="code" href="classPubSubMoveListMessage.html#a5d28566e440f12fcc2adc5c13063def8">setPositionAgeArraySize</a>( subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a3f199ce5648d14d4faf8672db1b9e8c7">waitingMoveMessages</a>.size() );
- <a name="l01866"></a>01866
- <a name="l01867"></a>01867 std::deque<PubSubMoveMessage*>::iterator msgIt;
- <a name="l01868"></a>01868 <span class="keywordtype">int</span> pos = 0;
- <a name="l01869"></a>01869 <span class="keywordflow">for</span>( msgIt = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a3f199ce5648d14d4faf8672db1b9e8c7">waitingMoveMessages</a>.begin(); msgIt != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a3f199ce5648d14d4faf8672db1b9e8c7">waitingMoveMessages</a>.end(); ++msgIt ){
- <a name="l01870"></a>01870 moveList-><a class="code" href="classPubSubMoveListMessage.html#af7b6375b51fc979b9dc4f2fd3df1a327">setPlayer</a>( pos, (*msgIt)->getPlayer() );
- <a name="l01871"></a>01871 moveList-><a class="code" href="classPubSubMoveListMessage.html#af1ce3b62f7ddc31c530741c665cbe4c3">setPosition</a>( pos, (*msgIt)->getPosition() );
- <a name="l01872"></a>01872 moveList-><a class="code" href="classPubSubMoveListMessage.html#a487720e23323a1f2c19b203a5a4a9a6e">setPositionAge</a>( pos, simTime() - (*msgIt)->getCreationTime() );
- <a name="l01873"></a>01873 pos++;
- <a name="l01874"></a>01874 cancelAndDelete( *msgIt );
- <a name="l01875"></a>01875 }
- <a name="l01876"></a>01876 subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a3f199ce5648d14d4faf8672db1b9e8c7">waitingMoveMessages</a>.clear();
- <a name="l01877"></a>01877
- <a name="l01878"></a>01878 moveList->setBitLength( <a class="code" href="PubSubMessage__m_8h.html#a874c79322e2687e6c465d6c75129b8df">PUBSUB_MOVELIST_L</a>( moveList ));
- <a name="l01879"></a>01879 <span class="comment">// Send message to all direct children...</span>
- <a name="l01880"></a>01880 <span class="keywordflow">for</span>( set<NodeHandle>::iterator childIt = subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.begin();
- <a name="l01881"></a>01881 childIt != subspace.<a class="code" href="classPubSubSubspaceIntermediate.html#aef3a0468a7eb4cbd84f774e2de574b16">children</a>.end(); ++childIt )
- <a name="l01882"></a>01882 {
- <a name="l01883"></a>01883 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01884"></a>01884 ++<a class="code" href="classPubSubMMOG.html#ae81f55efe5b21342597e408ff3474eee">numMoveListMessages</a>;
- <a name="l01885"></a>01885 <a class="code" href="classPubSubMMOG.html#a5a665dd74681081d669ea57efd5d83b0">moveListMessagesSize</a>+= moveList->getByteLength();
- <a name="l01886"></a>01886 <a class="code" href="classPubSubMMOG.html#a4561eb4e380c7aea874ea622b9145603">respMoveListMessagesSize</a>+= (int)((<span class="keywordtype">double</span>) moveList->getByteLength() / numRespSubspaces)
- <a name="l01887"></a>01887 );
- <a name="l01888"></a>01888 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( *childIt, (<a class="code" href="classBaseOverlayMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseOverlayMessage</a>*) moveList-><a class="code" href="classPubSubMoveListMessage.html#a5d61d0f12b29063f944e6fd5775d3da7">dup</a>() );
- <a name="l01889"></a>01889 }
- <a name="l01890"></a>01890
- <a name="l01891"></a>01891 <span class="comment">//... all cached children (if messages are not too big) ...</span>
- <a name="l01892"></a>01892 <span class="keywordflow">if</span>( moveList->getByteLength() < 1024 ){ <span class="comment">// FIXME: magic number. make it a parameter, or dependant on the available bandwidth</span>
- <a name="l01893"></a>01893 <span class="keywordflow">for</span>( map<NodeHandle, bool>::iterator childIt = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.begin();
- <a name="l01894"></a>01894 childIt != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#a0dad92f50458f0daf1f719c842661a7b">cachedChildren</a>.end(); ++childIt )
- <a name="l01895"></a>01895 {
- <a name="l01896"></a>01896 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01897"></a>01897 ++<a class="code" href="classPubSubMMOG.html#ae81f55efe5b21342597e408ff3474eee">numMoveListMessages</a>;
- <a name="l01898"></a>01898 <a class="code" href="classPubSubMMOG.html#a5a665dd74681081d669ea57efd5d83b0">moveListMessagesSize</a>+= moveList->getByteLength();
- <a name="l01899"></a>01899 <a class="code" href="classPubSubMMOG.html#a4561eb4e380c7aea874ea622b9145603">respMoveListMessagesSize</a>+= (int)((<span class="keywordtype">double</span>) moveList->getByteLength() / numRespSubspaces)
- <a name="l01900"></a>01900 );
- <a name="l01901"></a>01901 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( childIt->first, (<a class="code" href="classBaseOverlayMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseOverlayMessage</a>*) moveList-><a class="code" href="classPubSubMoveListMessage.html#a5d61d0f12b29063f944e6fd5775d3da7">dup</a>() );
- <a name="l01902"></a>01902 <span class="comment">// ... but don't send msgs to too many cached children, as this would exhaust our bandwidth</span>
- <a name="l01903"></a>01903 }
- <a name="l01904"></a>01904 }
- <a name="l01905"></a>01905
- <a name="l01906"></a>01906 <span class="comment">// ... all direct intermediates and intermediates with broken parent</span>
- <a name="l01907"></a>01907 deque<PubSubSubspaceResponsible::IntermediateNode>::iterator iit;
- <a name="l01908"></a>01908 <span class="keywordflow">for</span>( iit = subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin(); iit != subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.end(); ++iit )
- <a name="l01909"></a>01909 {
- <a name="l01910"></a>01910 <span class="keywordtype">int</span> intermediatePos = iit - subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>.begin();
- <a name="l01911"></a>01911 <span class="keywordflow">if</span>( intermediatePos >= <a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> &&
- <a name="l01912"></a>01912 !subspace.<a class="code" href="classPubSubSubspaceResponsible.html#ac0c251df1da2b4752784b9c77a697059">intermediateNodes</a>[intermediatePos/<a class="code" href="classPubSubMMOG.html#a7d310afbff3e729b6a33f8e6614de07e">maxChildren</a> -1].node.isUnspecified() ) <span class="keywordflow">continue</span>;
- <a name="l01913"></a>01913 <span class="keywordflow">if</span>( !iit->node.isUnspecified() ) {
- <a name="l01914"></a>01914 <a class="code" href="GlobalStatistics_8h.html#af29140ebe8e0a93406a58441f7c5fec8" title="Macro used for recording statistics considering measureNetwIn parameter.">RECORD_STATS</a>(
- <a name="l01915"></a>01915 ++<a class="code" href="classPubSubMMOG.html#ae81f55efe5b21342597e408ff3474eee">numMoveListMessages</a>;
- <a name="l01916"></a>01916 <a class="code" href="classPubSubMMOG.html#a5a665dd74681081d669ea57efd5d83b0">moveListMessagesSize</a>+= moveList->getByteLength();
- <a name="l01917"></a>01917 <a class="code" href="classPubSubMMOG.html#a4561eb4e380c7aea874ea622b9145603">respMoveListMessagesSize</a>+= (int)((<span class="keywordtype">double</span>) moveList->getByteLength() / numRespSubspaces)
- <a name="l01918"></a>01918 );
- <a name="l01919"></a>01919 <a class="code" href="classBaseOverlay.html#a124850e5bc8d81b3eb4f3aec75868449" title="Sends message to underlay.">sendMessageToUDP</a>( iit->node, (<a class="code" href="classBaseOverlayMessage.html" title="Class generated from common/CommonMessages.msg by opp_msgc.">BaseOverlayMessage</a>*) moveList-><a class="code" href="classPubSubMoveListMessage.html#a5d61d0f12b29063f944e6fd5775d3da7">dup</a>() );
- <a name="l01920"></a>01920 }
- <a name="l01921"></a>01921 }
- <a name="l01922"></a>01922
- <a name="l01923"></a>01923 <span class="keyword">delete</span> moveList;
- <a name="l01924"></a>01924 }
- <a name="l01925"></a>01925 }
- <a name="l01926"></a>01926
- <a name="l01927"></a><a class="code" href="classPubSubMMOG.html#a3e573d9ce39091daea435016a587b239">01927</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a3e573d9ce39091daea435016a587b239">PubSubMMOG::setBootstrapedIcon</a>()
- <a name="l01928"></a>01928 {
- <a name="l01929"></a>01929 <span class="keywordflow">if</span>(ev.isGUI()) {
- <a name="l01930"></a>01930 <span class="keywordflow">if</span>(<a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> == <a class="code" href="classBaseOverlay.html#a0ad4b12b0c9949661f66db7fbbf7d40fab3a263fb274a58d63b15cd61ba910335">READY</a>) {
- <a name="l01931"></a>01931 getParentModule()->getParentModule()->getDisplayString().setTagArg(<span class="stringliteral">"i2"</span>, 1, <span class="stringliteral">"green"</span>);
- <a name="l01932"></a>01932 getDisplayString().setTagArg(<span class="stringliteral">"i"</span>, 1, <span class="stringliteral">"green"</span>);
- <a name="l01933"></a>01933 }
- <a name="l01934"></a>01934 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classBaseOverlay.html#ab4be6d88417117fbf33a445d56af2655">state</a> == <a class="code" href="classBaseOverlay.html#a0ad4b12b0c9949661f66db7fbbf7d40fabe22ce6e9471e472a566ba6cc27fbb5a">JOINING</a>) {
- <a name="l01935"></a>01935 getParentModule()->getParentModule()->getDisplayString().setTagArg(<span class="stringliteral">"i2"</span>, 1, <span class="stringliteral">"yellow"</span>);
- <a name="l01936"></a>01936 getDisplayString().setTagArg(<span class="stringliteral">"i"</span>, 1, <span class="stringliteral">"yellow"</span>);
- <a name="l01937"></a>01937 }
- <a name="l01938"></a>01938 <span class="keywordflow">else</span> {
- <a name="l01939"></a>01939 getParentModule()->getParentModule()->getDisplayString().setTagArg(<span class="stringliteral">"i2"</span>, 1, <span class="stringliteral">"red"</span>);
- <a name="l01940"></a>01940 getDisplayString().setTagArg(<span class="stringliteral">"i"</span>, 1, <span class="stringliteral">"red"</span>);
- <a name="l01941"></a>01941 }
- <a name="l01942"></a>01942 }
- <a name="l01943"></a>01943 }
- <a name="l01944"></a>01944
- <a name="l01945"></a><a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">01945</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#a7544c76d3fceee2a56dee1bdf63c4db1">PubSubMMOG::startTimer</a>( <a class="code" href="classPubSubTimer.html" title="Class generated from overlay/pubsubmmog/PubSubMessage.msg by opp_msgc.">PubSubTimer</a>* timer )
- <a name="l01946"></a>01946 {
- <a name="l01947"></a>01947 <span class="keywordflow">if</span>( !timer ) {
- <a name="l01948"></a>01948 EV << <span class="stringliteral">"[PubSubMMOG::startTimer() @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classTransportAddress.html#a00e613d98d3412e2b92897c25aa0eb4c" title="returns ip address">getIp</a>()
- <a name="l01949"></a>01949 << <span class="stringliteral">" ("</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a>.<a class="code" href="classNodeHandle.html#aef531103cdf07c8353267f4d30a80112" title="returns key of this NodeHandle">getKey</a>().<a class="code" href="classOverlayKey.html#aabeb4fd284a630a82e982ba34ece4fd9" title="Returns a string representation of this key.">toString</a>(16) << <span class="stringliteral">")]\n"</span>
- <a name="l01950"></a>01950 << <span class="stringliteral">" WARNING! Trying to start NULL timer @ "</span> << <a class="code" href="classBaseRpc.html#a88eb68c06450fd12ea072f471bf1c1b8" title="NodeHandle to this node.">thisNode</a> << <span class="stringliteral">"\n"</span>
- <a name="l01951"></a>01951 << endl;
- <a name="l01952"></a>01952 <span class="keywordflow">return</span>;
- <a name="l01953"></a>01953 }
- <a name="l01954"></a>01954
- <a name="l01955"></a>01955 <span class="keywordflow">if</span>( timer->isScheduled() ) {
- <a name="l01956"></a>01956 cancelEvent( timer );
- <a name="l01957"></a>01957 }
- <a name="l01958"></a>01958
- <a name="l01959"></a>01959 simtime_t duration = 0;
- <a name="l01960"></a>01960 <span class="keywordflow">switch</span>( timer-><a class="code" href="classPubSubTimer.html#a4f1885dff2e7dc391d899e5b6b3cc92f">getType</a>() ) {
- <a name="l01961"></a>01961 <span class="keywordflow">case</span> <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04caec28dc4bd962108ceb27575f46b81ebd">PUBSUB_HEARTBEAT</a>:
- <a name="l01962"></a>01962 duration = <a class="code" href="classPubSubMMOG.html#a98fd6baf72474a184c902133581273fa">parentTimeout</a>/2;
- <a name="l01963"></a>01963 <span class="keywordflow">break</span>;
- <a name="l01964"></a>01964 <span class="keywordflow">case</span> <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04caa64f2984ebaaa94fb52bc3ff99d24fa1">PUBSUB_CHILDPING</a>:
- <a name="l01965"></a>01965 duration = <a class="code" href="classPubSubMMOG.html#a98fd6baf72474a184c902133581273fa">parentTimeout</a>*10; <span class="comment">// FIXME: make it a parameter</span>
- <a name="l01966"></a>01966 <span class="keywordflow">break</span>;
- <a name="l01967"></a>01967 <span class="keywordflow">case</span> <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04cad6da37474996a5016fe145fcc24a52c8">PUBSUB_PARENT_TIMEOUT</a>:
- <a name="l01968"></a>01968 duration = <a class="code" href="classPubSubMMOG.html#a98fd6baf72474a184c902133581273fa">parentTimeout</a>;
- <a name="l01969"></a>01969 <span class="keywordflow">break</span>;
- <a name="l01970"></a>01970 <span class="keywordflow">case</span> <a class="code" href="PubSubMessage__m_8h.html#ac87923fdb9d8348a9eb766921ec0e04cab87b77accd020036a875063be27c753c">PUBSUB_EVENTDELIVERY</a>:
- <a name="l01971"></a>01971 duration = 1.0/<a class="code" href="classPubSubMMOG.html#a228fe6f61d1fe510d1336296c4bf254c">movementRate</a>;
- <a name="l01972"></a>01972 <span class="keywordflow">break</span>;
- <a name="l01973"></a>01973 }
- <a name="l01974"></a>01974 scheduleAt(simTime() + duration, timer );
- <a name="l01975"></a>01975 }
- <a name="l01976"></a>01976
- <a name="l01977"></a><a class="code" href="classPubSubMMOG.html#ab097bce7563e87ecf690559095908207">01977</a> <span class="keywordtype">void</span> <a class="code" href="classPubSubMMOG.html#ab097bce7563e87ecf690559095908207" title="collects statistical data in derived class">PubSubMMOG::finishOverlay</a>()
- <a name="l01978"></a>01978 {
- <a name="l01979"></a>01979 simtime_t time = <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a610799ebfbf64696c59b811870cc8300">calcMeasuredLifetime</a>(<a class="code" href="classBaseOverlay.html#af0eebaddea732ee4ab4d247c388e62bd" title="simtime when the node has been created">creationTime</a>);
- <a name="l01980"></a>01980 <span class="keywordflow">if</span> (time < <a class="code" href="classGlobalStatistics.html#a169810c78519b271f7e32fdc7c9fc641" title="minimum useful measured lifetime in seconds">GlobalStatistics::MIN_MEASURED</a>) <span class="keywordflow">return</span>;
- <a name="l01981"></a>01981
- <a name="l01982"></a>01982 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Sent Signaling Messages/s"</span>,
- <a name="l01983"></a>01983 <a class="code" href="classPubSubMMOG.html#aed031b28dd4fd6b2db5f68247ff742d7">numPubSubSignalingMessages</a> / time);
- <a name="l01984"></a>01984 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Sent Signaling bytes/s"</span>,
- <a name="l01985"></a>01985 <a class="code" href="classPubSubMMOG.html#a16f1ec7076f68484acd789057428a3cc">pubSubSignalingMessagesSize</a> / time);
- <a name="l01986"></a>01986 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Sent Move Messages/s"</span>,
- <a name="l01987"></a>01987 <a class="code" href="classPubSubMMOG.html#a11ca86e89977d8bb4d1512a5e64ce8d3">numMoveMessages</a> / time);
- <a name="l01988"></a>01988 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Sent Move bytes/s"</span>,
- <a name="l01989"></a>01989 <a class="code" href="classPubSubMMOG.html#a122b6f4eacfc82a453cdabace026a0d5">moveMessagesSize</a> / time);
- <a name="l01990"></a>01990 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Sent MoveList Messages/s"</span>,
- <a name="l01991"></a>01991 <a class="code" href="classPubSubMMOG.html#ae81f55efe5b21342597e408ff3474eee">numMoveListMessages</a> / time);
- <a name="l01992"></a>01992 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Sent MoveList bytes/s"</span>,
- <a name="l01993"></a>01993 <a class="code" href="classPubSubMMOG.html#a5a665dd74681081d669ea57efd5d83b0">moveListMessagesSize</a> / time);
- <a name="l01994"></a>01994 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Received Move Events (correct timeslot)/s"</span>,
- <a name="l01995"></a>01995 <a class="code" href="classPubSubMMOG.html#a0adb17b77190fd14c0979fe39a5889cc">numEventsCorrectTimeslot</a> / time);
- <a name="l01996"></a>01996 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Received Move Events (wrong timeslot)/s"</span>,
- <a name="l01997"></a>01997 <a class="code" href="classPubSubMMOG.html#aa809123a9ef7f64ea622400ed60a2d4c">numEventsWrongTimeslot</a> / time);
- <a name="l01998"></a>01998 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Responsible Nodes: Send MoveList Bytes/s"</span>,
- <a name="l01999"></a>01999 <a class="code" href="classPubSubMMOG.html#a4561eb4e380c7aea874ea622b9145603">respMoveListMessagesSize</a> / time);
- <a name="l02000"></a>02000 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Lost or too long delayed MoveLists/s"</span>,
- <a name="l02001"></a>02001 <a class="code" href="classPubSubMMOG.html#a1450e36b5a7103fe4581f271fac13340">lostMovementLists</a> / time);
- <a name="l02002"></a>02002 <a class="code" href="classBaseRpc.html#a9552ba3a2b09c83b3c561e65dab9f23d" title="pointer to GlobalStatistics module in this node">globalStatistics</a>-><a class="code" href="classGlobalStatistics.html#a6a697a0b67f344e4bc214159761f943a" title="Add a new value to the cStdDev container specified by the name parameter.">addStdDev</a>(<span class="stringliteral">"PubSubMMOG: Received valid MoveLists/s"</span>,
- <a name="l02003"></a>02003 <a class="code" href="classPubSubMMOG.html#a8415fe6a47b3b961fd54f9e3b5f8d3f0">receivedMovementLists</a> / time);
- <a name="l02004"></a>02004 }
- <a name="l02005"></a>02005
- <a name="l02006"></a><a class="code" href="classPubSubMMOG.html#ad55240696d31dd1a7003a7269aca4743">02006</a> <a class="code" href="classPubSubMMOG.html#ad55240696d31dd1a7003a7269aca4743">PubSubMMOG::~PubSubMMOG</a>()
- <a name="l02007"></a>02007 {
- <a name="l02008"></a>02008 <span class="comment">// Delete all waiting move messages</span>
- <a name="l02009"></a>02009 std::map<PubSubSubspaceId, PubSubSubspaceResponsible>::iterator it;
- <a name="l02010"></a>02010 <span class="keywordflow">for</span>( it = <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.begin(); it != <a class="code" href="classPubSubMMOG.html#a4b4d32adfbffbd585d8a174d47b24db9">responsibleSubspaces</a>.end(); ++it) {
- <a name="l02011"></a>02011 deque<PubSubMoveMessage*>::iterator msgIt;
- <a name="l02012"></a>02012 <span class="keywordflow">for</span>( msgIt = it->second.waitingMoveMessages.begin(); msgIt != it->second.waitingMoveMessages.end(); ++msgIt ){
- <a name="l02013"></a>02013 cancelAndDelete( *msgIt );
- <a name="l02014"></a>02014 }
- <a name="l02015"></a>02015 it->second.waitingMoveMessages.clear();
- <a name="l02016"></a>02016 }
- <a name="l02017"></a>02017
- <a name="l02018"></a>02018 cancelAndDelete(<a class="code" href="classPubSubMMOG.html#aebf88e5c0a0f294c706c3281b1aae373">heartbeatTimer</a>);
- <a name="l02019"></a>02019 }
- </pre></div></div>
- </div>
- <hr class="footer"/><address class="footer"><small>Generated on Wed Nov 3 2010 14:40:45 for OverSim by
- <a href="http://www.doxygen.org/index.html">
- <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
- </body>
- </html>