diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_complex_server_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_complex_server_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,125 +0,0 @@ - -
-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 } -