Sophie

Sophie

distrib > Mandriva > 2007.0 > i586 > by-pkgid > ad1ba1135a9c9eeffc2e538163e00373 > files > 296

libCommonC++2_1.4-devel-1.4.1-1mdv2007.0.i586.rpm

<!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>GNU CommonC++: ost::SocketService Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.6 -->
<div class="tabs">
  <ul>
    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
    <li id="current"><a href="classes.html"><span>Classes</span></a></li>
    <li><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
    <li><a href="examples.html"><span>Examples</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="classes.html"><span>Alphabetical&nbsp;List</span></a></li>
    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
  </ul></div>
<div class="nav">
<a class="el" href="namespaceost.html">ost</a>::<a class="el" href="classost_1_1_socket_service.html">SocketService</a></div>
<h1>ost::SocketService Class Reference</h1><!-- doxytag: class="ost::SocketService" --><!-- doxytag: inherits="ost::Thread,ost::Mutex" -->The <a class="el" href="classost_1_1_socket_service.html">SocketService</a> is a thread pool object that is meant to service attached socket <a class="el" href="namespaceost.html#1a3b6738f6f759fcb52b544a4787cbb2">ports.Thread</a> pool service object for socket ports.  
<a href="#_details">More...</a>
<p>
<code>#include &lt;<a class="el" href="socketport_8h-source.html">socketport.h</a>&gt;</code>
<p>
<p>Inheritance diagram for ost::SocketService:
<p><center><img src="classost_1_1_socket_service.png" usemap="#ost::SocketService_map" border="0" alt=""></center>
<map name="ost::SocketService_map">
<area href="classost_1_1_thread.html" alt="ost::Thread" shape="rect" coords="0,0,116,24">
<area href="classost_1_1_mutex.html" alt="ost::Mutex" shape="rect" coords="126,0,242,24">
</map>
<a href="classost_1_1_socket_service-members.html">List of all members.</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">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classost_1_1_socket_service.html#b43b58d6e7d8ce34e2906f3e79a25e69">update</a> (unsigned char flag=0xff)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Notify service thread that a port has been added or removed, or a timer changed, so that a new schedule can be computed for expiring attached ports.  <a href="#b43b58d6e7d8ce34e2906f3e79a25e69"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classost_1_1_socket_service.html#3a312fb56c00a0472fc0701898dc3ece">SocketService</a> (int pri=0, size_t stack=0, const char *id=NULL)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a service thread for attaching socket ports.  <a href="#3a312fb56c00a0472fc0701898dc3ece"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classost_1_1_socket_service.html#9a370cf56f889b416847cc8759a9b49c">~SocketService</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Terminate the thread pool and eliminate any attached socket ports.  <a href="#9a370cf56f889b416847cc8759a9b49c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classost_1_1_socket_service.html#870e3205e044e2862b9f17739ba8172c">getCount</a> (void) const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get current reference count.  <a href="#870e3205e044e2862b9f17739ba8172c"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classost_1_1_socket_service.html#4914e4f6bfbab8c233244b7b44e52c86">onUpdate</a> (unsigned char buf)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Handles all requests other than "termination".  <a href="#4914e4f6bfbab8c233244b7b44e52c86"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classost_1_1_socket_service.html#206f1b02739f322cb38a33b0e409a32f">onEvent</a> (void)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Called once each time the service thread is rescheduled.  <a href="#206f1b02739f322cb38a33b0e409a32f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classost_1_1_socket_service.html#3a399c80d80b5d672dd01e273673dd33">onCallback</a> (<a class="el" href="classost_1_1_socket_port.html">SocketPort</a> *port)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Called for each port that is being processed in response to an event.  <a href="#3a399c80d80b5d672dd01e273673dd33"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classost_1_1_socket_service.html#9884a27b35e263e19e4acf2cb06c4071">SocketPort</a></td></tr>

</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
The <a class="el" href="classost_1_1_socket_service.html">SocketService</a> is a thread pool object that is meant to service attached socket <a class="el" href="namespaceost.html#1a3b6738f6f759fcb52b544a4787cbb2">ports.Thread</a> pool service object for socket ports. 
<p>
Multiple pool objects may be created and multiple socket ports may be attached to the same thread of execution. This allows one to balance threads and sockets they service rather than either using a single thread for all connections or a seperate thread for each connection. Features can be added through supported virtual methods.<p>
<dl compact><dt><b>Author:</b></dt><dd>David Sugar &lt;<a href="mailto:dyfet@ostel.com">dyfet@ostel.com</a>&gt; </dd></dl>
<dl compact><dt><b>Examples: </b></dt><dd>

<p>
<a class="el" href="tcpservice_8cpp-example.html#_a48">tcpservice.cpp</a>.</dl>
<p>
<hr><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" name="3a312fb56c00a0472fc0701898dc3ece"></a><!-- doxytag: member="ost::SocketService::SocketService" ref="3a312fb56c00a0472fc0701898dc3ece" args="(int pri=0, size_t stack=0, const char *id=NULL)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">ost::SocketService::SocketService           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top">int&nbsp;</td>
          <td class="mdname" nowrap> <em>pri</em> = <code>0</code>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname" nowrap> <em>stack</em> = <code>0</code>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname" nowrap> <em>id</em> = <code>NULL</code></td>
        </tr>
        <tr>
          <td class="md"></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Create a service thread for attaching socket ports. 
