diff options
Diffstat (limited to 'docs/doxygen/nel/a02921.html')
-rw-r--r-- | docs/doxygen/nel/a02921.html | 977 |
1 files changed, 977 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a02921.html b/docs/doxygen/nel/a02921.html new file mode 100644 index 00000000..86c17ddc --- /dev/null +++ b/docs/doxygen/nel/a02921.html @@ -0,0 +1,977 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>NeL: NLNET::CMessageRecorder class Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.3.6 --> +<div class="qindex"> <form class="search" action="search.php" method="get"> +<a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related Pages</a> | <span class="search"><u>S</u>earch for <input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div> +<h1>NLNET::CMessageRecorder Class Reference</h1><code>#include <<a class="el" href="a06029.html">message_recorder.h</a>></code> +<p> +<hr><a name="_details"></a><h2>Detailed Description</h2> +Message recorder. The service performs sends normally. They are intercepted and the recorder plays the receives back. No communication with other hosts. Warning: it works only with messages as plain text. <dl compact><dt><b>Author:</b></dt><dd>Olivier Cado <p> +Nevrax France </dd></dl> +<dl compact><dt><b>Date:</b></dt><dd>2001 </dd></dl> + +<p> + +<p> +Definition at line <a class="el" href="a06029.html#l00116">116</a> of file <a class="el" href="a06029.html">message_recorder.h</a>.<table border=0 cellpadding=0 cellspacing=0> +<tr><td></td></tr> +<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a05379.html#a225">TNetworkEvent</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera0">checkNextOne</a> (<a class="el" href="a04558.html#a12">sint64</a> updatecounter)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top> </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera1">CMessageRecorder</a> ()</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <a href="#NLNET_1_1CMessageRecordera1"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera2">recordNext</a> (<a class="el" href="a04558.html#a12">sint64</a> updatecounter, <a class="el" href="a05379.html#a225">TNetworkEvent</a> event, <a class="el" href="a02303.html">TSockId</a> sockid, <a class="el" href="a02918.html">CMessage</a> &message)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a record. <a href="#NLNET_1_1CMessageRecordera2"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a05379.html#a225">TNetworkEvent</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera3">replayConnectionAttempt</a> (const <a class="el" href="a02665.html">CInetAddress</a> &<a class="el" href="a04223.html#a657">addr</a>)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the first stored connection attempt corresponding to addr. <a href="#NLNET_1_1CMessageRecordera3"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera4">replayNextDataAvailable</a> (<a class="el" href="a04558.html#a12">sint64</a> updatecounter)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Push the received blocks for this counter into the receive queue. <a href="#NLNET_1_1CMessageRecordera4"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera5">startRecord</a> (const std::string &<a class="el" href="a04560.html#a1">filename</a>, bool recordall=true)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Start recording. <a href="#NLNET_1_1CMessageRecordera5"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera6">startReplay</a> (const std::string &<a class="el" href="a04560.html#a1">filename</a>)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Start replaying. <a href="#NLNET_1_1CMessageRecordera6"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera7">stopRecord</a> ()</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Stop recording. <a href="#NLNET_1_1CMessageRecordera7"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera8">stopReplay</a> ()</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Stop playback. <a href="#NLNET_1_1CMessageRecordera8"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top> </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordera9">~CMessageRecorder</a> ()</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <a href="#NLNET_1_1CMessageRecordera9"></a><br><br></td></tr> +<tr><td colspan=2><br><h2>Data Fields</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::queue< <a class="el" href="a03909.html">NLNET::TMessageRecord</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecordero0">ReceivedMessages</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Receive queue (corresponding to one update count). Use empty(), front(), pop(). <a href="#NLNET_1_1CMessageRecordero0"></a><br><br></td></tr> +<tr><td colspan=2><br><h2>Protected Member Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecorderb0">getNext</a> (<a class="el" href="a03909.html">TMessageRecord</a> &record, <a class="el" href="a04558.html#a12">sint64</a> updatecounter)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the next record (from the preloaded records, or from the file). <a href="#NLNET_1_1CMessageRecorderb0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecorderb1">loadNext</a> (<a class="el" href="a03909.html">TMessageRecord</a> &record)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Load the next record from the file (throws EStreamOverflow). <a href="#NLNET_1_1CMessageRecorderb1"></a><br><br></td></tr> +<tr><td colspan=2><br><h2>Private Attributes</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::deque< <a class="el" href="a03909.html">TMessageRecord</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr0">_ConnectionAttempts</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>std::fstream </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>std::string </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>std::deque< <a class="el" href="a03909.html">TMessageRecord</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr4">_RecordAll</a></td></tr> + +</table> +<hr><h2>Constructor & Destructor Documentation</h2> +<a class="anchor" name="NLNET_1_1CMessageRecordera1" doxytag="NLNET::CMessageRecorder::CMessageRecorder" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> NLNET::CMessageRecorder::CMessageRecorder </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Constructor. +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00079">79</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a05622.html#l00154">nlerror</a>. +<p> +<div class="fragment"><pre>00079 : <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr4">_RecordAll</a>(<span class="keyword">true</span>) +00080 { +00081 <span class="preprocessor">#ifndef MESSAGES_PLAIN_TEXT</span> +00082 <span class="preprocessor"></span> <a class="code" href="a04199.html#a3">nlerror</a>( <span class="stringliteral">"The message recorder works only with plain text messages. Please #define MESSAGES_PLAIN_TEXT"</span> ); +00083 <span class="preprocessor">#endif</span> +00084 <span class="preprocessor"></span>} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecordera9" doxytag="NLNET::CMessageRecorder::~CMessageRecorder" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> NLNET::CMessageRecorder::~<a class="el" href="a02921.html">CMessageRecorder</a> </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Destructor. +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00090">90</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a05622.html#l00101">nldebug</a>, <a class="el" href="a06028.html#l00168">stopRecord()</a>, and <a class="el" href="a06028.html#l00404">stopReplay()</a>. +<p> +<div class="fragment"><pre>00091 { +00092 <span class="keywordflow">if</span> ( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a> != <span class="stringliteral">""</span> ) +00093 { +00094 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR:%s: End of recording"</span>, <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a>.c_str() ); +00095 } +00096 <a class="code" href="a02921.html#NLNET_1_1CMessageRecordera7">stopRecord</a>(); +00097 <a class="code" href="a02921.html#NLNET_1_1CMessageRecordera8">stopReplay</a>(); +00098 } +</pre></div> </td> + </tr> +</table> +<hr><h2>Member Function Documentation</h2> +<a class="anchor" name="NLNET_1_1CMessageRecordera0" doxytag="NLNET::CMessageRecorder::checkNextOne" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a05379.html#a225">TNetworkEvent</a> NLNET::CMessageRecorder::checkNextOne </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a12">sint64</a> </td> + <td class="mdname1" valign="top" nowrap> <em>updatecounter</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Returns the event type if the counter of the next event is updatecounter, and skip it; otherwise return Error. +<p> +Definition at line <a class="el" href="a06028.html#l00308">308</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a05379.html#a225a92">NLNET::Error</a>, <a class="el" href="a06029.html#l00100">NLNET::TMessageRecord::Event</a>, <a class="el" href="a06028.html#l00039">NLNET::EventToString()</a>, <a class="el" href="a06028.html#l00230">getNext()</a>, <a class="el" href="a05981.html#l00107">NL_I64</a>, <a class="el" href="a05622.html#l00101">nldebug</a>, <a class="el" href="a05981.html#l00101">sint64</a>, and <a class="el" href="a06029.html#l00049">NLNET::TNetworkEvent</a>. +<p> +<div class="fragment"><pre>00309 { +00310 TMessageRecord record; +00311 <span class="keywordflow">if</span> ( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderb0">getNext</a>( record, updatecounter ) ) +00312 { +00313 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR: Check next one: %s at update %"</span>NL_I64<span class="stringliteral">"u"</span>, <a class="code" href="a05379.html#a157">EventToString</a>(record.Event).c_str(), updatecounter ); +00314 <span class="keywordflow">return</span> record.Event; +00315 } +00316 <span class="keywordflow">else</span> +00317 { +00318 <span class="keywordflow">return</span> <a class="code" href="a05379.html#a225a92">Error</a>; +00319 } +00320 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecorderb0" doxytag="NLNET::CMessageRecorder::getNext" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NLNET::CMessageRecorder::getNext </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03909.html">TMessageRecord</a> & </td> + <td class="mdname" nowrap> <em>record</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a12">sint64</a> </td> + <td class="mdname" nowrap> <em>updatecounter</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [protected]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Get the next record (from the preloaded records, or from the file). +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00230">230</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a06029.html#l00173">_PreloadedRecords</a>, <a class="el" href="a06028.html#l00198">loadNext()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05981.html#l00101">sint64</a>. +<p> +Referenced by <a class="el" href="a06028.html#l00308">checkNextOne()</a>, and <a class="el" href="a06028.html#l00276">replayNextDataAvailable()</a>. +<p> +<div class="fragment"><pre>00231 { +00232 <span class="keywordflow">if</span> ( ! <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.empty() ) +00233 { +00234 <span class="keywordflow">if</span> ( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.front().UpdateCounter == updatecounter ) +00235 { +00236 <span class="comment">// The requested record is in the preload</span> +00237 record = <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.front(); +00238 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.pop_front(); +00239 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00240 } +00241 <span class="keywordflow">else</span> +00242 { +00243 <span class="comment">// The requested record is not in the file</span> +00244 <a class="code" href="a04199.html#a6">nlassert</a>( updatecounter < _PreloadedRecords.front().UpdateCounter ); // not > +00245 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00246 } +00247 } +00248 <span class="keywordflow">else</span> +00249 { +00250 <span class="keywordflow">if</span> ( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderb1">loadNext</a>( record ) ) +00251 { +00252 <span class="keywordflow">if</span> ( record.UpdateCounter == updatecounter ) +00253 { +00254 <span class="comment">// The requested record has been loaded</span> +00255 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00256 } +00257 <span class="keywordflow">else</span> +00258 { +00259 <span class="comment">// The next loaded record is a new one</span> +00260 <a class="code" href="a04199.html#a6">nlassert</a>( updatecounter < record.UpdateCounter ); // not > +00261 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.push_back( record ); <span class="comment">// when we read one too far</span> +00262 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00263 } +00264 } +00265 <span class="keywordflow">else</span> +00266 { +00267 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00268 } +00269 } +00270 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecorderb1" doxytag="NLNET::CMessageRecorder::loadNext" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NLNET::CMessageRecorder::loadNext </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03909.html">TMessageRecord</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>record</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [protected]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Load the next record from the file (throws EStreamOverflow). +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00198">198</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a06029.html#l00167">_File</a>, <a class="el" href="a05646.html#l00235">len</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00101">nldebug</a>, <a class="el" href="a05622.html#l00416">nlstop</a>, <a class="el" href="a06029.html#l00072">NLNET::TMessageRecord::serial()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>. +<p> +Referenced by <a class="el" href="a06028.html#l00230">getNext()</a>, and <a class="el" href="a06028.html#l00326">replayConnectionAttempt()</a>. +<p> +<div class="fragment"><pre>00199 { +00200 <span class="comment">// WARNING!!! This features doesn't work anymore becaues bufferAsVector() is not available with new CMemStream</span> +00201 <a class="code" href="a04199.html#a12">nlstop</a>; +00202 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00203 +00204 <a class="code" href="a04199.html#a6">nlassert</a>( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.is_open() ); +00205 +00206 <span class="comment">// Dump from file</span> +00207 CMemStream stream ( <span class="keyword">true</span>, <span class="keyword">true</span> ); +00208 <a class="code" href="a04558.html#a11">uint32</a> <a class="code" href="a04223.html#a571">len</a>; +00209 <span class="keywordtype">char</span> c; +00210 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a> >> c; <span class="comment">// skip "* ";</span> +00211 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a> >> (<span class="keywordtype">int</span>&)<a class="code" href="a04223.html#a571">len</a>; +00212 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.ignore(); <span class="comment">// skip delimiter</span> +00213 <span class="keywordflow">if</span> ( ! <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.fail() ) +00214 { +00215 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.get( (<span class="keywordtype">char</span>*)stream.bufferToFill( len+1 ), <a class="code" href="a04223.html#a571">len</a>+1, <span class="charliteral">'\0'</span> ); +00216 <span class="comment">//stream.bufferAsVector().resize( len ); // cut end of cstring</span> +00217 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR:%s: Reading [%s]"</span>, <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a>.c_str(), stream.buffer() ); +00218 +00219 <span class="comment">// Serial from stream</span> +00220 record.serial( stream ); <span class="comment">// may throw EStreamOverflow if _File.fail()</span> +00221 } +00222 +00223 <span class="keywordflow">return</span> ! <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.fail(); <span class="comment">// retest</span> +00224 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecordera2" doxytag="NLNET::CMessageRecorder::recordNext" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NLNET::CMessageRecorder::recordNext </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a12">sint64</a> </td> + <td class="mdname" nowrap> <em>updatecounter</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a05379.html#a225">TNetworkEvent</a> </td> + <td class="mdname" nowrap> <em>event</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a02303.html">TSockId</a> </td> + <td class="mdname" nowrap> <em>sockid</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a02918.html">CMessage</a> & </td> + <td class="mdname" nowrap> <em>message</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Add a record. +<p> + +<p> +<dl compact><dt><b><a class="el" href="todo.html#_todo000036">Todo:</a></b></dt><dd>cado: Does a silent Access Violation</dd></dl> + +<p> +Definition at line <a class="el" href="a06028.html#l00141">141</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a06029.html#l00167">_File</a>, <a class="el" href="a06029.html#l00179">_RecordAll</a>, <a class="el" href="a05646.html#l00235">len</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00101">nldebug</a>, <a class="el" href="a05379.html#a225a86">NLNET::Sending</a>, <a class="el" href="a06029.html#l00072">NLNET::TMessageRecord::serial()</a>, <a class="el" href="a05981.html#l00101">sint64</a>, and <a class="el" href="a05511.html#l00042">NLNET::TSockId</a>. +<p> +<div class="fragment"><pre>00142 { +00143 <a class="code" href="a04199.html#a6">nlassert</a>( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.is_open() ); +00144 +00145 <span class="keywordflow">if</span> ( (<a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr4">_RecordAll</a>) || (event != <a class="code" href="a05379.html#a225a86">Sending</a>) ) +00146 { +00147 <span class="comment">// Serial to stream</span> +00148 TMessageRecord rec ( event, sockid, message, updatecounter <span class="comment">/*CTime::getLocalTime()*/</span> ); +00149 CMemStream stream ( <span class="keyword">false</span>, <span class="keyword">true</span> ); +00150 rec.serial( stream ); +00151 <span class="keywordtype">char</span> c = <span class="charliteral">'\0'</span>; <span class="comment">// end of cstring</span> +00152 stream.serial( c ); <span class="comment">// added to the stream for _File << (char*)stream.buffer()</span> +00153 +00154 <span class="comment">// Dump to file</span> +00155 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR:%s: Recording [%s]"</span>, <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a>.c_str(), stream.buffer() ); +00156 <span class="keywordtype">int</span> <a class="code" href="a04223.html#a571">len</a> = (<span class="keywordtype">int</span>)(stream.length()-2); <span class="comment">// not the null character (and its separator) at the end of the buffer</span> +00157 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a> << <span class="stringliteral">"* "</span>; +00158 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a> << <a class="code" href="a04223.html#a571">len</a>; <span class="comment">// if we put the expression directly, it makes an access violation ! Weird.</span> +00159 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a> << <span class="stringliteral">" "</span>; +00160 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a> << (<span class="keywordtype">char</span>*)stream.buffer() << endl; +00161 } +00162 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecordera3" doxytag="NLNET::CMessageRecorder::replayConnectionAttempt" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a05379.html#a225">TNetworkEvent</a> NLNET::CMessageRecorder::replayConnectionAttempt </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const <a class="el" href="a02665.html">CInetAddress</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>addr</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Get the first stored connection attempt corresponding to addr. +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00326">326</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a06029.html#l00176">_ConnectionAttempts</a>, <a class="el" href="a06029.html#l00173">_PreloadedRecords</a>, <a class="el" href="a05646.html#l01127">addr</a>, <a class="el" href="a05379.html#a225a88">NLNET::Connecting</a>, <a class="el" href="a05379.html#a225a89">NLNET::ConnFailing</a>, <a class="el" href="a05379.html#a225a92">NLNET::Error</a>, <a class="el" href="a06029.html#l00100">NLNET::TMessageRecord::Event</a>, <a class="el" href="a06028.html#l00198">loadNext()</a>, <a class="el" href="a06029.html#l00102">NLNET::TMessageRecord::Message</a>, <a class="el" href="a05981.html#l00107">NL_I64</a>, <a class="el" href="a05622.html#l00101">nldebug</a>, <a class="el" href="a05622.html#l00416">nlstop</a>, <a class="el" href="a05979.html#l00420">NLMISC::CMemStream::serial()</a>, <a class="el" href="a06029.html#l00049">NLNET::TNetworkEvent</a>, and <a class="el" href="a06029.html#l00099">NLNET::TMessageRecord::UpdateCounter</a>. +<p> +<div class="fragment"><pre>00327 { +00328 <a class="code" href="a05379.html#a225">TNetworkEvent</a> event; +00329 deque<TMessageRecord>::iterator ipr; +00330 +00331 <span class="keywordflow">if</span> ( ! <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr0">_ConnectionAttempts</a>.empty() ) +00332 { +00333 <span class="comment">// Search in the already processed connection attempts</span> +00334 <span class="keywordflow">for</span> ( ipr=<a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr0">_ConnectionAttempts</a>.begin(); ipr!=<a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr0">_ConnectionAttempts</a>.end(); ++ipr ) +00335 { +00336 <a class="code" href="a02665.html">CInetAddress</a> stored_addr; +00337 (*ipr).Message.serial( stored_addr ); +00338 <span class="keywordflow">if</span> ( stored_addr == <a class="code" href="a04223.html#a657">addr</a> ) +00339 { +00340 <span class="comment">// Found</span> +00341 event = (*ipr).Event; +00342 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR: Connection attempt found at update %"</span>NL_I64<span class="stringliteral">"u"</span>, (*ipr).UpdateCounter ); +00343 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr0">_ConnectionAttempts</a>.erase( ipr ); +00344 <span class="keywordflow">return</span> event; +00345 } +00346 } +00347 } +00348 +00349 <span class="comment">// Seek in the preloaded records</span> +00350 <span class="keywordflow">for</span> ( ipr=<a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.begin(); ipr!=<a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.end(); ++ipr ) +00351 { +00352 event = (*ipr).Event; +00353 <span class="keywordflow">if</span> ( (event == <a class="code" href="a05379.html#a225a88">Connecting</a>) || (event == <a class="code" href="a05379.html#a225a89">ConnFailing</a>) ) +00354 { +00355 <a class="code" href="a02665.html">CInetAddress</a> stored_addr; +00356 (*ipr).Message.serial( stored_addr ); +00357 <span class="keywordflow">if</span> ( stored_addr == <a class="code" href="a04223.html#a657">addr</a> ) +00358 { +00359 <span class="comment">// Found</span> +00360 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR: Connection attempt found at update %"</span>NL_I64<span class="stringliteral">"u"</span>, (*ipr).UpdateCounter ); +00361 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.erase( ipr ); +00362 <span class="keywordflow">return</span> event; +00363 } +00364 } +00365 } +00366 <span class="keywordflow">if</span> ( ipr==<a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.end() ) +00367 { +00368 <span class="comment">// If not found, load next records until found !</span> +00369 TMessageRecord rec( <span class="keyword">true</span> ); +00370 <span class="keywordflow">while</span> ( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderb1">loadNext</a>( rec ) ) +00371 { +00372 <span class="keywordflow">if</span> ( ( rec.Event == <a class="code" href="a05379.html#a225a88">Connecting</a> ) || ( rec.Event == <a class="code" href="a05379.html#a225a89">ConnFailing</a> ) ) +00373 { +00374 <a class="code" href="a02665.html">CInetAddress</a> stored_addr; +00375 rec.Message.serial( stored_addr ); +00376 <span class="keywordflow">if</span> ( stored_addr == <a class="code" href="a04223.html#a657">addr</a> ) +00377 { +00378 <span class="comment">// Found</span> +00379 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR: Connection attempt found at update %"</span>NL_I64<span class="stringliteral">"u"</span>, rec.UpdateCounter ); +00380 <span class="keywordflow">return</span> rec.Event; +00381 } +00382 <span class="keywordflow">else</span> +00383 { +00384 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.push_back( rec ); +00385 } +00386 } +00387 <span class="keywordflow">else</span> +00388 { +00389 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr3">_PreloadedRecords</a>.push_back( rec ); +00390 } +00391 } +00392 <span class="comment">// Not found</span> +00393 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR: Connection attempt not found"</span> ); +00394 <span class="keywordflow">return</span> <a class="code" href="a05379.html#a225a92">Error</a>; +00395 } +00396 <a class="code" href="a04199.html#a12">nlstop</a>; +00397 <span class="keywordflow">return</span> <a class="code" href="a05379.html#a225a92">Error</a>; +00398 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecordera4" doxytag="NLNET::CMessageRecorder::replayNextDataAvailable" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NLNET::CMessageRecorder::replayNextDataAvailable </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a12">sint64</a> </td> + <td class="mdname1" valign="top" nowrap> <em>updatecounter</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Push the received blocks for this counter into the receive queue. +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00276">276</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a06029.html#l00176">_ConnectionAttempts</a>, <a class="el" href="a05379.html#a225a90">NLNET::Accepting</a>, <a class="el" href="a05379.html#a225a88">NLNET::Connecting</a>, <a class="el" href="a05379.html#a225a89">NLNET::ConnFailing</a>, <a class="el" href="a05379.html#a225a91">NLNET::Disconnecting</a>, <a class="el" href="a06029.html#l00100">NLNET::TMessageRecord::Event</a>, <a class="el" href="a06028.html#l00230">getNext()</a>, <a class="el" href="a05622.html#l00416">nlstop</a>, <a class="el" href="a06029.html#l00154">ReceivedMessages</a>, <a class="el" href="a05379.html#a225a87">NLNET::Receiving</a>, <a class="el" href="a05379.html#a225a86">NLNET::Sending</a>, and <a class="el" href="a05981.html#l00101">sint64</a>. +<p> +<div class="fragment"><pre>00277 { +00278 TMessageRecord rec( <span class="keyword">true</span> ); <span class="comment">// input message</span> +00279 +00280 <span class="keywordflow">while</span> ( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderb0">getNext</a>( rec, updatecounter ) ) +00281 { +00282 <span class="keywordflow">switch</span> ( rec.Event ) +00283 { +00284 <span class="keywordflow">case</span> <a class="code" href="a05379.html#a225a87">Receiving</a> : +00285 <span class="keywordflow">case</span> <a class="code" href="a05379.html#a225a90">Accepting</a> : +00286 <span class="keywordflow">case</span> <a class="code" href="a05379.html#a225a91">Disconnecting</a> : +00287 <a class="code" href="a02921.html#NLNET_1_1CMessageRecordero0">ReceivedMessages</a>.push( rec ); +00288 <span class="keywordflow">break</span>; +00289 +00290 <span class="keywordflow">case</span> <a class="code" href="a05379.html#a225a86">Sending</a> : +00291 <span class="keywordflow">break</span>; +00292 +00293 <span class="keywordflow">case</span> <a class="code" href="a05379.html#a225a88">Connecting</a> : +00294 <span class="keywordflow">case</span> <a class="code" href="a05379.html#a225a89">ConnFailing</a> : +00295 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr0">_ConnectionAttempts</a>.push_back( rec ); +00296 <span class="keywordflow">break</span>; +00297 +00298 <span class="keywordflow">default</span> : +00299 <a class="code" href="a04199.html#a12">nlstop</a>; +00300 } +00301 } +00302 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecordera5" doxytag="NLNET::CMessageRecorder::startRecord" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NLNET::CMessageRecorder::startRecord </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const std::string & </td> + <td class="mdname" nowrap> <em>filename</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>bool </td> + <td class="mdname" nowrap> <em>recordall</em> = true</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Start recording. +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00104">104</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a06029.html#l00167">_File</a>, <a class="el" href="a06029.html#l00179">_RecordAll</a>, <a class="el" href="a05622.html#l00101">nldebug</a>, and <a class="el" href="a05622.html#l00135">nlwarning</a>. +<p> +<div class="fragment"><pre>00105 { +00106 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a> = <a class="code" href="a05377.html#a2">filename</a>; +00107 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.open( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a>.c_str(), ios_base::out ); +00108 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a> << endl; +00109 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr4">_RecordAll</a> = recordall; +00110 <span class="keywordflow">if</span> ( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.fail() ) +00111 { +00112 <a class="code" href="a04199.html#a2">nlwarning</a>( <span class="stringliteral">"MR: Record: Cannot open file %s"</span>, <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a>.c_str() ); +00113 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00114 } +00115 <span class="keywordflow">else</span> +00116 { +00117 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR: Start recording into %s"</span>, <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a>.c_str() ); +00118 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00119 } +00120 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecordera6" doxytag="NLNET::CMessageRecorder::startReplay" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NLNET::CMessageRecorder::startReplay </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const std::string & </td> + <td class="mdname1" valign="top" nowrap> <em>filename</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Start replaying. +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00178">178</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a06029.html#l00167">_File</a>, <a class="el" href="a05622.html#l00101">nldebug</a>, and <a class="el" href="a05622.html#l00154">nlerror</a>. +<p> +<div class="fragment"><pre>00179 { +00180 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a> = <a class="code" href="a05377.html#a2">filename</a>; +00181 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.open( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a>.c_str(), ios_base::in ); +00182 <span class="keywordflow">if</span> ( <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.fail() ) +00183 { +00184 <a class="code" href="a04199.html#a3">nlerror</a>( <span class="stringliteral">"MR: Replay: Cannot open file %s"</span>, <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a>.c_str() ); +00185 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00186 } +00187 <span class="keywordflow">else</span> +00188 { +00189 <a class="code" href="a04199.html#a0">nldebug</a>( <span class="stringliteral">"MR: Start replaying from %s"</span>, <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a>.c_str() ); +00190 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00191 } +00192 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecordera7" doxytag="NLNET::CMessageRecorder::stopRecord" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NLNET::CMessageRecorder::stopRecord </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Stop recording. +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00168">168</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a06029.html#l00167">_File</a>. +<p> +Referenced by <a class="el" href="a06028.html#l00090">~CMessageRecorder()</a>. +<p> +<div class="fragment"><pre>00169 { +00170 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.close(); +00171 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a> = <span class="stringliteral">""</span>; +00172 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecordera8" doxytag="NLNET::CMessageRecorder::stopReplay" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NLNET::CMessageRecorder::stopReplay </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Stop playback. +<p> + +<p> +Definition at line <a class="el" href="a06028.html#l00404">404</a> of file <a class="el" href="a06028.html">message_recorder.cpp</a>. +<p> +References <a class="el" href="a06029.html#l00167">_File</a>. +<p> +Referenced by <a class="el" href="a06028.html#l00090">~CMessageRecorder()</a>. +<p> +<div class="fragment"><pre>00405 { +00406 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr1">_File</a>.close(); +00407 <a class="code" href="a02921.html#NLNET_1_1CMessageRecorderr2">_Filename</a> = <span class="stringliteral">""</span>; +00408 } +</pre></div> </td> + </tr> +</table> +<hr><h2>Field Documentation</h2> +<a class="anchor" name="NLNET_1_1CMessageRecorderr0" doxytag="NLNET::CMessageRecorder::_ConnectionAttempts" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::deque<<a class="el" href="a03909.html">TMessageRecord</a>> <a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr0">NLNET::CMessageRecorder::_ConnectionAttempts</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06029.html#l00176">176</a> of file <a class="el" href="a06029.html">message_recorder.h</a>. +<p> +Referenced by <a class="el" href="a06028.html#l00326">replayConnectionAttempt()</a>, and <a class="el" href="a06028.html#l00276">replayNextDataAvailable()</a>. </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecorderr1" doxytag="NLNET::CMessageRecorder::_File" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::fstream <a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr1">NLNET::CMessageRecorder::_File</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06029.html#l00167">167</a> of file <a class="el" href="a06029.html">message_recorder.h</a>. +<p> +Referenced by <a class="el" href="a06028.html#l00198">loadNext()</a>, <a class="el" href="a06028.html#l00141">recordNext()</a>, <a class="el" href="a06028.html#l00104">startRecord()</a>, <a class="el" href="a06028.html#l00178">startReplay()</a>, <a class="el" href="a06028.html#l00168">stopRecord()</a>, and <a class="el" href="a06028.html#l00404">stopReplay()</a>. </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecorderr2" doxytag="NLNET::CMessageRecorder::_Filename" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::string <a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr2">NLNET::CMessageRecorder::_Filename</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06029.html#l00170">170</a> of file <a class="el" href="a06029.html">message_recorder.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecorderr3" doxytag="NLNET::CMessageRecorder::_PreloadedRecords" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::deque<<a class="el" href="a03909.html">TMessageRecord</a>> <a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr3">NLNET::CMessageRecorder::_PreloadedRecords</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06029.html#l00173">173</a> of file <a class="el" href="a06029.html">message_recorder.h</a>. +<p> +Referenced by <a class="el" href="a06028.html#l00230">getNext()</a>, and <a class="el" href="a06028.html#l00326">replayConnectionAttempt()</a>. </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecorderr4" doxytag="NLNET::CMessageRecorder::_RecordAll" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a02921.html#NLNET_1_1CMessageRecorderr4">NLNET::CMessageRecorder::_RecordAll</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06029.html#l00179">179</a> of file <a class="el" href="a06029.html">message_recorder.h</a>. +<p> +Referenced by <a class="el" href="a06028.html#l00141">recordNext()</a>, and <a class="el" href="a06028.html#l00104">startRecord()</a>. </td> + </tr> +</table> +<a class="anchor" name="NLNET_1_1CMessageRecordero0" doxytag="NLNET::CMessageRecorder::ReceivedMessages" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::queue<<a class="el" href="a03909.html">NLNET::TMessageRecord</a>> <a class="el" href="a02921.html#NLNET_1_1CMessageRecordero0">NLNET::CMessageRecorder::ReceivedMessages</a> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Receive queue (corresponding to one update count). Use empty(), front(), pop(). +<p> + +<p> +Definition at line <a class="el" href="a06029.html#l00154">154</a> of file <a class="el" href="a06029.html">message_recorder.h</a>. +<p> +Referenced by <a class="el" href="a06028.html#l00276">replayNextDataAvailable()</a>. </td> + </tr> +</table> +<hr>The documentation for this class was generated from the following files:<ul> +<li><a class="el" href="a06029.html">message_recorder.h</a><li><a class="el" href="a06028.html">message_recorder.cpp</a></ul> +<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 14:00:11 2004 for NeL by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border=0 > +</a>1.3.6 </small></address> +</body> +</html> |