00001 "-//W3C//DTD HTML 4.0 Transitional//EN"> 00002 00003 00004 00005 "Content-Type" content="text/html;charset=iso-8859-1"> 00006timesession.cpp Source File 00007 "style.css" rel="stylesheet" type="text/css"> 00008 00009 00010
"100%" height="1">"2" color="#000000" face="Arial, Helvetica, sans-serif">
00012 S60 5th Edition SDK Example Applications Guide |
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
"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 |
00219 "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"> |