phoneclientserver/phoneclient/Src/Messenger/RPhCltMessenger.cpp
changeset 0 ff3b6d0fd310
child 19 7d48bed6ce0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneclientserver/phoneclient/Src/Messenger/RPhCltMessenger.cpp	Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2004 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 class is used to perform Phone Client Extension 
+*                Messenger originated commands.
+*
+*/
+
+
+
+// INCLUDES
+
+#include    "RPhCltMessenger.h"
+#include    <RPhCltServer.h>
+#include    "PhCltClientServer.h"
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// RPhCltMessenger::RPhCltMessenger
+// 
+// C++ constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+RPhCltMessenger::RPhCltMessenger()
+:   RSubSessionBase(),
+    iReceiveMessageSize( NULL, 0 ),
+    iMesParPckg( iMessengerParameters )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// RPhCltMessenger::~RPhCltMessenger
+// 
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+RPhCltMessenger::~RPhCltMessenger()
+    {
+    // Ensure that the subsession is closed.
+    Close();
+    }
+
+
+// -----------------------------------------------------------------------------
+// RPhCltMessenger::Open
+// 
+// Open subsession to Phone Server.
+// -----------------------------------------------------------------------------
+//
+TInt RPhCltMessenger::Open(
+    RPhCltServer& aServer,
+    const TUid& aCategoryUid,
+    const TInt& aDefaultMessageSize )
+    {
+    __ASSERT_ALWAYS( aServer.Handle(), User::Panic( 
+            KPhClientPanicCategory, 
+            EPhCltClientSidePanicNullHandle ) );
+
+    TInt err = CreateSubSession( 
+        aServer, 
+        EPhoneServerMessengerSubSessionOpen, 
+        TIpcArgs() );
+
+
+    // If subsession was created successfully, construct it properly.
+    if ( !err )
+        {
+        // Set the needed variables to be transferred to PhoneServer side.
+        iMessengerParameters.iCategoryUid = aCategoryUid;
+        iMessengerParameters.iDefaultMessageSize = aDefaultMessageSize;
+
+        err = SendReceive( 
+            EPhoneServerMessengerSubSessionConstruct, 
+            TIpcArgs( &iMesParPckg ) );
+
+        // If memory reservations failed, close subsession.
+        if ( err )
+            {
+            Close();
+            }
+        }
+    
+    return err;
+    }
+
+
+// -----------------------------------------------------------------------------
+// RPhCltMessenger::Close
+// 
+// Close subsession.
+// -----------------------------------------------------------------------------
+//
+void RPhCltMessenger::Close()
+    {
+    CloseSubSession( EPhoneServerMessengerSubSessionClose );
+    }
+
+
+// -----------------------------------------------------------------------------
+// RPhCltMessenger::Receive
+// 
+// Receive message.
+// -----------------------------------------------------------------------------
+//
+void RPhCltMessenger::Receive(
+    TRequestStatus& aStatus,
+    TInt& aMessageSize,
+    TDes8& aMessagePayload )
+    {
+    __ASSERT_ALWAYS( 
+        SubSessionHandle(), User::Panic( 
+            KPhClientPanicCategory, EPhCltClientSidePanicNullHandle ) );
+
+    // Set message size variables to be byte descriptor.
+    iReceiveMessageSize.Set( ( TUint8* )&aMessageSize, 0, sizeof( TInt ) ) ;
+    iMessengerParameters.iReceiveMessageSizePtr = &iReceiveMessageSize;
+
+    iMessengerParameters.iReceiveBufferMaxSize = aMessagePayload.MaxSize();
+
+    SendReceive( 
+        EPhoneServerMessengerSubSessionReceive, 
+        TIpcArgs( 
+            &iMesParPckg,
+            &aMessagePayload,
+            &iReceiveMessageSize ), 
+        aStatus );
+    }
+
+
+// -----------------------------------------------------------------------------
+// RPhCltMessenger::Send
+// 
+// Send message.
+// -----------------------------------------------------------------------------
+//
+void RPhCltMessenger::Send(
+    TRequestStatus& aStatus,
+    const TDesC8& aMessagePayload )
+    {
+    __ASSERT_ALWAYS( 
+        SubSessionHandle(), User::Panic( 
+            KPhClientPanicCategory, EPhCltClientSidePanicNullHandle ) );
+
+    iMessengerParameters.iSendPayloadLength = aMessagePayload.Length();
+
+    SendReceive( 
+        EPhoneServerMessengerSubSessionSend, 
+        TIpcArgs( 
+            &iMesParPckg, 
+            &aMessagePayload ), 
+        aStatus );
+    }
+
+
+// -----------------------------------------------------------------------------
+// RPhCltMessenger::CancelRequest
+// 
+// Cancel ongoing request.
+// -----------------------------------------------------------------------------
+//
+void RPhCltMessenger::CancelRequest( const TPhCltMessengerRequest& aRequest )
+    {
+    __ASSERT_ALWAYS( SubSessionHandle(), User::Panic( 
+        KPhClientPanicCategory, EPhCltClientSidePanicNullHandle ) );
+
+    iMessengerParameters.iCancelRequest = aRequest;
+
+    SendReceive( 
+        EPhoneServerMessengerSubSessionCancel, 
+        TIpcArgs( &iMesParPckg ) );
+    }
+
+
+// -----------------------------------------------------------------------------
+// RPhCltMessenger::Skip
+// 
+// Skip the current message.
+// -----------------------------------------------------------------------------
+//
+void RPhCltMessenger::Skip()
+    {
+    __ASSERT_ALWAYS( 
+        SubSessionHandle(), User::Panic( 
+            KPhClientPanicCategory, EPhCltClientSidePanicNullHandle ) );
+
+    SendReceive( 
+        EPhoneServerMessengerSubSessionSkip, 
+        TIpcArgs()  );
+    }
+
+            
+// End of File