--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoscheduler/SchedulerServer/src/CCseSchedulerServerSession.cpp Thu Dec 17 09:14:38 2009 +0200
@@ -0,0 +1,288 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Implementation of Scheduler server's*
+*/
+
+
+
+
+// INCLUDE FILES
+#include "CCseSchedulerServerSession.h" // Header file for this class
+#include "CCseSchedulerServer.h" // Common methods for server
+#include "CCseSchedulerServerEngine.h" // Intelligence aka engine of server
+#include "CseSchedulerServer.pan" // Server panic codes
+#include <ipvideo/CseSchedulerClientServerCommon.h> // Common defines for client and server
+#include "CseDebug.h" // Debug macros
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES
+// None
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// LOCAL CONSTANTS AND MACROS
+// None
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+// None
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerSession::CCseSchedulerSession()
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+
+CCseSchedulerServerSession::CCseSchedulerServerSession() : CSession2(),
+ iResourceCount( 0 )
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::CCseSchedulerServerSession");
+
+ CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerServerSession::CCseSchedulerServerSession");
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerSession::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCseSchedulerServerSession* CCseSchedulerServerSession::NewL( CCseSchedulerServer* aServer )
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::NewL");
+
+ CCseSchedulerServerSession* self = new ( ELeave ) CCseSchedulerServerSession();
+ CleanupStack::PushL( self );
+ self->ConstructL( aServer );
+ CleanupStack::Pop( self );
+
+ CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerServerSession::NewL");
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerSession::ConstructL()
+// second-phase C++ constructor
+// -----------------------------------------------------------------------------
+//
+void CCseSchedulerServerSession::ConstructL( CCseSchedulerServer* aServer )
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::ConstructL");
+
+ if ( aServer )
+ {
+ aServer->Inc();
+ }
+
+ // Create new object index
+ iObjects = CObjectIx::NewL();
+
+ CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerServerSession::ConstructL");
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerSession::~CCseSchedulerSession()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CCseSchedulerServerSession::~CCseSchedulerServerSession()
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::~CCseSchedulerServerSession");
+
+ delete iObjects;
+
+ CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerServerSession::~CCseSchedulerServerSession");
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerSession::ServiceL()
+//
+// -----------------------------------------------------------------------------
+//
+void CCseSchedulerServerSession::ServiceL( const RMessage2& aMessage )
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::ServiceL");
+
+ switch ( aMessage.Function() )
+ {
+ case ECseServCreateSubSession:
+ case ECseServCloseSubSession:
+ case ECseServCloseSession:
+ {
+ // "Common messages"
+ TRAPD( err, DispatchMessageL( aMessage ) );
+ aMessage.Complete( err );
+ }
+ break;
+
+ default:
+ {
+ // Ok, but must be subsession relative
+ CCseSchedulerServerEngine* engine =
+ (CCseSchedulerServerEngine*)iObjects->At( aMessage.Int3() );
+ if ( !engine )
+ {
+ aMessage.Complete( KErrBadHandle );
+ PanicClient( ECsePanicBadSubSessionHandle );
+ }
+ else
+ {
+ // this is the normal route,
+ // all engine commands go this way
+ TRAPD( error, engine->GeneralServiceL( aMessage ) );
+ if ( error != KErrNone )
+ {
+ CSELOGSTRING2_HIGH_LEVEL("CCseSchedulerServerSession::ServiceL - engine->GeneralServiceL() LEAVED: %d", error);
+ aMessage.Complete( error );
+ }
+ }
+ }
+ break;
+ }
+
+ CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerServerSession::ServiceL");
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerServerSession::DispatchMessageL()
+//
+// -----------------------------------------------------------------------------
+//
+void CCseSchedulerServerSession::DispatchMessageL( const RMessage2& aMessage )
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::DispatchMessageL");
+
+ // Check for session-relative requests
+ switch ( aMessage.Function() )
+ {
+ case ECseServCreateSubSession:
+ NewObjectL( aMessage );
+ break;
+
+ case ECseServCloseSubSession:
+ DeleteObject( aMessage.Int3() );
+ break;
+
+ case ECseServCloseSession:
+ Server()->Dec();
+ break;
+
+ default:
+ break;
+ }
+
+ CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerServerSession::DispatchMessageL");
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerServerSession::NewObjectL()
+//
+// -----------------------------------------------------------------------------
+//
+void CCseSchedulerServerSession::NewObjectL( const RMessage2& aMessage )
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::NewObjectL");
+
+ CObject* obj = Server()->GetEngineObjectL();
+ TInt handle( iObjects->AddL( obj ) );
+ // Write the handle to client
+ TPckg<TInt> handlePckg( handle );
+ TRAPD( err, aMessage.WriteL( 3, handlePckg ) );
+
+ if ( err )
+ {
+ PanicClient( ECsePanicBadRequest );
+ return;
+ }
+
+ // Notch up another resource
+ iResourceCount++;
+
+ CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerServerSession::NewObjectL");
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerSession::DeleteObject()
+//
+// -----------------------------------------------------------------------------
+//
+void CCseSchedulerServerSession::DeleteObject( TUint aHandle )
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::DeleteObject");
+
+ // Panic if bad handle
+ CCseSchedulerServerEngine* engine = ( CCseSchedulerServerEngine* )iObjects->At( aHandle );
+ if ( !engine )
+ {
+ PanicClient( ECsePanicBadSubSessionHandle );
+ }
+
+ iResourceCount--;
+ // Deletes engine
+ iObjects->Remove( aHandle );
+
+ CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerServerSession::DeleteObject");
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerServerSession::CountResources()
+//
+// -----------------------------------------------------------------------------
+//
+TInt CCseSchedulerServerSession::CountResources()
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::CountResources");
+ CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerServerSession::CountResources");
+ return iResourceCount;
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerSession::PanicClient()
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCseSchedulerServerSession::PanicClient( TCseSchedulerServPanic aPanic ) const
+ {
+ CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerServerSession::PanicClient");
+
+ _LIT( KTxtSessionPanic, "SchedulerSession" );
+ CSELOGSTRING2_HIGH_LEVEL("CCseSchedulerServerSession::PanicClient - panic code: %d", aPanic);
+ User::Panic( KTxtSessionPanic, aPanic );
+ }
+
+// -----------------------------------------------------------------------------
+// CCseSchedulerSession::PanicClient()
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CCseSchedulerServer* CCseSchedulerServerSession::Server()
+ {
+ return reinterpret_cast< CCseSchedulerServer* > (
+ const_cast< CServer2* > ( CSession2::Server( ) ) );
+ }
+// End of File