multimediacommsengine/mmcesrv/mmceserver/src/mceservercore.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmceserver/src/mceservercore.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2005 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:  
+*
+*/
+
+
+
+
+#include <ecom/ecom.h>
+#include "mceservercore.h"
+#include "mceclientserver.h"
+#include "mcecsserver.h"
+#include "mcecsserverclosetimer.h"
+#include "mceactivescheduler.h"
+#include "mcecssession.h"
+#include "cleanupresetanddestroy.h"
+#include "mcesipmanager.h"
+#include "fcpluginengine.h"
+#include "mcesrvlogs.h"
+
+const TUint KServerCloseWaitTime = 500; // milliseconds
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::NewL
+// -----------------------------------------------------------------------------
+//
+CMceServerCore* CMceServerCore::NewL ()
+	{
+    CMceServerCore* self = CMceServerCore::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::NewLC
+// -----------------------------------------------------------------------------
+//
+CMceServerCore* CMceServerCore::NewLC ()
+	{
+	CMceServerCore* self = new(ELeave)CMceServerCore;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMceServerCore::ConstructL ()
+	{
+    MCESRV_DEBUG("CMceServerCore::ConstructL, Entry");
+
+    MCESRV_DEBUG("MCE Server starting");
+    
+    iActiveScheduler = new (ELeave) CMceActiveScheduler ();
+    CActiveScheduler::Install (iActiveScheduler);
+	iCloseTimer = CMceCsServerCloseTimer::NewL();
+	iManager = CMceSipManager::NewL( *this );
+	iServer = CMceCsServer::NewL(*this);
+	iFCPlugInEngine = CFCPlugInEngine::NewL( *this );  
+	
+    MCESRV_DEBUG("MCE Server READY");
+	
+    MCESRV_DEBUG("CMceServerCore::ConstructL, Exit");
+	}
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::CMceServerCore
+// -----------------------------------------------------------------------------
+//
+CMceServerCore::CMceServerCore ()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::~CMceServerCore
+// -----------------------------------------------------------------------------
+//
+CMceServerCore::~CMceServerCore ()
+	{
+    MCESRV_DEBUG("CMceServerCore::~CMceServerCore, Entry");
+	
+	// This must be deleted first to remove MCE server from system's
+	// list of servers asap.
+	delete iServer;
+    
+	iFCSessions.Reset();
+	iFCSessions.Close();
+	delete iFCPlugInEngine;
+	delete iCloseTimer;
+	delete iManager;
+    delete iActiveScheduler;
+	CActiveScheduler::Install (NULL);
+    MCESRV_DEBUG("MCE Server stopped");
+    
+    MCESRV_DEBUG("CMceServerCore::~CMceServerCore, Exit");
+    
+	}
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::IncrementSessions
+// -----------------------------------------------------------------------------
+//
+void CMceServerCore::IncrementSessions ()
+	{
+	if (iCloseTimer->IsActive())
+        {
+        iCloseTimer->Cancel();
+        }
+    iSessionCount++;
+	}
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::DecrementSessions
+// -----------------------------------------------------------------------------
+//
+void CMceServerCore::DecrementSessions ()
+	{
+	if (iSessionCount > 0)
+    	{
+    	iSessionCount--;    
+    	}
+	if (iSessionCount == 0 && iManager->OrphanSubSessionCount() == 0)
+		{
+		iCloseTimer->StopActiveSchedulerAfter(KServerCloseWaitTime);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::InactiveServerCleanup
+// -----------------------------------------------------------------------------
+//
+void CMceServerCore::InactiveServerCleanup()
+    {
+    if ( iSessionCount == 0 && iManager->OrphanSubSessionCount() == 0)
+		{
+		iCloseTimer->StopActiveSchedulerAfter(KServerCloseWaitTime);
+		} 
+    }
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::Server
+// -----------------------------------------------------------------------------
+//
+CServer2& CMceServerCore::Server () const
+	{
+	return *iServer;
+	}
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::Manager
+// -----------------------------------------------------------------------------
+//
+CMceSipManager& CMceServerCore::Manager() const
+    {
+    return *iManager;
+    }
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::FCPluginEngine
+// -----------------------------------------------------------------------------
+//
+CFCPlugInEngine& CMceServerCore::FCPluginEngine() const
+	{
+	return *iFCPlugInEngine;
+	}		
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::RegisterFCSession
+// -----------------------------------------------------------------------------
+//
+void CMceServerCore::RegisterFCSessionL( MFCObserver& aFCObserver, 
+                                         const CFCSession& aFCSession )
+    {
+    TMceFCSessionItem item(aFCObserver, aFCSession);
+    iFCSessions.AppendL(item);
+    }
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::DeregisterFCSession
+// -----------------------------------------------------------------------------
+//
+void CMceServerCore::DeregisterFCSession( MFCObserver& aFCObserver, 
+                                          const CFCSession& aFCSession )
+    {
+    TInt count = iFCSessions.Count() - 1;
+    for (int i = count; i > 0; i--)
+    	{
+    	TMceFCSessionItem item = iFCSessions[i];
+    	if (&item.iFCObserver == &aFCObserver && &item.iFCSession == &aFCSession)
+    		{
+    		iFCSessions.Remove(i);
+    		}
+    	(void)item;	
+    	}
+    }
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::FCReceivedData
+// -----------------------------------------------------------------------------
+//
+void CMceServerCore::FCReceivedData( HBufC8* aData, 
+                                     const CFCSession* aFCSession )
+    {
+    TBool found = EFalse;
+    TInt ind = 0;
+    while ( !found && ind < iFCSessions.Count() )
+        {
+        TMceFCSessionItem item = iFCSessions[ ind ];
+        if ( &item.iFCSession == aFCSession )
+            {
+            item.iFCObserver.FCReceivedData( aData, aFCSession );
+            found = ETrue;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMceServerCore::FCErrorNotify
+// -----------------------------------------------------------------------------
+//
+void CMceServerCore::FCErrorNotify( TInt aErrCode, 
+                                    const CFCSession* aFCSession )
+    {
+    TBool found = EFalse;
+    TInt ind = 0;
+    while ( !found && ind < iFCSessions.Count() )
+        {
+        TMceFCSessionItem item = iFCSessions[ ind ];
+        if ( &item.iFCSession == aFCSession )
+            {
+            item.iFCObserver.FCErrorNotify( aErrCode, aFCSession );
+            found = ETrue;
+            }
+        }
+    }
+
+//  End of File