00001 "-//W3C//DTD HTML 4.0 Transitional//EN"> 00002 00003 00004 00005 "Content-Type" content="text/html;charset=iso-8859-1"> 00006timeserversession.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 : timeserversession.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 <e32math.h> 00038 "l00019">00019 00039 "l00020">00020 class="preprocessor">#include "ClientServerCommon.h" 00040 "l00021">00021 class="preprocessor">#include "TimeServerSession.h" 00041 "l00022">00022 00042 "l00023">00023 class="comment">// FUNCTION PROTOTYPES 00043 "l00024">00024 class="keyword">static TInt StartServer(); 00044 "l00025">00025 class="keyword">static TInt CreateServerProcess(); 00045 "l00026">00026 00046 "l00027">00027 class="comment">// ========================= MEMBER FUNCTIONS ================================== 00047 "l00028">00028 00048 "l00029">00029 class="comment">// ----------------------------------------------------------------------------- 00049 "l00030">00030 class="comment">// RTimeServerSession::RTimeServerSession() 00050 "l00031">00031 class="comment">// C++ default constructor can NOT contain any code, that might leave. 00051 "l00032">00032 class="comment">// ----------------------------------------------------------------------------- 00052 "l00033">00033 class="comment">// 00053 "l00034">class="code" href="class_r_time_server_session.html#d8a4b16d15242f1f1a1e7e2585bf81a6">00034 class="code" href="class_r_time_server_session.html#d8a4b16d15242f1f1a1e7e2585bf81a6">RTimeServerSession::RTimeServerSession() 00054 "l00035">00035 : RSessionBase(), iTimeBuffer( NULL, 0, 0 ) 00055 "l00036">00036 { 00056 "l00037">00037 class="comment">// No implementation required 00057 "l00038">00038 } 00058 "l00039">00039 00059 "l00040">00040 class="comment">// ----------------------------------------------------------------------------- 00060 "l00041">00041 class="comment">// RTimeServerSession::Connect() 00061 "l00042">00042 class="comment">// Connects to the server and create a session. 00062 "l00043">00043 class="comment">// ----------------------------------------------------------------------------- 00063 "l00044">00044 class="comment">// 00064 "l00045">class="code" href="class_r_time_server_session.html#0a20867f2777f1db7349df290a5e6112">00045 TInt class="code" href="class_r_time_server_session.html#0a20867f2777f1db7349df290a5e6112">RTimeServerSession::Connect() 00065 "l00046">00046 { 00066 "l00047">00047 TInt error = ::StartServer(); 00067 "l00048">00048 00068 "l00049">00049 class="keywordflow">if ( KErrNone == error ) 00069 "l00050">00050 { 00070 "l00051">00051 error = CreateSession( KTimeServerName, 00071 "l00052">00052 class="code" href="class_r_time_server_session.html#30dc24843f42888ea13e6093f6318f37">Version(), 00072 "l00053">00053 KDefaultMessageSlots ); 00073 "l00054">00054 } 00074 "l00055">00055 class="keywordflow">return error; 00075 "l00056">00056 } 00076 "l00057">00057 00077 "l00058">00058 class="comment">// ----------------------------------------------------------------------------- 00078 "l00059">00059 class="comment">// RTimeServerSession::Version() 00079 "l00060">00060 class="comment">// Gets the version number. 00080 "l00061">00061 class="comment">// ----------------------------------------------------------------------------- 00081 "l00062">00062 class="comment">// 00082 "l00063">class="code" href="class_r_time_server_session.html#30dc24843f42888ea13e6093f6318f37">00063 TVersion class="code" href="class_r_time_server_session.html#30dc24843f42888ea13e6093f6318f37">RTimeServerSession::Version()class="keyword"> const 00083 "l00064">00064 class="keyword"> { 00084 "l00065">00065 class="keywordflow">return( TVersion( KTimeServMajorVersionNumber, 00085 "l00066">00066 KTimeServMinorVersionNumber, 00086 "l00067">00067 KTimeServBuildVersionNumber ) ); 00087 "l00068">00068 } 00088 "l00069">00069 00089 "l00070">00070 class="comment">// ----------------------------------------------------------------------------- 00090 "l00071">00071 class="comment">// RTimeServerSession::RequestTime() 00091 "l00072">00072 class="comment">// Issues a request for the time to the server. 00092 "l00073">00073 class="comment">// ----------------------------------------------------------------------------- 00093 "l00074">00074 class="comment">// 00094 "l00075">class="code" href="class_r_time_server_session.html#0e65b7c45b7af042183f1c5525cfcc1b">00075 class="keywordtype">void class="code" href="class_r_time_server_session.html#0e65b7c45b7af042183f1c5525cfcc1b">RTimeServerSession::RequestTime( TTime& aTime, TRequestStatus& aStatus ) 00095 "l00076">00076 { 00096 "l00077">00077 class="code" href="class_r_time_server_session.html#828f90acd9ecd7a6283a9226001e3921">iTimeBuffer.Set( reinterpret_cast<TUint8*>( &aTime ), class="keyword">sizeof( aTime ), 00097 "l00078">00078 class="keyword">sizeof( aTime ) ); 00098 "l00079">00079 00099 "l00080">00080 class="comment">// Package message arguments before sending to the server 00100 "l00081">00081 TIpcArgs args( &class="code" href="class_r_time_server_session.html#828f90acd9ecd7a6283a9226001e3921">iTimeBuffer ); 00101 "l00082">00082 00102 "l00083">00083 class="comment">// This call completes immediately, however the server will not 00103 "l00084">00084 class="comment">// complete the request until later, so don't pass any local 00104 "l00085">00085 class="comment">// descriptors as they will be out of scope by the time the server 00105 "l00086">00086 class="comment">// attempts to write to them 00106 "l00087">00087 SendReceive( ETimeServRequestTime, args, aStatus ); 00107 "l00088">00088 } 00108 "l00089">00089 00109 "l00090">00090 class="comment">// ----------------------------------------------------------------------------- 00110 "l00091">00091 class="comment">// RTimeServerSession::CancelRequestTime() 00111 "l00092">00092 class="comment">// Cancels any outstanding request to the server. 00112 "l00093">00093 class="comment">// ----------------------------------------------------------------------------- 00113 "l00094">class="code" href="class_r_time_server_session.html#52a5f2cddd36f215fea9c11e32ab88b8">00094 class="keywordtype">void class="code" href="class_r_time_server_session.html#52a5f2cddd36f215fea9c11e32ab88b8">RTimeServerSession::CancelRequestTime()class="keyword"> const 00114 "l00095">00095 class="keyword"> { 00115 "l00096">00096 SendReceive( ETimeServCancelRequestTime, TIpcArgs(NULL) ); 00116 "l00097">00097 } 00117 "l00098">00098 00118 "l00099">00099 class="comment">// ============================= OTHER FUNCTIONS =============================== 00119 "l00100">00100 00120 "l00101">00101 class="comment">// ----------------------------------------------------------------------------- 00121 "l00102">00102 class="comment">// StartServer() 00122 "l00103">00103 class="comment">// Starts the server if it is not already running 00123 "l00104">00104 class="comment">// ----------------------------------------------------------------------------- 00124 "l00105">00105 class="comment">// 00125 "l00106">00106 class="keyword">static TInt StartServer() 00126 "l00107">00107 { 00127 "l00108">00108 TInt result; 00128 "l00109">00109 00129 "l00110">00110 TFindServer findTimeServer( KTimeServerName ); 00130 "l00111">00111 TFullName name; 00131 "l00112">00112 00132 "l00113">00113 result = findTimeServer.Next( name ); 00133 "l00114">00114 class="keywordflow">if ( result == KErrNone ) 00134 "l00115">00115 { 00135 "l00116">00116 class="comment">// Server already running 00136 "l00117">00117 class="keywordflow">return KErrNone; 00137 "l00118">00118 } 00138 "l00119">00119 00139 "l00120">00120 RSemaphore semaphore; 00140 "l00121">00121 result = semaphore.CreateGlobal( KTimeServerSemaphoreName, 0 ); 00141 "l00122">00122 class="keywordflow">if ( result != KErrNone ) 00142 "l00123">00123 { 00143 "l00124">00124 class="keywordflow">return result; 00144 "l00125">00125 } 00145 "l00126">00126 00146 "l00127">00127 result = CreateServerProcess(); 00147 "l00128">00128 class="keywordflow">if ( result != KErrNone ) 00148 "l00129">00129 { 00149 "l00130">00130 class="keywordflow">return result; 00150 "l00131">00131 } 00151 "l00132">00132 00152 "l00133">00133 semaphore.Wait(); 00153 "l00134">00134 semaphore.Close(); 00154 "l00135">00135 00155 "l00136">00136 class="keywordflow">return KErrNone; 00156 "l00137">00137 } 00157 "l00138">00138 00158 "l00139">00139 class="comment">// ----------------------------------------------------------------------------- 00159 "l00140">00140 class="comment">// CreateServerProcess() 00160 "l00141">00141 class="comment">// Creates a server process 00161 "l00142">00142 class="comment">// ----------------------------------------------------------------------------- 00162 "l00143">00143 class="comment">// 00163 "l00144">00144 class="keyword">static TInt CreateServerProcess() 00164 "l00145">00145 { 00165 "l00146">00146 TInt result; 00166 "l00147">00147 00167 "l00148">00148 class="keyword">const TUidType serverUid( KNullUid, KNullUid, KServerUid3 ); 00168 "l00149">00149 00169 "l00150">00150 RProcess server; 00170 "l00151">00151 00171 "l00152">00152 result = server.Create( KTimeServerFilename, KNullDesC, serverUid ); 00172 "l00153">00153 00173 "l00154">00154 class="keywordflow">if ( result != KErrNone ) 00174 "l00155">00155 { 00175 "l00156">00156 class="keywordflow">return result; 00176 "l00157">00157 } 00177 "l00158">00158 00178 "l00159">00159 server.Resume(); 00179 "l00160">00160 server.Close(); 00180 "l00161">00161 00181 "l00162">00162 class="keywordflow">return KErrNone; 00182 "l00163">00163 } 00183 "l00164">00164 00184 "l00165">00165 00185 "l00166">00166 class="comment">// End of File 00186
"width: 50%;
00201 padding-right: 10px;
00202 padding-left: 10px;
00203 border-right-style: None;
00204 border-left-style: None;
00205 border-top-style: None;
00206 border-bottom-style: None;"
00207 width=50%>
00208 "font-family: Arial;">"font-size: smaller;"> Nokia 2009 |
00209 "width: 50%;
00210 padding-right: 10px;
00211 padding-left: 10px;
00212 border-top-style: None;
00213 border-bottom-style: None;
00214 border-right-style: None;"
00215 width=50%>
00216 "text-align: right; margin-right: -4px;"
00217 align=right>"font-weight: bold;">"#Top"
00218 title="Back to top"> |