Click here to Skip to main content
15,881,248 members
Articles / Programming Languages / C

A Generic C-Language TCP Client Application

Rate me:
Please Sign up or sign in to vote.
3.67/5 (2 votes)
9 May 2010CPOL4 min read 29K   789   20  
A library for writing simple TCP client applications
<!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>TcpClient2: GenericClient.c 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.6.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="main.html"><span>Main&nbsp;Page</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>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
    </ul>
  </div>
<h1>GenericClient.c</h1><a href="GenericClient_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/// @source      GenericClient.c</span>
<a name="l00002"></a>00002 <span class="comment"></span><span class="comment">/// @description Implementation of class GenericClient.</span>
<a name="l00003"></a>00003 <span class="comment"></span><span class="comment">/// A class which aims to meke it easier to write simple client applications.</span>
<a name="l00004"></a>00004 <span class="comment"></span><span class="comment">/// This class also inherits the functionality of the Client class.</span>
<a name="l00005"></a>00005 <span class="comment"></span><span class="comment">//</span>
<a name="l00006"></a>00006 <span class="comment">//  See licensing information in the file README.TXT.</span>
<a name="l00007"></a>00007 
<a name="l00008"></a>00008 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00009"></a>00009 
<a name="l00010"></a>00010 <span class="comment">// includes</span>
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 <span class="comment">// common configuration options &amp; declarations</span>
<a name="l00013"></a>00013 <span class="preprocessor">#include &quot;<a class="code" href="config_8h.html" title="Common configuration options &amp;amp; declarations.">config.h</a>&quot;</span> <span class="comment">// always include first</span>
<a name="l00014"></a>00014 
<a name="l00015"></a>00015 <span class="comment">// C language includes</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include &lt;assert.h&gt;</span>
<a name="l00017"></a>00017 <span class="preprocessor">#include &lt;stdlib.h&gt;</span> <span class="comment">// abort</span>
<a name="l00018"></a>00018 <span class="comment">// #include &lt;string.h&gt;</span>
<a name="l00019"></a>00019 
<a name="l00020"></a>00020 <span class="comment">// framework includes</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include &quot;<a class="code" href="Client_8h.html" title="Public interface for class Client.">Client.h</a>&quot;</span>        <span class="comment">/* client_xxx functions  */</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include &quot;<a class="code" href="GenericClient_8h.html" title="Public interface for class GenericClient.">GenericClient.h</a>&quot;</span> <span class="comment">/* genCli_xxx functions  */</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include &quot;<a class="code" href="Socket_8h.html" title="Public interface for the Socket facility.">Socket.h</a>&quot;</span>        <span class="comment">/* socket_xxx functions  */</span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00026"></a>00026 
<a name="l00027"></a>00027 <span class="comment">// global declarations</span>
<a name="l00028"></a>00028 <span class="comment"></span>
<a name="l00029"></a>00029 <span class="comment">/// GenericClient class.</span>
<a name="l00030"></a>00030 <span class="comment">/// This class provides members and methods that make it easier to write simple</span>
<a name="l00031"></a>00031 <span class="comment">/// client applications.</span>
<a name="l00032"></a>00032 <span class="comment">/// @class GenericClient</span>
<a name="l00033"></a><a class="code" href="structGenericClient.html">00033</a> <span class="comment"></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structGenericClient.html" title="GenericClient class.">GenericClient</a>
<a name="l00034"></a>00034 {
<a name="l00035"></a><a class="code" href="structGenericClient.html#af45befd1323ff47fcb9e18fad9384c7b">00035</a>    <a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69" title="unsigned short abbreviation">ushort</a> <a class="code" href="structGenericClient.html#af45befd1323ff47fcb9e18fad9384c7b" title="tells if the client is connected to the server">state</a>;     <span class="comment">///&lt; tells if the client is connected to the server</span>
<a name="l00036"></a><a class="code" href="structGenericClient.html#ad4f6a1fc845483db6ae7c6c47cca38ab">00036</a> <span class="comment"></span>   <a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69" title="unsigned short abbreviation">ushort</a> <a class="code" href="structGenericClient.html#ad4f6a1fc845483db6ae7c6c47cca38ab" title="the command the client is running / will run">command</a>;   <span class="comment">///&lt; the command the client is running / will run</span>
<a name="l00037"></a><a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293">00037</a> <span class="comment"></span>   <a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69" title="unsigned short abbreviation">ushort</a> <a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a>;     <span class="comment">///&lt; event that will be passed to the application code</span>
<a name="l00038"></a><a class="code" href="structGenericClient.html#aed6fb49c4f4164f70e7642376edc059e">00038</a> <span class="comment"></span>   <span class="keywordtype">int</span> <a class="code" href="structGenericClient.html#aed6fb49c4f4164f70e7642376edc059e" title="error generated by the execution of the last command">error</a>;        <span class="comment">///&lt; error generated by the execution of the last command</span>
<a name="l00039"></a><a class="code" href="structGenericClient.html#ae384ea78c14528e3253a34d79aacd23e">00039</a> <span class="comment"></span>   <a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69" title="unsigned short abbreviation">ushort</a> <a class="code" href="structGenericClient.html#ae384ea78c14528e3253a34d79aacd23e" title="type of the last error">errorType</a>; <span class="comment">///&lt; type of the last error</span>
<a name="l00040"></a><a class="code" href="structGenericClient.html#a2ad33e597e0af0e8602bc89ee0d08a5d">00040</a> <span class="comment"></span>   <a class="code" href="structMessage.html" title="Message data structure.">Message</a>* <a class="code" href="structGenericClient.html#a2ad33e597e0af0e8602bc89ee0d08a5d" title="communications buffer">message</a>; <span class="comment">///&lt; communications buffer</span>
<a name="l00041"></a><a class="code" href="structGenericClient.html#a6e11b2c98587b6368597419889eec82e">00041</a> <span class="comment"></span>   <span class="keywordtype">char</span>* <a class="code" href="structGenericClient.html#a6e11b2c98587b6368597419889eec82e" title="last operation performed / being performed">operation</a>;  <span class="comment">///&lt; last operation performed / being performed</span>
<a name="l00042"></a><a class="code" href="structGenericClient.html#acf5d7b1e1b5c11c7f2bcfd6d90661882">00042</a> <span class="comment"></span>   <span class="keywordtype">bool</span> <a class="code" href="structGenericClient.html#acf5d7b1e1b5c11c7f2bcfd6d90661882" title="keeps trying to connect, don&amp;#39;t return error">shouldRetryConnect</a>; <span class="comment">///&lt; keeps trying to connect, don&#39;t return error</span>
<a name="l00043"></a>00043 <span class="comment"></span>} <a class="code" href="structGenericClient.html" title="GenericClient class.">GenericClient</a>;
<a name="l00044"></a>00044 <span class="comment"></span>
<a name="l00045"></a>00045 <span class="comment">/// The unique GenericClient instance used by the library.</span>
<a name="l00046"></a><a class="code" href="GenericClient_8c.html#aa7afdf4a91bcc9958f50acc40f4243ab">00046</a> <span class="comment"></span><span class="keyword">static</span> <a class="code" href="structGenericClient.html" title="GenericClient class.">GenericClient</a> <a class="code" href="GenericClient_8c.html#aa7afdf4a91bcc9958f50acc40f4243ab" title="The unique GenericClient instance used by the library.">genCli</a>;
<a name="l00047"></a>00047 <span class="comment"></span>
<a name="l00048"></a>00048 <span class="comment">/// Configuration flag: keep retrying when connect fails</span>
<a name="l00049"></a>00049 <span class="comment">/// @private @memberof GenericClient</span>
<a name="l00050"></a>00050 <span class="comment"></span><span class="comment"></span>
<a name="l00051"></a>00051 <span class="comment">/// States of the generic client.</span>
<a name="l00052"></a>00052 <span class="comment">/// @private @memberof GenericClient</span>
<a name="l00053"></a><a class="code" href="structGenericClient.html#ac78162e4f42b35a3fa09c408cb1776ad">00053</a> <span class="comment"></span><span class="keyword">enum</span> <a class="code" href="structGenericClient.html#ac78162e4f42b35a3fa09c408cb1776ad" title="Configuration flag: keep retrying when connect fails.">GenericClientState</a>
<a name="l00054"></a>00054 {
<a name="l00055"></a><a class="code" href="GenericClient_8c.html#ac00efc3631be622ab43ed76ea228118e">00055</a>    <a class="code" href="GenericClient_8c.html#ac00efc3631be622ab43ed76ea228118e">CLI_ST_NOT_CONNECTED</a>  ,
<a name="l00056"></a><a class="code" href="GenericClient_8c.html#a68df74ac98272c623c18ffae97730206">00056</a>    <a class="code" href="GenericClient_8c.html#a68df74ac98272c623c18ffae97730206">CLI_ST_CONNECTED_IDLE</a> ,
<a name="l00057"></a>00057 };
<a name="l00058"></a>00058 <span class="comment"></span>
<a name="l00059"></a>00059 <span class="comment">/// Commands for the generic client.</span>
<a name="l00060"></a>00060 <span class="comment">/// @private @memberof GenericClient</span>
<a name="l00061"></a><a class="code" href="structGenericClient.html#ac3b50941065fc724173179174119ede4">00061</a> <span class="comment"></span><span class="keyword">enum</span> <a class="code" href="structGenericClient.html#ac3b50941065fc724173179174119ede4" title="Commands for the generic client.">GenericClientCommand</a>
<a name="l00062"></a>00062 {
<a name="l00063"></a><a class="code" href="GenericClient_8c.html#aaa407bd9d7706fbe7be3b41aa64e77b3">00063</a>    <a class="code" href="GenericClient_8c.html#aaa407bd9d7706fbe7be3b41aa64e77b3">CLI_CMD_CLOSE</a>    ,
<a name="l00064"></a><a class="code" href="GenericClient_8c.html#a8bbcb5610f038bff6686f3b731c69a01">00064</a>    <a class="code" href="GenericClient_8c.html#a8bbcb5610f038bff6686f3b731c69a01">CLI_CMD_CONNECT</a>  ,
<a name="l00065"></a><a class="code" href="GenericClient_8c.html#a9985998badc55ec7c8bfbfe477fd1da0">00065</a>    <a class="code" href="GenericClient_8c.html#a9985998badc55ec7c8bfbfe477fd1da0">CLI_CMD_RECV</a>     ,
<a name="l00066"></a><a class="code" href="GenericClient_8c.html#a05de5aa507b1f813728a665849b535c4">00066</a>    <a class="code" href="GenericClient_8c.html#a05de5aa507b1f813728a665849b535c4">CLI_CMD_SEND</a>     ,
<a name="l00067"></a>00067 };
<a name="l00068"></a>00068 
<a name="l00069"></a>00069 <span class="comment">// ---------------</span>
<a name="l00070"></a>00070 
<a name="l00071"></a>00071 <span class="comment">// internal helper functions</span><span class="comment"></span>
<a name="l00072"></a>00072 <span class="comment">/// @cond hides_from_doxygen</span>
<a name="l00073"></a>00073 <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a4340f5c90d1a2eaef8e10a9d68364192" title="Runs the generic client application.">run</a>(<span class="keywordtype">void</span>);
<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a33c31b64427ad37ca1148b3060df7435" title="Runs the generic client application with command CLOSE.">runClose</a>(<span class="keywordtype">void</span>);
<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a6c505da335d1912f2a01428bcf24b9fd" title="Runs the generic client application with command CONNECT.">runConnect</a>(<span class="keywordtype">void</span>);
<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a1e5100adbedba9ccc0696e7b0d9889c4" title="Runs the generic client application in the state CONNECTED_IDLE.">runConnectedIdle</a>(<span class="keywordtype">void</span>);
<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a7d9180f767824681e9aa322a9849a0c6" title="Runs the generic client application in the state NOT_CONNECTED.">runNotConnected</a>(<span class="keywordtype">void</span>);
<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a241639bfd3e870b785eb67b938b6ade4" title="Runs the generic client application with command RECV.">runRecvMessage</a>(<span class="keywordtype">void</span>);
<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#af258464e17eb1db398e4cc6704556f61" title="Runs the generic client application with command SEND.">runSendMessage</a>(<span class="keywordtype">void</span>);<span class="comment"></span>
<a name="l00080"></a>00080 <span class="comment">/// @endcond</span>
<a name="l00081"></a>00081 <span class="comment"></span>
<a name="l00082"></a>00082 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00083"></a>00083 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00084"></a>00084 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00085"></a>00085 <span class="comment"></span>
<a name="l00086"></a>00086 <span class="comment">/** Prepares the generic client for the CLOSE command.</span>
<a name="l00087"></a>00087 <span class="comment"></span>
<a name="l00088"></a>00088 <span class="comment">    @memberof GenericClient</span>
<a name="l00089"></a>00089 <span class="comment">*/</span>
<a name="l00090"></a>00090 
<a name="l00091"></a><a class="code" href="structGenericClient.html#a9f7b9a8d91772ca4e39b53be3d7025d1">00091</a> TC2API <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a9f7b9a8d91772ca4e39b53be3d7025d1" title="Prepares the generic client for the CLOSE command.">genCli_close</a>(<span class="keywordtype">void</span>)
<a name="l00092"></a>00092 {
<a name="l00093"></a>00093    genCli.<a class="code" href="structGenericClient.html#a6e11b2c98587b6368597419889eec82e" title="last operation performed / being performed">operation</a> = <span class="stringliteral">&quot;CLOSE&quot;</span>;
<a name="l00094"></a>00094    genCli.<a class="code" href="structGenericClient.html#ad4f6a1fc845483db6ae7c6c47cca38ab" title="the command the client is running / will run">command</a> = <a class="code" href="GenericClient_8c.html#aaa407bd9d7706fbe7be3b41aa64e77b3">CLI_CMD_CLOSE</a>;
<a name="l00095"></a>00095 }
<a name="l00096"></a>00096 
<a name="l00097"></a>00097 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00098"></a>00098 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00099"></a>00099 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00100"></a>00100 <span class="comment"></span>
<a name="l00101"></a>00101 <span class="comment">/** Prepares the generic client for the CONNECT command.</span>
<a name="l00102"></a>00102 <span class="comment"></span>
<a name="l00103"></a>00103 <span class="comment">    @memberof GenericClient</span>
<a name="l00104"></a>00104 <span class="comment">*/</span>
<a name="l00105"></a>00105 
<a name="l00106"></a><a class="code" href="structGenericClient.html#a6878849f6f316f7166da090005d8a7f0">00106</a> TC2API <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a6878849f6f316f7166da090005d8a7f0" title="Prepares the generic client for the CONNECT command.">genCli_connect</a>(<span class="keywordtype">void</span>)
<a name="l00107"></a>00107 {
<a name="l00108"></a>00108    genCli.<a class="code" href="structGenericClient.html#a6e11b2c98587b6368597419889eec82e" title="last operation performed / being performed">operation</a> = <span class="stringliteral">&quot;CONNECT&quot;</span>;
<a name="l00109"></a>00109    genCli.<a class="code" href="structGenericClient.html#ad4f6a1fc845483db6ae7c6c47cca38ab" title="the command the client is running / will run">command</a> = <a class="code" href="GenericClient_8c.html#a8bbcb5610f038bff6686f3b731c69a01">CLI_CMD_CONNECT</a>;
<a name="l00110"></a>00110 }
<a name="l00111"></a>00111 
<a name="l00112"></a>00112 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00113"></a>00113 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00114"></a>00114 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00115"></a>00115 <span class="comment"></span>
<a name="l00116"></a>00116 <span class="comment">/** Retrieves the error that occurred last.</span>
<a name="l00117"></a>00117 <span class="comment"></span>
<a name="l00118"></a>00118 <span class="comment">    @memberof GenericClient</span>
<a name="l00119"></a>00119 <span class="comment">*/</span>
<a name="l00120"></a>00120 
<a name="l00121"></a><a class="code" href="structGenericClient.html#a07c1d0aa56c47777fa2e989619efaad2">00121</a> TC2API <a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69" title="unsigned short abbreviation">ushort</a> <a class="code" href="structGenericClient.html#a07c1d0aa56c47777fa2e989619efaad2" title="Retrieves the error that occurred last.">genCli_error</a>(<span class="keywordtype">void</span>)
<a name="l00122"></a>00122 {
<a name="l00123"></a>00123    <span class="keywordflow">return</span> genCli.<a class="code" href="structGenericClient.html#aed6fb49c4f4164f70e7642376edc059e" title="error generated by the execution of the last command">error</a>;
<a name="l00124"></a>00124 }
<a name="l00125"></a>00125 
<a name="l00126"></a>00126 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00127"></a>00127 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00128"></a>00128 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00129"></a>00129 <span class="comment"></span>
<a name="l00130"></a>00130 <span class="comment">/** Retrieves the type of the error that occurred last.</span>
<a name="l00131"></a>00131 <span class="comment"></span>
<a name="l00132"></a>00132 <span class="comment">    @memberof GenericClient</span>
<a name="l00133"></a>00133 <span class="comment">*/</span>
<a name="l00134"></a>00134 
<a name="l00135"></a><a class="code" href="structGenericClient.html#a66e36d0f39cf6035f288c85b941abe7e">00135</a> TC2API <a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69" title="unsigned short abbreviation">ushort</a> <a class="code" href="structGenericClient.html#a66e36d0f39cf6035f288c85b941abe7e" title="Retrieves the type of the error that occurred last.">genCli_errorType</a>(<span class="keywordtype">void</span>)
<a name="l00136"></a>00136 {
<a name="l00137"></a>00137    <span class="keywordflow">return</span> genCli.<a class="code" href="structGenericClient.html#ae384ea78c14528e3253a34d79aacd23e" title="type of the last error">errorType</a>;
<a name="l00138"></a>00138 }
<a name="l00139"></a>00139 
<a name="l00140"></a>00140 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00141"></a>00141 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00142"></a>00142 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00143"></a>00143 <span class="comment"></span>
<a name="l00144"></a>00144 <span class="comment">/** Retrieves the event that occurred last.</span>
<a name="l00145"></a>00145 <span class="comment"></span>
<a name="l00146"></a>00146 <span class="comment">    @memberof GenericClient</span>
<a name="l00147"></a>00147 <span class="comment">*/</span>
<a name="l00148"></a>00148 
<a name="l00149"></a><a class="code" href="structGenericClient.html#a789e3f5fa2a8c3f7f2970bbdbbdae23b">00149</a> TC2API <a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69" title="unsigned short abbreviation">ushort</a> <a class="code" href="structGenericClient.html#a789e3f5fa2a8c3f7f2970bbdbbdae23b" title="Retrieves the event that occurred last.">genCli_event</a>(<span class="keywordtype">void</span>)
<a name="l00150"></a>00150 {
<a name="l00151"></a>00151    <span class="keywordflow">return</span> genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a>;
<a name="l00152"></a>00152 }
<a name="l00153"></a>00153 
<a name="l00154"></a>00154 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00155"></a>00155 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00156"></a>00156 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00157"></a>00157 <span class="comment"></span>
<a name="l00158"></a>00158 <span class="comment">/** initializes the generic client.</span>
<a name="l00159"></a>00159 <span class="comment"></span>
<a name="l00160"></a>00160 <span class="comment">    Performs the client library initialization, creates the generic client&#39;s</span>
<a name="l00161"></a>00161 <span class="comment">      working message</span>
<a name="l00162"></a>00162 <span class="comment"></span>
<a name="l00163"></a>00163 <span class="comment">    @memberof GenericClient</span>
<a name="l00164"></a>00164 <span class="comment">*/</span>
<a name="l00165"></a>00165 
<a name="l00166"></a><a class="code" href="structGenericClient.html#a96874a54fc93a83624ce701000705885">00166</a> TC2API <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a96874a54fc93a83624ce701000705885" title="initializes the generic client.">genCli_init</a>(<span class="keywordtype">void</span>)
<a name="l00167"></a>00167 {
<a name="l00168"></a>00168    <a class="code" href="classClient.html#a1b7cef854eb0b6febc2f315def5e4c22" title="Initializes the Client façade class.">client_init</a>();
<a name="l00169"></a>00169 
<a name="l00170"></a>00170    <a class="code" href="classClient.html#a2cb4ba780f0333535bccaf7c179909ab" title="Creates the client socket.">client_createClientSocket</a>();
<a name="l00171"></a>00171 
<a name="l00172"></a>00172    genCli.<a class="code" href="structGenericClient.html#a2ad33e597e0af0e8602bc89ee0d08a5d" title="communications buffer">message</a> = <a class="code" href="structMessage.html#aca5526494c50cb46e9d25739d860098c" title="Creates a Message structure.">message_create</a>(0);
<a name="l00173"></a>00173 
<a name="l00174"></a>00174    genCli.<a class="code" href="structGenericClient.html#af45befd1323ff47fcb9e18fad9384c7b" title="tells if the client is connected to the server">state</a> = <a class="code" href="GenericClient_8c.html#ac00efc3631be622ab43ed76ea228118e">CLI_ST_NOT_CONNECTED</a>;
<a name="l00175"></a>00175    genCli.<a class="code" href="structGenericClient.html#ad4f6a1fc845483db6ae7c6c47cca38ab" title="the command the client is running / will run">command</a> = <a class="code" href="GenericClient_8c.html#a8bbcb5610f038bff6686f3b731c69a01">CLI_CMD_CONNECT</a>;
<a name="l00176"></a>00176 }
<a name="l00177"></a>00177 
<a name="l00178"></a>00178 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00179"></a>00179 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00180"></a>00180 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00181"></a>00181 <span class="comment"></span>
<a name="l00182"></a>00182 <span class="comment">/** Retrieves the Message associated with the last event.</span>
<a name="l00183"></a>00183 <span class="comment"></span>
<a name="l00184"></a>00184 <span class="comment">    @memberof GenericClient</span>
<a name="l00185"></a>00185 <span class="comment">*/</span>
<a name="l00186"></a>00186 
<a name="l00187"></a><a class="code" href="structGenericClient.html#a9fafb2baa5e3ab2fff76f5eb9261ad72">00187</a> TC2API <a class="code" href="structMessage.html" title="Message data structure.">Message</a>* <a class="code" href="structGenericClient.html#a9fafb2baa5e3ab2fff76f5eb9261ad72" title="Retrieves the Message associated with the last event.">genCli_message</a>(<span class="keywordtype">void</span>)
<a name="l00188"></a>00188 {
<a name="l00189"></a>00189    <span class="keywordflow">return</span> genCli.<a class="code" href="structGenericClient.html#a2ad33e597e0af0e8602bc89ee0d08a5d" title="communications buffer">message</a>;
<a name="l00190"></a>00190 }
<a name="l00191"></a>00191 
<a name="l00192"></a>00192 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00193"></a>00193 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00194"></a>00194 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00195"></a>00195 <span class="comment"></span>
<a name="l00196"></a>00196 <span class="comment">/** Retrieves the name of the last operation performed (for error reporting).</span>
<a name="l00197"></a>00197 <span class="comment"></span>
<a name="l00198"></a>00198 <span class="comment">    @return</span>
<a name="l00199"></a>00199 <span class="comment">    then name of the last operation: CONNECT, RECV, SEND</span>
<a name="l00200"></a>00200 <span class="comment"></span>
<a name="l00201"></a>00201 <span class="comment">    @memberof GenericClient</span>
<a name="l00202"></a>00202 <span class="comment">*/</span>
<a name="l00203"></a>00203 
<a name="l00204"></a><a class="code" href="structGenericClient.html#a2261f758ce32920f17d1dacdf6af4dab">00204</a> TC2API <a class="code" href="config_8h.html#a0f128c3e0c83721af0220c00554e9c4e" title="const char abbreviation">cchar</a>* <a class="code" href="structGenericClient.html#a2261f758ce32920f17d1dacdf6af4dab" title="Retrieves the name of the last operation performed (for error reporting).">genCli_operation</a>(<span class="keywordtype">void</span>)
<a name="l00205"></a>00205 {
<a name="l00206"></a>00206    <span class="keywordflow">return</span> genCli.<a class="code" href="structGenericClient.html#a6e11b2c98587b6368597419889eec82e" title="last operation performed / being performed">operation</a>;
<a name="l00207"></a>00207 }
<a name="l00208"></a>00208 
<a name="l00209"></a>00209 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00210"></a>00210 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00211"></a>00211 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00212"></a>00212 <span class="comment"></span>
<a name="l00213"></a>00213 <span class="comment">/** Prepares the generic client for the RECV command.</span>
<a name="l00214"></a>00214 <span class="comment"></span>
<a name="l00215"></a>00215 <span class="comment">    @memberof GenericClient</span>
<a name="l00216"></a>00216 <span class="comment">*/</span>
<a name="l00217"></a>00217 
<a name="l00218"></a><a class="code" href="structGenericClient.html#ada17c034d6ef0a119ce68df7dda02313">00218</a> TC2API <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#ada17c034d6ef0a119ce68df7dda02313" title="Prepares the generic client for the RECV command.">genCli_recv</a>(<span class="keywordtype">void</span>)
<a name="l00219"></a>00219 {
<a name="l00220"></a>00220    genCli.<a class="code" href="structGenericClient.html#a6e11b2c98587b6368597419889eec82e" title="last operation performed / being performed">operation</a> = <span class="stringliteral">&quot;RECV&quot;</span>;
<a name="l00221"></a>00221    genCli.<a class="code" href="structGenericClient.html#ad4f6a1fc845483db6ae7c6c47cca38ab" title="the command the client is running / will run">command</a> = <a class="code" href="GenericClient_8c.html#a9985998badc55ec7c8bfbfe477fd1da0">CLI_CMD_RECV</a>;
<a name="l00222"></a>00222 }
<a name="l00223"></a>00223 
<a name="l00224"></a>00224 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00225"></a>00225 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00226"></a>00226 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00227"></a>00227 <span class="comment"></span>
<a name="l00228"></a>00228 <span class="comment">/** Prepares the generic client for the SEND command.</span>
<a name="l00229"></a>00229 <span class="comment"></span>
<a name="l00230"></a>00230 <span class="comment">    @memberof GenericClient</span>
<a name="l00231"></a>00231 <span class="comment">*/</span>
<a name="l00232"></a>00232 
<a name="l00233"></a><a class="code" href="structGenericClient.html#a23da57feb26683c14ffedd0d649a22d1">00233</a> TC2API <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a23da57feb26683c14ffedd0d649a22d1" title="Prepares the generic client for the SEND command.">genCli_send</a>(<span class="keywordtype">void</span>)
<a name="l00234"></a>00234 {
<a name="l00235"></a>00235    genCli.<a class="code" href="structGenericClient.html#a6e11b2c98587b6368597419889eec82e" title="last operation performed / being performed">operation</a> = <span class="stringliteral">&quot;SEND&quot;</span>;
<a name="l00236"></a>00236    genCli.<a class="code" href="structGenericClient.html#ad4f6a1fc845483db6ae7c6c47cca38ab" title="the command the client is running / will run">command</a> = <a class="code" href="GenericClient_8c.html#a05de5aa507b1f813728a665849b535c4">CLI_CMD_SEND</a>;
<a name="l00237"></a>00237 }
<a name="l00238"></a>00238 
<a name="l00239"></a>00239 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00240"></a>00240 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00241"></a>00241 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00242"></a>00242 <span class="comment"></span>
<a name="l00243"></a>00243 <span class="comment">/** Configures the option for automatic retry when connecting to server.</span>
<a name="l00244"></a>00244 <span class="comment"></span>
<a name="l00245"></a>00245 <span class="comment">    @memberof GenericClient</span>
<a name="l00246"></a>00246 <span class="comment">*/</span>
<a name="l00247"></a>00247 
<a name="l00248"></a><a class="code" href="structGenericClient.html#aeebcd777911db64a067bbccf031cae98">00248</a> TC2API <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#aeebcd777911db64a067bbccf031cae98" title="Configures the option for automatic retry when connecting to server.">genCli_setRetryConnect</a>(<span class="keywordtype">bool</span> option)
<a name="l00249"></a>00249 {
<a name="l00250"></a>00250    genCli.<a class="code" href="structGenericClient.html#acf5d7b1e1b5c11c7f2bcfd6d90661882" title="keeps trying to connect, don&amp;#39;t return error">shouldRetryConnect</a> = option;
<a name="l00251"></a>00251 }
<a name="l00252"></a>00252 
<a name="l00253"></a>00253 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00254"></a>00254 <span class="comment">// PUBLIC INTERFACE</span>
<a name="l00255"></a>00255 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00256"></a>00256 <span class="comment"></span>
<a name="l00257"></a>00257 <span class="comment">/** Runs the generic client application and returns an event to the appilcation.</span>
<a name="l00258"></a>00258 <span class="comment"></span>
<a name="l00259"></a>00259 <span class="comment">    @return</span>
<a name="l00260"></a>00260 <span class="comment">    a pointer to a GenericClient instance.</span>
<a name="l00261"></a>00261 <span class="comment"></span>
<a name="l00262"></a>00262 <span class="comment">    @memberof GenericClient</span>
<a name="l00263"></a>00263 <span class="comment">*/</span>
<a name="l00264"></a>00264 
<a name="l00265"></a><a class="code" href="structGenericClient.html#a796987c44cef7aa163f189b827610fac">00265</a> TC2API <a class="code" href="config_8h.html#ab95f123a6c9bcfee6a343170ef8c5f69" title="unsigned short abbreviation">ushort</a> <a class="code" href="structGenericClient.html#a796987c44cef7aa163f189b827610fac" title="Runs the generic client application and returns an event to the appilcation.">genCli_waitEvent</a>(<span class="keywordtype">void</span>)
<a name="l00266"></a>00266 {
<a name="l00267"></a>00267    <a class="code" href="structGenericClient.html#a4340f5c90d1a2eaef8e10a9d68364192" title="Runs the generic client application.">run</a>();
<a name="l00268"></a>00268    <span class="keywordflow">return</span> genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a>;
<a name="l00269"></a>00269 }
<a name="l00270"></a>00270 
<a name="l00271"></a>00271 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00272"></a>00272 <span class="comment">// INTERNAL HELPER FUNCTIONS</span>
<a name="l00273"></a>00273 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00274"></a>00274 <span class="comment"></span>
<a name="l00275"></a>00275 <span class="comment">/** Runs the generic client application.</span>
<a name="l00276"></a>00276 <span class="comment"></span>
<a name="l00277"></a>00277 <span class="comment">    @private @memberof GenericClient</span>
<a name="l00278"></a>00278 <span class="comment">*/</span>
<a name="l00279"></a>00279 
<a name="l00280"></a><a class="code" href="structGenericClient.html#a4340f5c90d1a2eaef8e10a9d68364192">00280</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a4340f5c90d1a2eaef8e10a9d68364192" title="Runs the generic client application.">run</a>(<span class="keywordtype">void</span>)
<a name="l00281"></a>00281 {
<a name="l00282"></a>00282    <span class="keywordflow">switch</span> (genCli.<a class="code" href="structGenericClient.html#af45befd1323ff47fcb9e18fad9384c7b" title="tells if the client is connected to the server">state</a>)
<a name="l00283"></a>00283    {
<a name="l00284"></a>00284       <span class="keywordflow">case</span> <a class="code" href="GenericClient_8c.html#ac00efc3631be622ab43ed76ea228118e">CLI_ST_NOT_CONNECTED</a>:
<a name="l00285"></a>00285          <a class="code" href="structGenericClient.html#a7d9180f767824681e9aa322a9849a0c6" title="Runs the generic client application in the state NOT_CONNECTED.">runNotConnected</a>();
<a name="l00286"></a>00286          <span class="keywordflow">break</span>;
<a name="l00287"></a>00287 
<a name="l00288"></a>00288       <span class="keywordflow">case</span> <a class="code" href="GenericClient_8c.html#a68df74ac98272c623c18ffae97730206">CLI_ST_CONNECTED_IDLE</a>:
<a name="l00289"></a>00289          <a class="code" href="structGenericClient.html#a1e5100adbedba9ccc0696e7b0d9889c4" title="Runs the generic client application in the state CONNECTED_IDLE.">runConnectedIdle</a>();
<a name="l00290"></a>00290          <span class="keywordflow">break</span>;
<a name="l00291"></a>00291 
<a name="l00292"></a>00292       <span class="keywordflow">default</span>: <span class="comment">// ???</span>
<a name="l00293"></a>00293          abort();
<a name="l00294"></a>00294          <span class="keywordflow">break</span>;
<a name="l00295"></a>00295    }
<a name="l00296"></a>00296 }
<a name="l00297"></a>00297 
<a name="l00298"></a>00298 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00299"></a>00299 <span class="comment"></span>
<a name="l00300"></a>00300 <span class="comment">/** Runs the generic client application with command CLOSE.</span>
<a name="l00301"></a>00301 <span class="comment"></span>
<a name="l00302"></a>00302 <span class="comment">    @private @memberof GenericClient</span>
<a name="l00303"></a>00303 <span class="comment">*/</span>
<a name="l00304"></a>00304 
<a name="l00305"></a><a class="code" href="structGenericClient.html#a33c31b64427ad37ca1148b3060df7435">00305</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a33c31b64427ad37ca1148b3060df7435" title="Runs the generic client application with command CLOSE.">runClose</a>(<span class="keywordtype">void</span>)
<a name="l00306"></a>00306 {
<a name="l00307"></a>00307    <a class="code" href="classClient.html#ac1b8a1bcc592b90be708f53c6f3379c8" title="Closes the connection.">client_closeConnection</a>();
<a name="l00308"></a>00308 
<a name="l00309"></a>00309    genCli.<a class="code" href="structGenericClient.html#af45befd1323ff47fcb9e18fad9384c7b" title="tells if the client is connected to the server">state</a> = <a class="code" href="GenericClient_8c.html#ac00efc3631be622ab43ed76ea228118e">CLI_ST_NOT_CONNECTED</a>;
<a name="l00310"></a>00310 
<a name="l00311"></a>00311    genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bba727593ffcb45fcdd349d6c239b73c170">CLI_EVT_CONNECTION_DESTROYED</a>;
<a name="l00312"></a>00312    genCli.<a class="code" href="structGenericClient.html#aed6fb49c4f4164f70e7642376edc059e" title="error generated by the execution of the last command">error</a> = 0;
<a name="l00313"></a>00313    genCli.<a class="code" href="structGenericClient.html#ae384ea78c14528e3253a34d79aacd23e" title="type of the last error">errorType</a> = <a class="code" href="GenericClient_8h.html#a2fe51197a2b46d0a7f33c23780a69a22a94bf00832fbc1517dbc939c285e87d16">CLI_ERR_FORCED_CLOSE</a>;
<a name="l00314"></a>00314 }
<a name="l00315"></a>00315 
<a name="l00316"></a>00316 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00317"></a>00317 <span class="comment"></span>
<a name="l00318"></a>00318 <span class="comment">/** Runs the generic client application with command CONNECT.</span>
<a name="l00319"></a>00319 <span class="comment"></span>
<a name="l00320"></a>00320 <span class="comment">    @private @memberof GenericClient</span>
<a name="l00321"></a>00321 <span class="comment">*/</span>
<a name="l00322"></a>00322 
<a name="l00323"></a><a class="code" href="structGenericClient.html#a6c505da335d1912f2a01428bcf24b9fd">00323</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a6c505da335d1912f2a01428bcf24b9fd" title="Runs the generic client application with command CONNECT.">runConnect</a>(<span class="keywordtype">void</span>)
<a name="l00324"></a>00324 {
<a name="l00325"></a>00325    <span class="keywordflow">for</span> (;;)
<a name="l00326"></a>00326    {
<a name="l00327"></a>00327       <span class="keywordflow">if</span> (<a class="code" href="classClient.html#ab47c0c9a394979f9a438f0f57598b53c" title="Tries to connect with the server.">client_connect</a>())
<a name="l00328"></a>00328       {
<a name="l00329"></a>00329          genCli.<a class="code" href="structGenericClient.html#af45befd1323ff47fcb9e18fad9384c7b" title="tells if the client is connected to the server">state</a> = <a class="code" href="GenericClient_8c.html#a68df74ac98272c623c18ffae97730206">CLI_ST_CONNECTED_IDLE</a>;
<a name="l00330"></a>00330          genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bba6e08f7a76bef434b2172b6fb7346e7cc">CLI_EVT_CONNECTION_CREATED</a>;
<a name="l00331"></a>00331          <span class="keywordflow">return</span>;
<a name="l00332"></a>00332       }
<a name="l00333"></a>00333 
<a name="l00334"></a>00334       <span class="keywordflow">if</span> (!genCli.<a class="code" href="structGenericClient.html#acf5d7b1e1b5c11c7f2bcfd6d90661882" title="keeps trying to connect, don&amp;#39;t return error">shouldRetryConnect</a>)
<a name="l00335"></a>00335       {
<a name="l00336"></a>00336          genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bbaabb344ce999356eb156548c698e2fe5e">CLI_EVT_CONNECT_ERROR</a>;
<a name="l00337"></a>00337          <span class="keywordflow">return</span>;
<a name="l00338"></a>00338       }
<a name="l00339"></a>00339 
<a name="l00340"></a>00340       <a class="code" href="Client_8h.html#af4dc9846f2c4ccc993e48cbe6bba7ed1" title="common sleep function">client_sleep</a>(1); <span class="comment">// try again, but sleep 1 second, to avoid spinning</span>
<a name="l00341"></a>00341    } <span class="comment">// for</span>
<a name="l00342"></a>00342 }
<a name="l00343"></a>00343 
<a name="l00344"></a>00344 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00345"></a>00345 <span class="comment"></span>
<a name="l00346"></a>00346 <span class="comment">/** Runs the generic client application in the state CONNECTED_IDLE.</span>
<a name="l00347"></a>00347 <span class="comment"></span>
<a name="l00348"></a>00348 <span class="comment">    @private @memberof GenericClient</span>
<a name="l00349"></a>00349 <span class="comment">*/</span>
<a name="l00350"></a>00350 
<a name="l00351"></a><a class="code" href="structGenericClient.html#a1e5100adbedba9ccc0696e7b0d9889c4">00351</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a1e5100adbedba9ccc0696e7b0d9889c4" title="Runs the generic client application in the state CONNECTED_IDLE.">runConnectedIdle</a>(<span class="keywordtype">void</span>)
<a name="l00352"></a>00352 {
<a name="l00353"></a>00353    <span class="keywordflow">switch</span> (genCli.<a class="code" href="structGenericClient.html#ad4f6a1fc845483db6ae7c6c47cca38ab" title="the command the client is running / will run">command</a>)
<a name="l00354"></a>00354    {
<a name="l00355"></a>00355       <span class="keywordflow">case</span> <a class="code" href="GenericClient_8c.html#a05de5aa507b1f813728a665849b535c4">CLI_CMD_SEND</a>:
<a name="l00356"></a>00356          <a class="code" href="structGenericClient.html#af258464e17eb1db398e4cc6704556f61" title="Runs the generic client application with command SEND.">runSendMessage</a>();
<a name="l00357"></a>00357          <span class="keywordflow">break</span>;
<a name="l00358"></a>00358 
<a name="l00359"></a>00359       <span class="keywordflow">case</span> <a class="code" href="GenericClient_8c.html#a9985998badc55ec7c8bfbfe477fd1da0">CLI_CMD_RECV</a>:
<a name="l00360"></a>00360          <a class="code" href="structGenericClient.html#a241639bfd3e870b785eb67b938b6ade4" title="Runs the generic client application with command RECV.">runRecvMessage</a>();
<a name="l00361"></a>00361          <span class="keywordflow">break</span>;
<a name="l00362"></a>00362 
<a name="l00363"></a>00363       <span class="keywordflow">case</span> <a class="code" href="GenericClient_8c.html#aaa407bd9d7706fbe7be3b41aa64e77b3">CLI_CMD_CLOSE</a>:
<a name="l00364"></a>00364          <a class="code" href="structGenericClient.html#a33c31b64427ad37ca1148b3060df7435" title="Runs the generic client application with command CLOSE.">runClose</a>();
<a name="l00365"></a>00365          <span class="keywordflow">break</span>;
<a name="l00366"></a>00366 
<a name="l00367"></a>00367       <span class="keywordflow">default</span>:
<a name="l00368"></a>00368          genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bbab4e272b5a5358394f2a6100c42a0ec7d">CLI_EVT_INVALID_COMMAND</a>;
<a name="l00369"></a>00369          <span class="keywordflow">break</span>;
<a name="l00370"></a>00370    } <span class="comment">// switch</span>
<a name="l00371"></a>00371 }
<a name="l00372"></a>00372 
<a name="l00373"></a>00373 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00374"></a>00374 <span class="comment"></span>
<a name="l00375"></a>00375 <span class="comment">/** Runs the generic client application in the state NOT_CONNECTED.</span>
<a name="l00376"></a>00376 <span class="comment"></span>
<a name="l00377"></a>00377 <span class="comment">    @private @memberof GenericClient</span>
<a name="l00378"></a>00378 <span class="comment">*/</span>
<a name="l00379"></a>00379 
<a name="l00380"></a><a class="code" href="structGenericClient.html#a7d9180f767824681e9aa322a9849a0c6">00380</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a7d9180f767824681e9aa322a9849a0c6" title="Runs the generic client application in the state NOT_CONNECTED.">runNotConnected</a>(<span class="keywordtype">void</span>)
<a name="l00381"></a>00381 {
<a name="l00382"></a>00382    <span class="keywordflow">if</span> (genCli.<a class="code" href="structGenericClient.html#ad4f6a1fc845483db6ae7c6c47cca38ab" title="the command the client is running / will run">command</a> != <a class="code" href="GenericClient_8c.html#a8bbcb5610f038bff6686f3b731c69a01">CLI_CMD_CONNECT</a>)
<a name="l00383"></a>00383    {
<a name="l00384"></a>00384       genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bbab4e272b5a5358394f2a6100c42a0ec7d">CLI_EVT_INVALID_COMMAND</a>;
<a name="l00385"></a>00385       <span class="keywordflow">return</span>;
<a name="l00386"></a>00386    }
<a name="l00387"></a>00387 
<a name="l00388"></a>00388    <a class="code" href="structGenericClient.html#a6c505da335d1912f2a01428bcf24b9fd" title="Runs the generic client application with command CONNECT.">runConnect</a>();
<a name="l00389"></a>00389 }
<a name="l00390"></a>00390 
<a name="l00391"></a>00391 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00392"></a>00392 <span class="comment"></span>
<a name="l00393"></a>00393 <span class="comment">/** Runs the generic client application with command RECV.</span>
<a name="l00394"></a>00394 <span class="comment"></span>
<a name="l00395"></a>00395 <span class="comment">    @private @memberof GenericClient</span>
<a name="l00396"></a>00396 <span class="comment">*/</span>
<a name="l00397"></a>00397 
<a name="l00398"></a><a class="code" href="structGenericClient.html#a241639bfd3e870b785eb67b938b6ade4">00398</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#a241639bfd3e870b785eb67b938b6ade4" title="Runs the generic client application with command RECV.">runRecvMessage</a>(<span class="keywordtype">void</span>)
<a name="l00399"></a>00399 {
<a name="l00400"></a>00400    <span class="keywordflow">if</span> (<a class="code" href="classClient.html#a21671dd01411a1478cc6d2ad4eeba468" title="Receives a message from the server.">client_recvMessage</a>(genCli.<a class="code" href="structGenericClient.html#a2ad33e597e0af0e8602bc89ee0d08a5d" title="communications buffer">message</a>))
<a name="l00401"></a>00401       genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bbaa2463a1940371976699eec52b492c430">CLI_EVT_RECV_COMPLETE</a>;
<a name="l00402"></a>00402 
<a name="l00403"></a>00403    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classClient.html#abd9d963db56bc1578cb78c5db866c786" title="Reports if there has been a timeout after a receive operations ends in error.">client_timeout</a>())
<a name="l00404"></a>00404       genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bbab397a1ba4584b4b35355eceb5f2c4b23">CLI_EVT_RECV_TIMEOUT</a>;
<a name="l00405"></a>00405 
<a name="l00406"></a>00406    <span class="keywordflow">else</span>
<a name="l00407"></a>00407    {
<a name="l00408"></a>00408       <span class="comment">// the connection has been closed</span>
<a name="l00409"></a>00409       genCli.<a class="code" href="structGenericClient.html#af45befd1323ff47fcb9e18fad9384c7b" title="tells if the client is connected to the server">state</a> = <a class="code" href="GenericClient_8c.html#ac00efc3631be622ab43ed76ea228118e">CLI_ST_NOT_CONNECTED</a>;
<a name="l00410"></a>00410       genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bba727593ffcb45fcdd349d6c239b73c170">CLI_EVT_CONNECTION_DESTROYED</a>;
<a name="l00411"></a>00411       genCli.<a class="code" href="structGenericClient.html#aed6fb49c4f4164f70e7642376edc059e" title="error generated by the execution of the last command">error</a> = <a class="code" href="classClient.html#a7b91cbaab1c8ebdaa38caed1f50b050a" title="Retrieves the value of the error that occurred immediately after a socket operation...">client_error</a>();
<a name="l00412"></a>00412       genCli.<a class="code" href="structGenericClient.html#ae384ea78c14528e3253a34d79aacd23e" title="type of the last error">errorType</a> = <a class="code" href="classClient.html#a800b9dc4b73f58fa14a0f124f143f2d5" title="Retrieves the type of the error that occurred immediately after a socket operation...">client_errorType</a>();
<a name="l00413"></a>00413    }
<a name="l00414"></a>00414 }
<a name="l00415"></a>00415 
<a name="l00416"></a>00416 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00417"></a>00417 <span class="comment"></span>
<a name="l00418"></a>00418 <span class="comment">/** Runs the generic client application with command SEND.</span>
<a name="l00419"></a>00419 <span class="comment"></span>
<a name="l00420"></a>00420 <span class="comment">    @private @memberof GenericClient</span>
<a name="l00421"></a>00421 <span class="comment">*/</span>
<a name="l00422"></a>00422 
<a name="l00423"></a><a class="code" href="structGenericClient.html#af258464e17eb1db398e4cc6704556f61">00423</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structGenericClient.html#af258464e17eb1db398e4cc6704556f61" title="Runs the generic client application with command SEND.">runSendMessage</a>(<span class="keywordtype">void</span>)
<a name="l00424"></a>00424 {
<a name="l00425"></a>00425    <span class="keywordflow">if</span> (<a class="code" href="classClient.html#ad12e0cdab8fa5ba7aa64865ec0b23b38" title="Tries to send a message to the server.">client_sendMessage</a>(genCli.<a class="code" href="structGenericClient.html#a2ad33e597e0af0e8602bc89ee0d08a5d" title="communications buffer">message</a>))
<a name="l00426"></a>00426    {
<a name="l00427"></a>00427       genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bba1b7016c33830495cb9d1564bbab8b95d">CLI_EVT_SEND_COMPLETE</a>;
<a name="l00428"></a>00428    }
<a name="l00429"></a>00429    <span class="keywordflow">else</span>
<a name="l00430"></a>00430    {
<a name="l00431"></a>00431       <span class="comment">// the connection has been closed</span>
<a name="l00432"></a>00432       genCli.<a class="code" href="structGenericClient.html#af45befd1323ff47fcb9e18fad9384c7b" title="tells if the client is connected to the server">state</a> = <a class="code" href="GenericClient_8c.html#ac00efc3631be622ab43ed76ea228118e">CLI_ST_NOT_CONNECTED</a>;
<a name="l00433"></a>00433       genCli.<a class="code" href="structGenericClient.html#a019e524bc40e556eccd8ae413d3e0293" title="event that will be passed to the application code">event</a> = <a class="code" href="GenericClient_8h.html#a0be5647fd0926a22950d6106991586bba727593ffcb45fcdd349d6c239b73c170">CLI_EVT_CONNECTION_DESTROYED</a>;
<a name="l00434"></a>00434       genCli.<a class="code" href="structGenericClient.html#aed6fb49c4f4164f70e7642376edc059e" title="error generated by the execution of the last command">error</a> = <a class="code" href="classClient.html#a7b91cbaab1c8ebdaa38caed1f50b050a" title="Retrieves the value of the error that occurred immediately after a socket operation...">client_error</a>();
<a name="l00435"></a>00435       genCli.<a class="code" href="structGenericClient.html#ae384ea78c14528e3253a34d79aacd23e" title="type of the last error">errorType</a> = <a class="code" href="classClient.html#a800b9dc4b73f58fa14a0f124f143f2d5" title="Retrieves the type of the error that occurred immediately after a socket operation...">client_errorType</a>();
<a name="l00436"></a>00436    }
<a name="l00437"></a>00437 }
<a name="l00438"></a>00438 
<a name="l00439"></a>00439 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00440"></a>00440 <span class="comment">// the end</span>
</pre></div></div>
<hr class="footer"/><address style="text-align: right;"><small>Generated on Sat May 8 16:16:36 2010 for TcpClient2 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
zvx
Software Developer
Brazil Brazil
I'm a long-time software developer living in Brazil.

I've been developing software for retail and banking automation in C/C++ for many years now. In the old days I even did some COBOL programming, and some assembly for the 8080.

My experience ranges from low level software such as interface code for serial devices for DOS and Windows (bar code scanners, printers, cash dispensers, etc) and goes to writing end user applications for POS terminals and bank ATMs. In between I've done a great deal of TCP/IP programming using the basic Berkeley sockets interface, which is my main interest nowadays.

Comments and Discussions