diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/processclient_8cpp_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/processclient_8cpp_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,128 @@ + + + + +TB9.2 Example Applications: examples/Base/IPC/AdvancedClientServerExample/ProcessClient/src/processclient.cpp Source File + + + + + +

examples/Base/IPC/AdvancedClientServerExample/ProcessClient/src/processclient.cpp

00001 // Copyright (c) 2007-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 
+00017 #include "processclient.h"
+00018 #include "processclientserver.h"
+00019 #include<e32debug.h>
+00020 
+00021 #define KMaxServerNameLength 256
+00022 
+00023 static const TUid KUidProcessServer = {0x10283037}; // Process Server UID
+00024 const TInt KCreateSessionRetryCount = 2;                                        //CreateSession retry count
+00025 const TInt KServerDefaultMessageSlots = 2;                      //server async Message Slots
+00026 
+00033 static TInt StartServer()
+00034         {
+00035         const TUidType serverUid(KNullUid,KNullUid,KUidProcessServer);
+00036 
+00037         RProcess server;
+00038         TInt r=server.Create(KProcessServerServerImg,KNullDesC,serverUid);
+00039         if (r!=KErrNone)
+00040                 return r;
+00041         TRequestStatus stat;
+00042         server.Rendezvous(stat);
+00043 
+00044         if (stat!=KRequestPending)
+00045                 server.Kill(KErrCouldNotConnect);               // abort startup
+00046         else
+00047                 server.Resume();        // logon OK - start the server
+00048         
+00049         User::WaitForRequest(stat);             // wait for start or death
+00050         // The server exit type may be a panic value and a panic value can be zero, which is the same 
+00051         // value as KErrNone. So, the exit type is tested for a panic before being returned.
+00052         if (server.ExitType()==EExitPanic)
+00053                 {
+00054                 r = KErrServerTerminated;
+00055                 }
+00056         else
+00057                 {
+00058                 r = stat.Int();
+00059                 }
+00060         server.Close();
+00061         return r;
+00062         }
+00067 EXPORT_C TInt RProcessClient::Connect()
+00068         {
+00069         TInt retry=KCreateSessionRetryCount; //number of CreateSession retries
+00070         FOREVER
+00071                 {
+00072                 // try to create a session with the server which has KServerDefaultMessageSlots async message slots.
+00073                 TInt r=CreateSession(KProcessServerName,
+00074                                                          TVersion(KProcessServerVersion,
+00075                                                                           KProcessServerMinorVersionNumber,
+00076                                                                           KProcessServerBuildVersionNumber),
+00077                                                          KServerDefaultMessageSlots);                                                    
+00078                 if (r!=KErrNotFound && r!=KErrServerTerminated)
+00079                         return r;
+00080                 if (--retry==0)
+00081                         return r;
+00082                 r=StartServer();        
+00083                 if (r!=KErrNone && r!=KErrAlreadyExists)
+00084                         return r;
+00085                 // 1. r=KErrNone means server starts up successfully.
+00086                 // 2. r=KErrAlreadyExists means a duplicate server was trying to start up.
+00087                 //              Note: if there are other functions called before CServer2::StartL() during construction,
+00088                 //                other errors might happen when the duplicate server is trying to start.
+00089                 //            Therefore, we recommend CServer2::StartL() is the first function in server construction
+00090                 //            @see CProcessServer::ConstructL()
+00091                 //
+00092                 // NOTE: If users would like to retry start up server after other scenarios happened, e.g. panic,then go 
+00093                 //               through the following steps:
+00094                 //                1. Increase the value of KCreateSessionRetryCount (only start up server once in this example)
+00095                 //                2. Need another variable, e.g. TExitType, together with error code returned in StartServer()
+00096                 //                      to distinguish these scenarios
+00097                 //                3. Modify the third if statement to stop exit when the required scenarios happens.
+00098                 //           
+00099                 }
+00100         }
+00105 EXPORT_C TInt RProcessClient::OpenDriver()
+00106         {
+00107         return SendReceive(EOpenDriver);
+00108         }
+00114 EXPORT_C void RProcessClient::Send(const TDesC8& aBuf, TRequestStatus& aStatus)
+00115         {
+00116         SendReceive(EDummyLDDSendData, TIpcArgs(&aBuf), aStatus);
+00117         }
+00121 EXPORT_C void RProcessClient::SendCancel()
+00122         {
+00123         SendReceive(EDummyLDDSendDataCancel);
+00124         }
+00129 EXPORT_C TInt RProcessClient::UnloadDeviceDriver()
+00130         {
+00131         return SendReceive(EUnloadDeviceDriver);
+00132         }
+00137 EXPORT_C TInt RProcessClient::LoadDeviceDriver()
+00138         {
+00139         return SendReceive(ELoadDeviceDriver);
+00140         }
+00141 
+00142 //EOF
+
+
Generated by  + +doxygen 1.6.2
+ +