<p>
The thread begins execution with the first attached socket.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pri</em>&nbsp;</td><td>of this thread to run under. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>stack</em>&nbsp;</td><td>stack size. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>id</em>&nbsp;</td><td>thread ID. </td></tr>
  </table>
</dl>
    </td>
  </tr>
</table>
<a class="anchor" name="9a370cf56f889b416847cc8759a9b49c"></a><!-- doxytag: member="ost::SocketService::~SocketService" ref="9a370cf56f889b416847cc8759a9b49c" args="()" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">virtual ost::SocketService::~SocketService           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="mdname1" valign="top" nowrap>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap><code> [virtual]</code></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Terminate the thread pool and eliminate any attached socket ports. 
<p>
    </td>
  </tr>
</table>
<hr><h2>Member Function Documentation</h2>
<a class="anchor" name="870e3205e044e2862b9f17739ba8172c"></a><!-- doxytag: member="ost::SocketService::getCount" ref="870e3205e044e2862b9f17739ba8172c" args="(void) const " --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">int ost::SocketService::getCount           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top">void&nbsp;</td>
          <td class="mdname1" valign="top" nowrap>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap> const<code> [inline]</code></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get current reference count. 
<p>
This can be used when selecting the least used service handler from a pool.<p>
<dl compact><dt><b>Returns:</b></dt><dd>count of active ports. </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="3a399c80d80b5d672dd01e273673dd33"></a><!-- doxytag: member="ost::SocketService::onCallback" ref="3a399c80d80b5d672dd01e273673dd33" args="(SocketPort *port)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">virtual void ost::SocketService::onCallback           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="classost_1_1_socket_port.html">SocketPort</a> *&nbsp;</td>
          <td class="mdname1" valign="top" nowrap> <em>port</em>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap><code> [protected, virtual]</code></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Called for each port that is being processed in response to an event. 
<p>
This can be used to add additional notification options during callback in combination with <a class="el" href="classost_1_1_socket_service.html#b43b58d6e7d8ce34e2906f3e79a25e69">update()</a>.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>port</em>&nbsp;</td><td><a class="el" href="classost_1_1_socket_port.html">SocketPort</a> who's callback events are being evaluated. </td></tr>
  </table>
</dl>
    </td>
  </tr>
</table>
<a class="anchor" name="206f1b02739f322cb38a33b0e409a32f"></a><!-- doxytag: member="ost::SocketService::onEvent" ref="206f1b02739f322cb38a33b0e409a32f" args="(void)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">virtual void ost::SocketService::onEvent           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top">void&nbsp;</td>
          <td class="mdname1" valign="top" nowrap>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap><code> [protected, virtual]</code></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Called once each time the service thread is rescheduled. 
<p>
This is called after the mutex is locked and can be used to slip in additional processing.     </td>
  </tr>
</table>
<a class="anchor" name="4914e4f6bfbab8c233244b7b44e52c86"></a><!-- doxytag: member="ost::SocketService::onUpdate" ref="4914e4f6bfbab8c233244b7b44e52c86" args="(unsigned char buf)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">virtual void ost::SocketService::onUpdate           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top">unsigned char&nbsp;</td>
          <td class="mdname1" valign="top" nowrap> <em>buf</em>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap><code> [protected, virtual]</code></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Handles all requests other than "termination". 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>request id as posted from <a class="el" href="classost_1_1_socket_service.html#b43b58d6e7d8ce34e2906f3e79a25e69">update()</a>. </td></tr>
  </table>
</dl>
    </td>
  </tr>
</table>
<a class="anchor" name="b43b58d6e7d8ce34e2906f3e79a25e69"></a><!-- doxytag: member="ost::SocketService::update" ref="b43b58d6e7d8ce34e2906f3e79a25e69" args="(unsigned char flag=0xff)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">void ost::SocketService::update           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top">unsigned char&nbsp;</td>
          <td class="mdname1" valign="top" nowrap> <em>flag</em> = <code>0xff</code>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Notify service thread that a port has been added or removed, or a timer changed, so that a new schedule can be computed for expiring attached ports. 
<p>
A "0" is used to terminate the service thread, and additional values can be specified which will be "caught" in the <a class="el" href="classost_1_1_socket_service.html#4914e4f6bfbab8c233244b7b44e52c86">onUpdate()</a> handler.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>flag</em>&nbsp;</td><td>update flag value. </td></tr>
  </table>
</dl>
    </td>
  </tr>
</table>
<hr><h2>Friends And Related Function Documentation</h2>
<a class="anchor" name="9884a27b35e263e19e4acf2cb06c4071"></a><!-- doxytag: member="ost::SocketService::SocketPort" ref="9884a27b35e263e19e4acf2cb06c4071" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">friend class <a class="el" href="classost_1_1_socket_port.html">SocketPort</a><code> [friend]</code>          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
    </td>
  </tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="socketport_8h-source.html">socketport.h</a></ul>
<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 19 10:50:57 2006 for GNU CommonC++ by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
</body>
</html>