uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp
changeset 0 15bf7259bb7c
child 3 d8a3531bc6b8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,219 @@
+/*
+* 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 "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 <alf/alfappui.h>
+#include "alfdecoderserverclient.h"
+#include "alfstreamerconsts.h"
+#include "alfuids.h"
+
+_LIT(KAlfServerThreadName, "alfredserver");
+static void RunServerL()
+    {
+    CActiveScheduler* s=new(ELeave) CActiveScheduler;
+    CleanupStack::PushL(s);
+    CActiveScheduler::Install(s);
+
+    CAlfAppUi* appUiStub = new (ELeave) CAlfAppUi();
+    CleanupStack::PushL(appUiStub);
+    appUiStub->ConstructL(); 
+     
+    CActiveScheduler::Start();
+        
+    CleanupStack::PopAndDestroy(2); 
+    }
+
+TInt AlfThreadFucntion(TAny*)
+    {
+    TInt err = User::RenameThread(KAlfServerThreadName);
+    if ( err != KErrNone )
+        {
+        return err;
+        }
+        
+    // create CCleanup
+    CTrapCleanup * cleanup = CTrapCleanup::New();
+    if (cleanup)
+        {
+        TRAP(err, RunServerL());
+        delete cleanup;
+        }
+
+    return err;
+    }
+
+EXPORT_C void AlfServerStarter::StartL(TRequestStatus& aStatus, TBool aCreateProcess)
+	{
+    TName serverName;
+    TUid appUid = TUid::Uid(KAlfAppServerCoreUid3);
+    _LIT(KServerNameFormat, "%08x_%08x_AppServer");
+    serverName.Format( 
+            KServerNameFormat, 
+            appUid, 
+            appUid.iUid );
+    TFindServer serverFinder(serverName);
+    TFullName fullName;
+    if (serverFinder.Next(fullName) != KErrNone)
+        {
+ 	    const TUidType serverUid(TUid::Uid(0x1000007a),TUid::Uid(0x100039ce),TUid::Uid(0xdabadaba));
+
+		if (aCreateProcess)
+			{
+	    	RProcess server;
+	    	User::LeaveIfError(server.Create(_L("z:\\sys\\bin\\alfserver.exe"),_L(""),serverUid));
+	        server.Rendezvous(aStatus);
+	        if (aStatus!=KRequestPending)
+	            {
+		        server.Kill(0);         // abort startup
+	            }
+	        else
+	            {
+		        server.Resume();        // logon OK - start the server
+	            }
+	        }
+	    else
+	    	{
+    	    RThread serverThread;
+    	    User::LeaveIfError(serverThread.Create(
+	    	        KAlfServerThreadName,
+	    	        AlfThreadFucntion,
+	    	        16384, // magic
+	    	        20000, // uses own heap for now
+	    	        10000000,
+	    	        0,
+	    	        EOwnerThread));
+	    	    
+	    	serverThread.Rendezvous(aStatus);
+	    	serverThread.Resume();
+	    	serverThread.Close();
+	    	}
+        }
+	else
+		{
+		// Someone else already started the server, weird
+		User::Leave(KErrAlreadyExists);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Connect
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RAlfBridgerClient::Connect()
+    {
+	return CreateSession(ALFSTREAMER_SERVER_NAME,TVersion(1,1,1));
+    }
+
+// ---------------------------------------------------------------------------
+// SendSynch
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RAlfBridgerClient::SendSynch(TInt aOp, const TDesC8& aBuffer)
+    {
+    return SendReceive(aOp, TIpcArgs(&aBuffer));
+    }
+
+// ---------------------------------------------------------------------------
+// SendSynch
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RAlfBridgerClient::SendSynch(TInt aOp, const TIpcArgs& aIPCArgs )
+    {
+    return SendReceive(aOp, aIPCArgs );
+    }
+
+// ---------------------------------------------------------------------------
+// SendAsyncronous
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RAlfBridgerClient::SendAsynchronous(TInt aOp, const TIpcArgs& aIPCArgs,TRequestStatus& aStatus )
+    {
+    SendReceive(aOp, aIPCArgs, aStatus );
+    }
+
+// Open
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RAlfTfxClient::Open()
+    {
+    return RAlfBridgerClient::Connect();
+    }
+    
+// ---------------------------------------------------------------------------
+// LoadTfxPlugin
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RAlfTfxClient::LoadTfxPlugin(const TUid& aPluginUid)
+    {
+    return SendReceive(EAlfDecodSLoadPlugin, TIpcArgs(aPluginUid.iUid));
+    }
+    
+// ---------------------------------------------------------------------------
+// UnloadTfxPlugin
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RAlfTfxClient::UnloadTfxPlugin(const TUid& aPluginUid)
+    {
+    SendReceive(EAlfDecodSUnloadPlugin, TIpcArgs(aPluginUid.iUid));
+    }
+    
+// ---------------------------------------------------------------------------
+// SendSynchronousData
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RAlfTfxClient::SendSynchronousData(const TUid& aPluginUid, const TDesC8& aInBuf, TDes8& aOutBuf)
+    {
+    return SendReceive(EAlfDecodSSendSynch, TIpcArgs(aPluginUid.iUid, &aInBuf, &aOutBuf));
+    }
+
+// ---------------------------------------------------------------------------
+// SendAsynchronousData
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RAlfTfxClient::SendAsynchronousData(const TUid& aPluginUid, const TDesC8& aInBuf, TDes8& aOutBuf, TRequestStatus& aStatus)
+    {
+    SendReceive(EAlfDecodSSendAsynch, TIpcArgs(aPluginUid.iUid, &aInBuf, &aOutBuf), aStatus);    
+    }
+    
+// ---------------------------------------------------------------------------
+// CancelAsynchronousData
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RAlfTfxClient::CancelAsynchronousData(const TUid& aPluginUid,TInt aCommandId)
+    {
+    SendReceive(EAlfDecodSCancelAsynch, TIpcArgs(aPluginUid.iUid, aCommandId));
+    }
+
+// ---------------------------------------------------------------------------
+// PrepareFrame
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RAlfTfxClient::PrepareFrame(TUint aEstimatedFrameInterval)
+    {
+    Send(EAlfDecodSPrepareFrame, TIpcArgs(aEstimatedFrameInterval));
+    }
+
+// ---------------------------------------------------------------------------
+// SendSynch
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RAlfBridgerClient::SendBlind(TInt aOp, const TIpcArgs& aIPCArgs )
+    {
+    return Send(aOp, aIPCArgs);
+    }
+
+// end of file