--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/StorageManager2/ClientSrc/RPEngStorageClient.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,266 @@
+/*
+* Copyright (c) 2002 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: Storage main client
+*
+*/
+
+
+// INCLUDE FILES
+#include "RPEngStorageClient.h"
+#include <eikdll.h>
+#include <f32file.h>
+
+#include "PEngServerStarter.h"
+#include "PEngStorageServerCommon.h"
+#include "TPEngStorageServerMessages.h"
+
+// PEC Engine internal constants
+#include "PEngPresenceEngineConsts2.h"
+#include "PEngInternalGlobalConsts.h"
+
+#include "PresenceDebugPrint.h"
+
+
+// CONSTANTS
+// each session can have several sub-session, while only one sub-session
+// is using asynchronous requests, 20 slots shall be enough to cover
+const TUint KMessageSlotCount = 20;
+
+
+// MACROS
+#define RETURN_IF_NOT_CONNECTED()\
+ if(!iConnected)\
+ {\
+ return KErrDisconnected;\
+ }
+
+#define RETURN_IF_NULL( desBuff )\
+ if ( !desBuff )\
+ {\
+ return KErrNoMemory;\
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::RPEngStorageClient
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+RPEngStorageClient::RPEngStorageClient()
+ {
+ }
+
+// Destructor
+RPEngStorageClient::~RPEngStorageClient()
+ {
+ }
+
+// =============================================================================
+// =============Function of the client for Connection managing =================
+// =============================================================================
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::Connect
+// -----------------------------------------------------------------------------
+//
+TInt RPEngStorageClient::Connect()
+ {
+ PENG_DP_TXT( "RPEngStorageClient::Connect()" );
+
+ //Connects this client to the server.
+ //Launches new server process if one not yet running.
+ TInt err = PEngServerStarter::ConnectServer( *this,
+ KStorageServerName,
+ Version(),
+ KMessageSlotCount,
+ KStorageServerExe );
+
+ iConnected = ( err == KErrNone );
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::Close
+// -----------------------------------------------------------------------------
+//
+void RPEngStorageClient::Close()
+ {
+ PENG_DP_TXT( "RPEngStorageClient::Close()" );
+
+ // all requests from this session are canceled on the server side
+ RSessionBase::Close();
+ iConnected = EFalse;
+ }
+
+// =============================================================================
+// ============= New Function of the client ===================================
+// =============================================================================
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::SessionSlotState()
+// -----------------------------------------------------------------------------
+//
+TInt RPEngStorageClient::SessionSlotState(
+ const TDesC8& aSessionName,
+ HBufC8*& aSessionState,
+ TInt aInitSize )
+ {
+ RETURN_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, &aSessionName );
+ aSessionState = HBufC8::New( aInitSize );
+ RETURN_IF_NULL( aSessionState );
+ TPtr8 sessState ( aSessionState->Des() );
+ messArgs.Set( KMessageSlot1, &sessState );
+ TInt err( SendReceive( EMainSessGetSessionState, messArgs ) );
+ // if error is positive, then buffer was not big enough
+ if ( err > KErrNone )
+ {
+ // realloc buffer, looks complicated, but safe, avoiding realloc
+ delete aSessionState;
+ aSessionState = NULL;
+ aSessionState = HBufC8::New( err );
+ RETURN_IF_NULL( aSessionState );
+ sessState.Set( aSessionState->Des() );
+ messArgs.Set( KMessageSlot1, &sessState );
+ err = SendReceive( EMainSessGetSessionState, messArgs );
+ }
+ // if there was error erase buffer
+ if ( err < KErrNone )
+ {
+ delete aSessionState;
+ aSessionState = NULL;
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::AllSessionSlotsStates()
+// -----------------------------------------------------------------------------
+//
+TInt RPEngStorageClient::AllSessionSlotsStates(
+ HBufC8*& aSessionSlotsBuffer,
+ TInt aInitSize )
+ {
+ RETURN_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ aSessionSlotsBuffer = HBufC8::New( aInitSize );
+ RETURN_IF_NULL( aSessionSlotsBuffer );
+ TPtr8 sessStates ( aSessionSlotsBuffer->Des() );
+ messArgs.Set( KMessageSlot0, &sessStates );
+ TInt err( SendReceive( EMainSessGetAllSessionStates, messArgs ) );
+ // if error is positive, then buffer was not big enough
+ if ( err > KErrNone )
+ {
+ // realloc buffer, looks complicated, but safe, avoiding realloc
+ delete aSessionSlotsBuffer;
+ aSessionSlotsBuffer = NULL;
+ aSessionSlotsBuffer = HBufC8::New( err );
+ RETURN_IF_NULL( aSessionSlotsBuffer );
+ sessStates.Set( aSessionSlotsBuffer->Des() );
+ messArgs.Set( KMessageSlot1, &sessStates );
+ err = SendReceive( EMainSessGetAllSessionStates, messArgs );
+ }
+ // if there was error erase buffer
+ if ( err < KErrNone )
+ {
+ delete aSessionSlotsBuffer;
+ aSessionSlotsBuffer = NULL;
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::ListenGlobalEvents()
+// -----------------------------------------------------------------------------
+//
+TInt RPEngStorageClient::ListenGlobalEvents()
+ {
+ RETURN_IF_NOT_CONNECTED();
+ return SendReceive( EMainSessListenGlobalEvents );
+ }
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::ReloadGlobalEventListener()
+// -----------------------------------------------------------------------------
+//
+TInt RPEngStorageClient::ReloadGlobalEventListener(
+ TDes8& aGlobalEventBuffer,
+ TRequestStatus& aStatus )
+ {
+ RETURN_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, EMainSessListenGlobalEvents );
+ messArgs.Set( KMessageSlot1, &aGlobalEventBuffer );
+ SendReceive( EMainSessReloadAsynchronousScout, messArgs, aStatus );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::StopEventListening()
+// -----------------------------------------------------------------------------
+//
+TInt RPEngStorageClient::StopEventListening()
+ {
+ RETURN_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, EMainSessListenGlobalEvents );
+ return SendReceive( EMainSessCancelRequest, messArgs );
+ }
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::CreateSessionFolder()
+// -----------------------------------------------------------------------------
+//
+TInt RPEngStorageClient::CreateSessionFolder(
+ const TDesC8& aSessionSlot,
+ const TDesC16& aApplicationId )
+ {
+ RETURN_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, &aSessionSlot );
+ messArgs.Set( KMessageSlot1, &aApplicationId );
+
+ return SendReceive( EMainSessCreateSessionFolder, messArgs );
+ }
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::RemoveSessionFolder()
+// -----------------------------------------------------------------------------
+//
+TInt RPEngStorageClient::RemoveSessionFolder(
+ const TDesC8& aSessionSlot,
+ const TDesC16& aApplicationId )
+ {
+ RETURN_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, &aSessionSlot );
+ messArgs.Set( KMessageSlot1, &aApplicationId );
+ return SendReceive( EMainSessRemoveSessionFolder, messArgs );
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngStorageClient::Version()
+// -----------------------------------------------------------------------------
+//
+TVersion RPEngStorageClient::Version() const
+ {
+ return( TVersion( KClientVersionMajor,
+ KClientVersionMinor,
+ KClientVersionBuild ) );
+ }
+
+// End of File
+