S60 5th Edition SDK
Example Applications Guide

CTimeServerSession Class Reference

#include <timesession.h>

Inheritance diagram for CTimeServerSession:

List of all members.

Detailed Description

CTimeServerSession. An instance of class CTimeServerSession is created for each client.

Definition at line 31 of file timesession.h.

Public Member Functions

virtual ~CTimeServerSession ()
void SendTimeToClient ()
void ServiceL (const RMessage2 &aMessage)

Static Public Member Functions

static CTimeServerSessionNewL (CTimeServer &aServer)
static CTimeServerSessionNewLC (CTimeServer &aServer)

Private Member Functions

 CTimeServerSession (CTimeServer &aServer)
void ConstructL ()
void PanicClient (const RMessagePtr2 &aMessage, TInt aPanic) const
void RequestTimeL (const RMessage2 &aMessage)

Private Attributes

TBool iWaitingForTick
RMessage2 iMessage
CTimeServeriServer


Constructor & Destructor Documentation

CTimeServerSession::~CTimeServerSession  )  [virtual]
 

~CTimeServerSession. Destructor.

Definition at line 77 of file timesession.cpp.

References CTimeServer::DecrementSessions(), and iServer.

00078     {
00079     iServer.DecrementSessions();
00080     }

CTimeServerSession::CTimeServerSession CTimeServer aServer  )  [private]
 

CTimeServerSession. C++ default constructor.

Parameters:
aServer The server.

Definition at line 66 of file timesession.cpp.

Referenced by NewLC().

00067 : iServer( aServer )
00068     {
00069     // Implementation not required
00070     }


Member Function Documentation

CTimeServerSession * CTimeServerSession::NewL CTimeServer aServer  )  [static]
 

NewL. Two-phased constructor.

Parameters:
aServer The server.
Returns:
Pointer to created CTimeServerSession object.

Definition at line 31 of file timesession.cpp.

References NewLC().

Referenced by CTimeServer::NewSessionL().

00032     {
00033     CTimeServerSession* self = CTimeServerSession::NewLC( aServer );
00034     CleanupStack::Pop( self );
00035     return self;
00036     }

CTimeServerSession * CTimeServerSession::NewLC CTimeServer aServer  )  [static]
 

NewLC. Two-phased constructor.

Parameters:
aServer The server.
Returns:
Pointer to created CTimeServerSession object.

Definition at line 43 of file timesession.cpp.

References CTimeServerSession().

Referenced by NewL().

00044     {
00045     CTimeServerSession* self = new ( ELeave ) CTimeServerSession( aServer );
00046     CleanupStack::PushL( self );
00047     self->ConstructL();
00048     return self;
00049     }

void CTimeServerSession::SendTimeToClient  ) 
 

SendTimeToClient. Call from Beat() and Synchronize(). Sends current time back to requesting client.

Definition at line 138 of file timesession.cpp.

References iMessage, iWaitingForTick, and PanicClient().

Referenced by CTimeServer::SendTimeToSessions().

00139     {
00140     if ( iWaitingForTick )
00141         {
00142         iWaitingForTick = EFalse;
00143 
00144         // Get current time to return to client
00145         TTime time;
00146         time.HomeTime();
00147 
00148         // Create a descriptor which points to the 'time' structure
00149         TPtr8 ptr( reinterpret_cast<TUint8*>( &time ), sizeof( time ),
00150                    sizeof( time ) );
00151 
00152         // Write the 'time' data back to the client        
00153         TRAPD( res, iMessage.WriteL( 0, ptr, 0 ) );
00154         
00155         if ( res != KErrNone )
00156             {
00157             PanicClient( iMessage, EBadDescriptor );
00158             }
00159         
00160         iMessage.Complete( ETimeServRequestTimeComplete );
00161         }
00162     }

void CTimeServerSession::ServiceL const RMessage2 &  aMessage  ) 
 

From CSession, ServiceL. Service request from client.

Parameters:
aMessage Message from client (containing requested operation and any data).

Definition at line 87 of file timesession.cpp.

References iMessage, iWaitingForTick, PanicClient(), and RequestTimeL().

00088     {
00089     switch ( aMessage.Function() )
00090         {
00091         case ETimeServRequestTime:
00092             RequestTimeL( aMessage );
00093             break;
00094 
00095         case ETimeServCancelRequestTime:
00096             if ( iWaitingForTick )
00097                 {
00098                 iMessage.Complete( KErrCancel );
00099                 iWaitingForTick = EFalse;
00100                 }
00101             aMessage.Complete( KErrNone );
00102             break;
00103 
00104         default:
00105             PanicClient( aMessage, EBadRequest );
00106         }
00107     }

void CTimeServerSession::ConstructL  )  [private]
 

ConstructL. 2nd phase constructor.

Definition at line 56 of file timesession.cpp.

References CTimeServer::IncrementSessions(), and iServer.

00057     {
00058     iServer.IncrementSessions();
00059     }

void CTimeServerSession::PanicClient const RMessagePtr2 &  aMessage,
TInt  aPanic
const [private]
 

PanicClient. Causes the client thread to panic.

Parameters:
aMessage Message from client.
aPanic Panic code.

Definition at line 169 of file timesession.cpp.

Referenced by RequestTimeL(), SendTimeToClient(), and ServiceL().

00171     {
00172     aMessage.Panic( KCSAsyncServer, aPanic ); // Note: this panics the client thread,
00173                                      // not server
00174     }

void CTimeServerSession::RequestTimeL const RMessage2 &  aMessage  )  [private]
 

RequestTimeL. Called as a result of the client requesting the time. Starts the 'get time' operation.

Parameters:
aMessage Message from client.

Definition at line 114 of file timesession.cpp.

References iMessage, iServer, iWaitingForTick, PanicClient(), and CTimeServer::WaitForTickL().

Referenced by ServiceL().

00115     {
00116     if ( iWaitingForTick )
00117         {
00118         // We're already busy
00119         PanicClient( aMessage, EReqAlreadyPending );
00120         }
00121     else
00122         {
00123         // Keep a copy of message - for later use
00124         iMessage = aMessage ;
00125 
00126         // Start the work performed by the server
00127         // (just a wait for new second in this case)
00128         iServer.WaitForTickL();
00129         iWaitingForTick = ETrue;
00130         }
00131     }


Member Data Documentation

TBool CTimeServerSession::iWaitingForTick [private]
 

iWaitingForTick, state of tick.

Definition at line 115 of file timesession.h.

Referenced by RequestTimeL(), SendTimeToClient(), and ServiceL().

RMessage2 CTimeServerSession::iMessage [private]
 

iMessage, the message exchange data with the server.

Definition at line 120 of file timesession.h.

Referenced by RequestTimeL(), SendTimeToClient(), and ServiceL().

CTimeServer& CTimeServerSession::iServer [private]
 

iServer, reference to the server.

Definition at line 125 of file timesession.h.

Referenced by ConstructL(), RequestTimeL(), and ~CTimeServerSession().


The documentation for this class was generated from the following files:

© Nokia 2009

Back to top