diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_complex_server_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_complex_server_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,125 @@ + + +TB10.1 Example Applications: examples/Base/IPC/ClientServer/Complex/ComplexServer.cpp Source File + + + + +

examples/Base/IPC/ClientServer/Complex/ComplexServer.cpp

00001 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+00002 // All rights reserved.
+00003 // This component and the accompanying materials are made available
+00004 // under the terms of "Eclipse Public License v1.0"
+00005 // which accompanies this distribution, and is available
+00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
+00007 //
+00008 // Initial Contributors:
+00009 // Nokia Corporation - initial contribution.
+00010 //
+00011 // Contributors:
+00012 //
+00013 // Description:
+00014 //
+00015 
+00016 #include "ComplexClientAndServer.h"
+00017 #include "ComplexServer.h"
+00018 #include <e32svr.h>
+00019 #include <e32uid.h>
+00020 
+00021 //
+00022 //NOTE**: The example does not demonstrate any security features - its purpose is simply
+00023 //        to demonstrate the basic principles of client/server interaction.
+00024 //
+00025 
+00026 
+00030 TInt CCountServer::ThreadFunction(TAny* )
+00031         {
+00032           // Useful TInt variable
+00033         TInt err;
+00034         
+00035           // create cleanup stack
+00036         CTrapCleanup* cleanup = CTrapCleanup::New();
+00037         if (cleanup == NULL)
+00038             {
+00039                 PanicServer(ECreateTrapCleanup);
+00040             }
+00041                 
+00042           // Create an active scheduler.
+00043         CActiveScheduler* pScheduler=new CActiveScheduler;
+00044         __ASSERT_ALWAYS(pScheduler,PanicServer(EMainSchedulerError));
+00045           // Install the active scheduler.
+00046         CActiveScheduler::Install(pScheduler);
+00047         
+00048           // Create the server object.
+00049         CCountServer* pServer = NULL;
+00050         TRAP(err,pServer = CCountServer::NewL(EPriorityStandard));
+00051         __ASSERT_ALWAYS(!err,CCountServer::PanicServer(ESvrCreateServer));
+00052         
+00053           // Start the server
+00054         err = pServer->Start(KCountServerName);
+00055         if (err != KErrNone)
+00056             {
+00057                 CCountServer::PanicServer(ESvrStartServer);
+00058             }
+00059             
+00060       // Let everyone know that we are ready to
+00061       // deal with requests.
+00062     RThread::Rendezvous(KErrNone);
+00063     
+00064       // And start fielding requests from client(s).
+00065         CActiveScheduler::Start();
+00066         
+00067       // Tidy up...
+00068     delete pServer;
+00069     delete pScheduler;
+00070     delete cleanup; 
+00071 
+00072           // ...although we should never get here!
+00073         return KErrNone;
+00074         }
+00075 
+00076 
+00084 EXPORT_C TInt StartThread(RThread& aServerThread)
+00085         {
+00086         TInt res=KErrNone;
+00087         
+00088       // Create the server, if one with this name does not already exist.
+00089         
+00090         TFindServer findCountServer(KCountServerName);
+00091         TFullName   name;
+00092         
+00093           // Need to check that the server exists.
+00094         if (findCountServer.Next(name)!=KErrNone)
+00095             {
+00096               // Create the thread for the server.
+00097                 res=aServerThread.Create(KCountServerName,
+00098                         CCountServer::ThreadFunction,
+00099                         KDefaultStackSize,
+00100                         KDefaultHeapSize,
+00101                         KDefaultHeapSize,
+00102                         NULL
+00103                         );
+00104                   // The thread has been created OK so get it started - however
+00105           // we need to make sure that it has started before we continue.
+00106                 if (res==KErrNone)
+00107                         {
+00108                         TRequestStatus rendezvousStatus;
+00109                         
+00110                         aServerThread.SetPriority(EPriorityNormal);
+00111                         aServerThread.Rendezvous(rendezvousStatus);
+00112                         aServerThread.Resume();
+00113                         User::WaitForRequest(rendezvousStatus);
+00114                         }
+00115                         
+00116                   // The thread has not been created - clearly there's been a problem.
+00117                 else
+00118                         {
+00119                         aServerThread.Close();
+00120                         }
+00121                 }
+00122     return res;
+00123         }
+

Generated on Thu Jan 21 10:32:56 2010 for TB10.1 Example Applications by  + +doxygen 1.5.3
+ +