examples/S60CppExamples/ClientServerAsync/doc/timesession_8cpp-source.html

00001 "-//W3C//DTD HTML 4.0 Transitional//EN">
00002 
00003 
00004 
00005 "Content-Type" content="text/html;charset=iso-8859-1">
00006 timesession.cpp Source File
00007 "style.css" rel="stylesheet" type="text/css">
00008 
00009 
00010 "0" width="100%" height="8" bgcolor="#eeeeee">
00011 
"100%" height="1">"2" color="#000000" face="Arial, Helvetica, sans-serif"> 00012 S60 5th Edition SDK
Example Applications Guide
00013 00014
class="tabs"> 00015
00020

timesession.cpp

class="fragment">
class="fragment">"l00001">00001 class="comment">/*
00021 00002 * ==============================================================================
00022 00003 *  Name        : timesession.cpp
00023 00004 *  Part of     : CSAsync
00024 00005 *  Interface   :
00025 00006 *  Description :
00026 00007 *  Version     :
00027 00008 *
00028 00009 *  Copyright (c) 2004-2006 Nokia Corporation.
00029 00010 *  This material, including documentation and any related
00030 00011 *  computer programs, is protected by copyright controlled by
00031 00012 *  Nokia Corporation.
00032 00013 * ==============================================================================
00033 00014 */
00034 "l00015">00015 
00035 "l00016">00016 
00036 "l00017">00017 class="comment">// INCLUDE FILES
00037 "l00018">00018 class="preprocessor">#include <e32svr.h>
00038 "l00019">00019 
00039 "l00020">00020 class="preprocessor">#include "TimeSession.h"
00040 "l00021">00021 class="preprocessor">#include "ClientServerCommon.h"
00041 "l00022">00022 class="preprocessor">#include "TimeServer.h"
00042 "l00023">00023 
00043 "l00024">00024 class="comment">// ========================= MEMBER FUNCTIONS ==================================
00044 "l00025">00025 
00045 "l00026">00026 class="comment">// -----------------------------------------------------------------------------
00046 "l00027">00027 class="comment">// CTimeServerSession::NewL()
00047 "l00028">00028 class="comment">// Two-phased constructor.
00048 "l00029">00029 class="comment">// -----------------------------------------------------------------------------
00049 "l00030">00030 class="comment">//
00050 "l00031">class="code" href="class_c_time_server_session.html#73d44aed371951fd548af4329b779411">00031 class="code" href="class_c_time_server_session.html">CTimeServerSession* class="code" href="class_c_time_server_session.html#73d44aed371951fd548af4329b779411">CTimeServerSession::NewL( class="code" href="class_c_time_server.html">CTimeServer& aServer )
00051 "l00032">00032     {
00052 "l00033">00033     class="code" href="class_c_time_server_session.html">CTimeServerSession* class="keyword">self = class="code" href="class_c_time_server_session.html#e1d8bbb0d9472f94ae559c6cb4e59e74">CTimeServerSession::NewLC( aServer );
00053 "l00034">00034     CleanupStack::Pop( class="keyword">self );
00054 "l00035">00035     class="keywordflow">return class="keyword">self;
00055 "l00036">00036     }
00056 "l00037">00037 
00057 "l00038">00038 class="comment">// -----------------------------------------------------------------------------
00058 "l00039">00039 class="comment">// CTimeServerSession::NewLC()
00059 "l00040">00040 class="comment">// Two-phased constructor.
00060 "l00041">00041 class="comment">// -----------------------------------------------------------------------------
00061 "l00042">00042 class="comment">//
00062 "l00043">class="code" href="class_c_time_server_session.html#e1d8bbb0d9472f94ae559c6cb4e59e74">00043 class="code" href="class_c_time_server_session.html">CTimeServerSession* class="code" href="class_c_time_server_session.html#e1d8bbb0d9472f94ae559c6cb4e59e74">CTimeServerSession::NewLC( class="code" href="class_c_time_server.html">CTimeServer& aServer )
00063 "l00044">00044     {
00064 "l00045">00045     class="code" href="class_c_time_server_session.html">CTimeServerSession* class="keyword">self = class="keyword">new ( ELeave ) class="code" href="class_c_time_server_session.html#88d810fed35057dcca6673d50400186c">CTimeServerSession( aServer );
00065 "l00046">00046     CleanupStack::PushL( class="keyword">self );
00066 "l00047">00047     class="keyword">self->ConstructL();
00067 "l00048">00048     class="keywordflow">return class="keyword">self;
00068 "l00049">00049     }
00069 "l00050">00050 
00070 "l00051">00051 class="comment">// -----------------------------------------------------------------------------
00071 "l00052">00052 class="comment">// CTimeServerSession::ConstructL()
00072 "l00053">00053 class="comment">// Symbian 2nd phase constructor can leave.
00073 "l00054">00054 class="comment">// -----------------------------------------------------------------------------
00074 "l00055">00055 class="comment">//
00075 "l00056">class="code" href="class_c_time_server_session.html#9ce34ba0b947863222da3c63d0481044">00056 class="keywordtype">void class="code" href="class_c_time_server_session.html#9ce34ba0b947863222da3c63d0481044">CTimeServerSession::ConstructL()
00076 "l00057">00057     {
00077 "l00058">00058     class="code" href="class_c_time_server_session.html#2fd325e8f3ad0cd0f67a39cca15fa423">iServer.class="code" href="class_c_time_server.html#a3afdfcfbf3d8aa45b7f96b5a1c7119e">IncrementSessions();
00078 "l00059">00059     }
00079 "l00060">00060 
00080 "l00061">00061 class="comment">// -----------------------------------------------------------------------------
00081 "l00062">00062 class="comment">// CTimeServerSession::CTimeServerSession()
00082 "l00063">00063 class="comment">// C++ default constructor can NOT contain any code, that might leave.
00083 "l00064">00064 class="comment">// -----------------------------------------------------------------------------
00084 "l00065">00065 class="comment">//
00085 "l00066">class="code" href="class_c_time_server_session.html#88d810fed35057dcca6673d50400186c">00066 class="code" href="class_c_time_server_session.html#88d810fed35057dcca6673d50400186c">CTimeServerSession::CTimeServerSession(  class="code" href="class_c_time_server.html">CTimeServer& aServer )
00086 "l00067">00067 : iServer( aServer )
00087 "l00068">00068     {
00088 "l00069">00069     class="comment">// Implementation not required
00089 "l00070">00070     }
00090 "l00071">00071 
00091 "l00072">00072 class="comment">// -----------------------------------------------------------------------------
00092 "l00073">00073 class="comment">// CTimeServerSession::~CTimeServerSession()
00093 "l00074">00074 class="comment">// Destructor.
00094 "l00075">00075 class="comment">// -----------------------------------------------------------------------------
00095 "l00076">00076 class="comment">//
00096 "l00077">class="code" href="class_c_time_server_session.html#efc8537cb8d65ded65903587ad44c2e0">00077 class="code" href="class_c_time_server_session.html#efc8537cb8d65ded65903587ad44c2e0">CTimeServerSession::~CTimeServerSession()
00097 "l00078">00078     {
00098 "l00079">00079     class="code" href="class_c_time_server_session.html#2fd325e8f3ad0cd0f67a39cca15fa423">iServer.class="code" href="class_c_time_server.html#982e65810ad50ce20759fd26fad488dc">DecrementSessions();
00099 "l00080">00080     }
00100 "l00081">00081 
00101 "l00082">00082 class="comment">// -----------------------------------------------------------------------------
00102 "l00083">00083 class="comment">// CTimeServerSession::ServiceL()
00103 "l00084">00084 class="comment">// Service request from client.
00104 "l00085">00085 class="comment">// -----------------------------------------------------------------------------
00105 "l00086">00086 class="comment">//
00106 "l00087">class="code" href="class_c_time_server_session.html#75c0a1442736b57144c9ad541d87d370">00087 class="keywordtype">void class="code" href="class_c_time_server_session.html#75c0a1442736b57144c9ad541d87d370">CTimeServerSession::ServiceL( class="keyword">const RMessage2& aMessage )
00107 "l00088">00088     {
00108 "l00089">00089     class="keywordflow">switch ( aMessage.Function() )
00109 "l00090">00090         {
00110 "l00091">00091         class="keywordflow">case ETimeServRequestTime:
00111 "l00092">00092             class="code" href="class_c_time_server_session.html#8fac529732093d7c4331fb0e03da87f1">RequestTimeL( aMessage );
00112 "l00093">00093             class="keywordflow">break;
00113 "l00094">00094 
00114 "l00095">00095         class="keywordflow">case ETimeServCancelRequestTime:
00115 "l00096">00096             class="keywordflow">if ( class="code" href="class_c_time_server_session.html#6a31e2b3666880d5daf8f63641125e71">iWaitingForTick )
00116 "l00097">00097                 {
00117 "l00098">00098                 class="code" href="class_c_time_server_session.html#83107f9dbd3370ed4e809e8cc7b35380">iMessage.Complete( KErrCancel );
00118 "l00099">00099                 class="code" href="class_c_time_server_session.html#6a31e2b3666880d5daf8f63641125e71">iWaitingForTick = EFalse;
00119 "l00100">00100                 }
00120 "l00101">00101             aMessage.Complete( KErrNone );
00121 "l00102">00102             class="keywordflow">break;
00122 "l00103">00103 
00123 "l00104">00104         class="keywordflow">default:
00124 "l00105">00105             class="code" href="class_c_time_server_session.html#fc9ec0d1642cb12692ca61f4a163e601">PanicClient( aMessage, EBadRequest );
00125 "l00106">00106         }
00126 "l00107">00107     }
00127 "l00108">00108 
00128 "l00109">00109 class="comment">// -----------------------------------------------------------------------------
00129 "l00110">00110 class="comment">// CTimeServerSession::RequestTimeL()
00130 "l00111">00111 class="comment">// Called as a result of the client requesting the time.
00131 "l00112">00112 class="comment">// -----------------------------------------------------------------------------
00132 "l00113">00113 class="comment">//
00133 "l00114">class="code" href="class_c_time_server_session.html#8fac529732093d7c4331fb0e03da87f1">00114 class="keywordtype">void class="code" href="class_c_time_server_session.html#8fac529732093d7c4331fb0e03da87f1">CTimeServerSession::RequestTimeL( class="keyword">const RMessage2& aMessage )
00134 "l00115">00115     {
00135 "l00116">00116     class="keywordflow">if ( class="code" href="class_c_time_server_session.html#6a31e2b3666880d5daf8f63641125e71">iWaitingForTick )
00136 "l00117">00117         {
00137 "l00118">00118         class="comment">// We're already busy
00138 "l00119">00119         class="code" href="class_c_time_server_session.html#fc9ec0d1642cb12692ca61f4a163e601">PanicClient( aMessage, EReqAlreadyPending );
00139 "l00120">00120         }
00140 "l00121">00121     class="keywordflow">else
00141 "l00122">00122         {
00142 "l00123">00123         class="comment">// Keep a copy of message - for later use
00143 "l00124">00124         class="code" href="class_c_time_server_session.html#83107f9dbd3370ed4e809e8cc7b35380">iMessage = aMessage ;
00144 "l00125">00125 
00145 "l00126">00126         class="comment">// Start the work performed by the server
00146 "l00127">00127         class="comment">// (just a wait for new second in this case)
00147 "l00128">00128         class="code" href="class_c_time_server_session.html#2fd325e8f3ad0cd0f67a39cca15fa423">iServer.class="code" href="class_c_time_server.html#a8205372b5d379fa4b803e98b0726473">WaitForTickL();
00148 "l00129">00129         class="code" href="class_c_time_server_session.html#6a31e2b3666880d5daf8f63641125e71">iWaitingForTick = ETrue;
00149 "l00130">00130         }
00150 "l00131">00131     }
00151 "l00132">00132 
00152 "l00133">00133 class="comment">// -----------------------------------------------------------------------------
00153 "l00134">00134 class="comment">// CTimeServerSession::SendTimeToClient()
00154 "l00135">00135 class="comment">// Sends current time back to requesting client.
00155 "l00136">00136 class="comment">// -----------------------------------------------------------------------------
00156 "l00137">00137 class="comment">//
00157 "l00138">class="code" href="class_c_time_server_session.html#ecff8e289d914777ae0c503db937cf33">00138 class="keywordtype">void class="code" href="class_c_time_server_session.html#ecff8e289d914777ae0c503db937cf33">CTimeServerSession::SendTimeToClient()
00158 "l00139">00139     {
00159 "l00140">00140     class="keywordflow">if ( class="code" href="class_c_time_server_session.html#6a31e2b3666880d5daf8f63641125e71">iWaitingForTick )
00160 "l00141">00141         {
00161 "l00142">00142         class="code" href="class_c_time_server_session.html#6a31e2b3666880d5daf8f63641125e71">iWaitingForTick = EFalse;
00162 "l00143">00143 
00163 "l00144">00144         class="comment">// Get current time to return to client
00164 "l00145">00145         TTime time;
00165 "l00146">00146         time.HomeTime();
00166 "l00147">00147 
00167 "l00148">00148         class="comment">// Create a descriptor which points to the 'time' structure
00168 "l00149">00149         TPtr8 ptr( reinterpret_cast<TUint8*>( &time ), class="keyword">sizeof( time ),
00169 "l00150">00150                    class="keyword">sizeof( time ) );
00170 "l00151">00151 
00171 "l00152">00152         class="comment">// Write the 'time' data back to the client        
00172 "l00153">00153         TRAPD( res, class="code" href="class_c_time_server_session.html#83107f9dbd3370ed4e809e8cc7b35380">iMessage.WriteL( 0, ptr, 0 ) );
00173 "l00154">00154         
00174 "l00155">00155         class="keywordflow">if ( res != KErrNone )
00175 "l00156">00156             {
00176 "l00157">00157             class="code" href="class_c_time_server_session.html#fc9ec0d1642cb12692ca61f4a163e601">PanicClient( class="code" href="class_c_time_server_session.html#83107f9dbd3370ed4e809e8cc7b35380">iMessage, EBadDescriptor );
00177 "l00158">00158             }
00178 "l00159">00159         
00179 "l00160">00160         class="code" href="class_c_time_server_session.html#83107f9dbd3370ed4e809e8cc7b35380">iMessage.Complete( ETimeServRequestTimeComplete );
00180 "l00161">00161         }
00181 "l00162">00162     }
00182 "l00163">00163 
00183 "l00164">00164 class="comment">// -----------------------------------------------------------------------------
00184 "l00165">00165 class="comment">// CTimeServerSession::PanicClient()
00185 "l00166">00166 class="comment">// Causes the client thread to panic.
00186 "l00167">00167 class="comment">// -----------------------------------------------------------------------------
00187 "l00168">00168 class="comment">//
00188 "l00169">class="code" href="class_c_time_server_session.html#fc9ec0d1642cb12692ca61f4a163e601">00169 class="keywordtype">void class="code" href="class_c_time_server_session.html#fc9ec0d1642cb12692ca61f4a163e601">CTimeServerSession::PanicClient( class="keyword">const RMessagePtr2& aMessage, 
00189 "l00170">00170                                       TInt aPanic )class="keyword"> const
00190 "l00171">00171 class="keyword">    {
00191 "l00172">00172     aMessage.Panic( KCSAsyncServer, aPanic ); class="comment">// Note: this panics the client thread,
00192 "l00173">00173                                      class="comment">// not server
00193 "l00174">00174     }
00194 "l00175">00175 
00195 "l00176">00176 class="comment">// End of File
00196 

