This example application demonstrates the use of client/server APIs using a logical device driver (LDD) and a physical device driver (PDD).
This example implements asynchronous as well as synchronous client requests to the server. This example also demonstrates a client and server running in separate processes and a client and server running in the same process.
This example demonstrates the following:
a server running its own process: This is referred to in this document as the process server . The example also implements a DLL that provides an API to allow clients to request services from the process server. This client DLL is referred to as the process client .
a server and client running in a single process: These are referred to as the thread server and thread client .
a shut down server: This terminates the process or thread server if it has no clients connected to it for 50 seconds.
Process Client and Server
Click the following links to download the example:
Click the following links for additional files:
Click the following links to view the example:
Click the following links to view additional files:
Thread Client and Server
Click the following links to download the example:
Click the following links to download additional files:
Click the following links to view the example:
Click the following links to view additional files
common
This directory contains code that is common to the process and thread servers. It implements the shut down server which checks the number of connected clients to the thread or process server. If this number is zero, then after a time delay, the thread/process server is terminated. The server is not terminated in the following cases:
if the client tries to connect within the duration of the timer, then the shut down operation is cancelled and the server handles the client's request to connect.
if the client tries to connect after the timer has expired but before the server shut down process has begun, then the process or thread server is stopped and restarted to handle the client's request to connect.
driver
Device drivers are DLLs that allow code to communicate with hardware. For more information about device drivers, see the Device Driver Guide .
This directory implements a client DLL that starts the process server and creates a session with it. The client DLL provides an API to allow clients to request the server to load and unload the device driver.
This directory implements the process server class CProcessServer , which is derived from CServer2 . It handles client requests to interact with the device drivers. It can have multiple clients connected at the same time. The device driver, server and client all have the MultimediaDD capability. Note that this is for demonstration purposes rather than because the code uses any Multimedia APIs. The session class CProcessServerSession implements a simple message queue to hold asynchronous requests.
This directory implements a client DLL that starts the thread server and creates a session within it. The client DLL provides an API to allow clients to request the server to load and unload the device driver.
This directory implements the thread server class CThreadServer , which is derived from CServer2 . An instance of the thread server runs in the same process as the client. The thread server handles client requests to interact with the device drivers. It can have multiple clients connected at the same time. The session class CThreadServerSession implements a simple message queue to hold asynchronous requests.
test
This example directory contains a comprehensive test suite to test the process client and server and the thread client and server.
CServer2 CSession2 RSessionBase RMessage2 RMessagePtr2 RProcess RThread RBusLogicalChannel DLogicalDevice DLogicalChannel DPhysicalDevice
Build the development and test code using the abld build command from AdvancedClientServerExample\group .
The AdvancedClientServerExample builds the following binaries in the standard location ( \epoc32\release\winscw\<build_variant> for CodeWarrior):
driver1_ldd.ldd .
driver1_pdd.pdd .
processclient.dll , threadclient.dll and threadserver.dll . ,\
processserver.exe , Te_ProcessClientServerTestSuite.exe and Te_ThreadClientServerTestSuite.exe .
After launching the Te_ProcessClientServerTestSuite.exe or Te_ThreadClientServerTestSuite.exe executable, depending on the emulator you are using, you may have to navigate away from the application launcher/shell screen to view the console.
To run the tests, perform the following steps:
From the command prompt, change directory to epoc32\release\winscw\udeb .
Run the following command:
epoc
On the emulator, go to eshell .
Run the following commands:
testexecute c:\testdata\scripts\te_processclientservertestsuite.script
testexecute c:\testdata\scripts\te_threadclientservertestsuite.script
Note: Test results are stored in the epoc32\winscw\c\logs\testexecute directory:
Process server tests: Refer to the te_processclientservertestsuite.htm file.
Thread server tests: Refer to the te_threadclientservertestsuite.htm file.
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.