predictivesearch/PcsServerClientAPI/src/RPsSession.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/predictivesearch/PcsServerClientAPI/src/RPsSession.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,396 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is the PS server client side interface implementation.
+*
+*/
+
+
+// INCLUDE FILES
+#include "RPsSession.h"
+#include "CPsData.h"
+#include "CPcsDebug.h"
+
+// ----------------------------------------------------------------------------
+// StartServer
+// Starts the server. Used only when the server is implemented as a transient.
+// ----------------------------------------------------------------------------
+TInt StartServer()
+{
+    PRINT ( _L("Enter RPsSession->StartServer") );
+
+	RProcess server;
+    server.Create ( KPcsServerExeName, KNullDesC );
+
+    TRequestStatus status;
+    server.Rendezvous(status);
+
+    if ( status != KRequestPending )
+    {
+		server.Kill(0);
+		server.Close();
+		return KErrGeneral;
+    }
+    else
+    {
+		server.Resume();
+    }
+
+    User::WaitForRequest(status);
+
+    if ( status != KErrNone )
+    {
+    	server.Close();
+		return status.Int();
+    }
+
+    PRINT ( _L("End RPsSession->StartServer") );
+
+    return KErrNone;
+}
+// ============================== MEMBER FUNCTIONS ============================
+
+// ----------------------------------------------------------------------------
+// RPsSession::RPsSession
+// Constructor
+// ----------------------------------------------------------------------------
+RPsSession::RPsSession() : RSessionBase(),
+                           iSearchQueryBufferPtr (0, 0),
+                           iResultsBufferPtr (0, 0)
+{
+    PRINT ( _L("Enter RPsSession::RPsSession") );
+    PRINT ( _L("End RPsSession::RPsSession") );
+}
+
+
+// ----------------------------------------------------------------------------
+// RPsSession::Connects to the search server
+// Returns the version number
+// ----------------------------------------------------------------------------
+TInt RPsSession::Connect()
+{
+    PRINT ( _L("Enter RPsSession::Connect") );
+
+    TInt err = CreateSession( KPcsServerName, Version() );
+    if ( err != KErrNone )
+        {
+        PRINT ( _L("Predictive Search server not running. Trying to start") );
+        RMutex mutex;
+        TInt errMutex = mutex.CreateGlobal( KPcsServerName );
+        if ( errMutex == KErrAlreadyExists )
+            {
+            mutex.OpenGlobal( KPcsServerName );
+            }
+        mutex.Wait();
+        err = CreateSession( KPcsServerName, Version() );
+        if ( err != KErrNone )
+            {
+            err = StartServer();
+            PRINT1( _L("Predictive Search Engine, StartServer(), Err = %d"), err );
+            if ( err == KErrNone )
+                {
+                err = CreateSession( KPcsServerName, Version() );
+                }
+            }
+        mutex.Signal();
+        mutex.Close();
+        }
+
+    PRINT ( _L("End RPsSession::Connect") );
+
+    return err;
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::Version
+// Returns the version number
+// ----------------------------------------------------------------------------
+TVersion RPsSession::Version() const
+{
+    return ( TVersion ( KPcsServerMajorVersionNumber,
+		                KPcsServerMinorVersionNumber,
+		             	KPcsServerBuildVersionNumber ) );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::SearchL
+// Initiate a search request.
+// ----------------------------------------------------------------------------
+void RPsSession::SetSearchSettingsL(const TDes8& aSettings)
+{
+    PRINT ( _L("Enter RPsSession::SetSearchSettingsL") );
+
+    TIpcArgs args(&aSettings);
+
+    // Send the search settings to the server. sync call
+    TRequestStatus status;
+	SendReceive(ESearchSettings,
+	            args,
+	            status);
+    User::WaitForRequest(status);
+
+    PRINT ( _L("End RPsSession::SetSearchSettingsL") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::SearchL
+// Initiate a search request.
+// ----------------------------------------------------------------------------
+void RPsSession::SearchL(const TDes8& aSearchQuery,
+                         TPtr8 aResultsBuffer,
+                         TRequestStatus& aStatus)
+{
+    PRINT ( _L("Enter RPsSession::SearchL") );
+
+    // Hold the pointer to buffers till the async request is complete
+    iSearchQueryBufferPtr.Set(aSearchQuery);
+    iResultsBufferPtr.Set(aResultsBuffer);
+
+    TIpcArgs args(&iSearchQueryBufferPtr, &iResultsBufferPtr);
+
+    aStatus = KRequestPending;
+
+    // Initiate the search request
+	SendReceive(ESearch,
+	            args,
+	            aStatus );
+
+    PRINT ( _L("End RPsSession::SearchL") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::CancelSearch
+// Send a request to cancel search. Synchronous.
+// ----------------------------------------------------------------------------
+void RPsSession::CancelSearch()
+{
+    PRINT ( _L("Enter RPsSession::CancelSearch") );
+
+    TRequestStatus status;
+
+	SendReceive(ECancelSearch,
+	            TIpcArgs(),
+	            status );
+
+    User::WaitForRequest(status);
+
+    PRINT ( _L("End RPsSession::CancelSearch") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::SearchL
+// Initiate a search request.
+// ----------------------------------------------------------------------------
+void RPsSession::SearchL(const TDes8& aSearchQuery,
+                         const TDes8& aSearchData,
+                         TPtr8 aResultsBuffer)
+{
+    PRINT ( _L("Enter RPsSession::SearchL") );
+
+    TIpcArgs args(&aSearchQuery, &aSearchData, &aResultsBuffer);
+
+    TRequestStatus status;
+
+    // Initiate the search request
+	SendReceive(ESearchInput,
+	            args,
+	            status );
+
+    User::WaitForRequest(status);
+
+    PRINT ( _L("End RPsSession::SearchL") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::SearchMatchStringL
+// Initiate a search request.
+// ----------------------------------------------------------------------------
+void RPsSession::SearchMatchStringL(const TDes8& aSearchQuery,
+                         const TDes8& aSearchData,
+                         TDes& aResultsBuffer)
+{
+    PRINT ( _L("Enter RPsSession::SearchMatchStringL") );
+
+    TIpcArgs args(&aSearchQuery, &aSearchData, &aResultsBuffer);
+
+    TRequestStatus status;
+
+    // Initiate the search request
+    SendReceive(ESearchMatchString,
+                args,
+                status );
+
+    User::WaitForRequest(status);
+
+    PRINT ( _L("End RPsSession::SearchMatchStringL") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::SendNewBufferL
+// Send a new buffer to recover the search results.
+// ----------------------------------------------------------------------------
+void RPsSession::SendNewBufferL(TPtr8 aResultsBuffer,
+                                TRequestStatus& aStatus)
+{
+    PRINT ( _L("Enter RPsSession::SendNewBufferL") );
+
+	iResultsBufferPtr.Set(aResultsBuffer);
+
+	aStatus = KRequestPending;
+
+    // Search command is reused here. Hence there is no need to fill
+    // the search query.
+    TIpcArgs args(TIpcArgs::ENothing,
+                  &iResultsBufferPtr);
+
+	SendReceive(ESearch,
+	            args,
+	            aStatus);
+
+    PRINT ( _L("Enter RPsSession::SendNewBufferL") );
+}
+
+// -----------------------------------------------------------------------------
+// RPsSession::IsLanguageSupportedL()
+// Checks if the language variant is supported by
+// the predictive search engine.
+// Synchronous
+// -----------------------------------------------------------------------------
+void RPsSession::IsLanguageSupportedL(const TDes8& aLanguage,
+                                      TPtr8 aResultsBuffer)
+{
+	PRINT ( _L("Enter RPsSession::IsLanguageSupportedL") );
+
+	TIpcArgs args(&aLanguage, &aResultsBuffer);
+	TRequestStatus status;
+
+	// initiate the request
+	SendReceive(ELangSupport,
+				args,
+				status);
+
+	User::WaitForRequest(status);
+
+	PRINT ( _L("End RPsSession::IsLanguageSupportedL") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::GetDataOrderL
+// Send a request to the PS server to recover data fields supported by a store.
+// ----------------------------------------------------------------------------
+void RPsSession::GetDataOrderL(const TDes8& aURI,
+                               TPtr8 aResultsBuffer)
+{
+    PRINT ( _L("Enter RPsSession::GetDataOrderL") );
+
+    TIpcArgs args(&aURI, &aResultsBuffer);
+
+    TRequestStatus status;
+
+    // Initiate the request
+	SendReceive(EGetDataOrder,
+	            args,
+	            status );
+
+    User::WaitForRequest(status);
+
+    PRINT ( _L("End RPsSession::GetDataOrderL") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::GetSortOrderL
+// Send a request to the PS server to recover sort order supported by a store.
+// ----------------------------------------------------------------------------
+void RPsSession::GetSortOrderL(const TDes8& aURI,
+                               TPtr8 aResultsBuffer)
+{
+    PRINT ( _L("Enter RPsSession::GetSortOrderL") );
+
+    TIpcArgs args(&aURI, &aResultsBuffer);
+
+    TRequestStatus status;
+
+    // Initiate the request
+	SendReceive(EGetSortOrder,
+	            args,
+	            status );
+
+    User::WaitForRequest(status);
+
+    PRINT ( _L("End RPsSession::GetSortOrderL") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::ChangeSortOrderL
+// Send a request to the PS server to set sort order for a store.
+// ----------------------------------------------------------------------------
+void RPsSession::ChangeSortOrderL(const TDes8& aInput)
+{
+    PRINT ( _L("Enter RPsSession::ChangeSortOrderL") );
+
+    TIpcArgs args(&aInput);
+
+    TRequestStatus status;
+
+    // Initiate the request
+	SendReceive(ESetSortOrder,
+	            args,
+	            status );
+
+    User::WaitForRequest(status);
+
+    PRINT ( _L("End RPsSession::ChangeSortOrderL") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::GetAdaptiveGridL
+// Initiate the Adaptive Grid request.
+// ----------------------------------------------------------------------------
+void RPsSession::GetAdaptiveGridL( const TDesC8& aURIs,
+                                   const TBool aCompanyName,
+                                   TDes& aResultsBuffer )
+{
+    PRINT ( _L("Enter RPsSession::GetAdaptiveGrid") );
+
+    TIpcArgs args( &aURIs, aCompanyName, &aResultsBuffer );
+
+    TRequestStatus status;
+
+    // Initiate the Adaptive Grid request
+    SendReceive( EGetAdaptiveGrid,
+                 args,
+                 status );
+
+    User::WaitForRequest(status);
+
+    PRINT ( _L("End RPsSession::GetAdaptiveGrid") );
+}
+
+// ----------------------------------------------------------------------------
+// RPsSession::ShutdownServerL
+// Shutsdown the PS Server. Synchronous.
+// ----------------------------------------------------------------------------
+void RPsSession::ShutdownServerL()
+{
+    PRINT ( _L("Enter RPsSession::ShutdownServerL") );
+
+    TIpcArgs args;
+
+    TRequestStatus status;
+    SendReceive(EShutdown, args, status );
+    User::WaitForRequest(status);
+
+    PRINT ( _L("End RPsSession::ShutdownServerL") );
+}
+
+// End of File