00197 00198 00199 style="x-cell-content-align: top;00200 width: 100%;00201 border-spacing: 0px;00202 border-spacing: 0px;"00203 cellspacing=0 00204 width=100%> 00205 "width: 50%;"> 00206 "width: 50%;"> 00207 00208 "x-cell-content-align: top;"00209 valign=top> 00210 00219 00241
"width: 50%; 00211 padding-right: 10px; 00212 padding-left: 10px; 00213 border-right-style: None; 00214 border-left-style: None; 00215 border-top-style: None; 00216 border-bottom-style: None;" 00217 width=50%> 00218

"font-family: Arial;">"font-size: smaller;"> Nokia 2009

"width: 50%; 00220 padding-right: 10px; 00221 padding-left: 10px; 00222 border-top-style: None; 00223 border-bottom-style: None; 00224 border-right-style: None;" 00225 width=50%> 00226

"text-align: right; margin-right: -4px;" 00227 align=right>"font-weight: bold;">"#Top" 00228 title="Back to top">00229 src="top.gif" 00230 x-maintain-ratio=TRUE 00231 alt="Back to top" 00232 style="border: none; 00233 width: 18px; 00234 height: 15px; 00235 float: none; 00236 border-style: none; 00237 border-style: none;" 00238 width=18 00239 height=15 00240 border=0>

00242 00243 00244

Generated by  doxygen 1.6.2