--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpmediaserver/mediaserverclient/src/upnpmediaservernotifier.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,187 @@
+/** @file
+* Copyright (c) 2005-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: Media Server notification handler
+*
+*/
+
+
+// INCLUDE FILES
+#include "upnpmediaservernotifier.h"
+#include "upnpfiletransferevent.h"
+#include "upnpfiletransfereventlist.h"
+#include "upnpmediaserverobserver.h"
+
+
+// ---------------------------------------------------------------------------
+// CUpnpMediaServerNotifier::CUpnpMediaServerNotifier
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CUpnpMediaServerNotifier::CUpnpMediaServerNotifier( MUpnpMediaServerObserver* aObserver) :
+ CActive(EPriorityStandard),
+ iObserver(aObserver),
+ iRespBufSizePkg(iRespBufSize),
+ iReceiveBufferPtr(0,0)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CUpnpMediaServerNotifier::~CUpnpMediaServerNotifier()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CUpnpMediaServerNotifier::~CUpnpMediaServerNotifier()
+ {
+ iMediaServerClient.UnsubscribeEvents();
+ Cancel();
+ iMediaServerClient.Close();
+ delete iReceiveBuffer;
+ }
+
+// ---------------------------------------------------------------------------
+// CUpnpMediaServerNotifier::ConstructL
+// Two-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CUpnpMediaServerNotifier::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ User::LeaveIfError(iMediaServerClient.Connect());
+ iMediaServerClient.SubscribeEvents( iStatus );
+ iPendingAction = ESubscribe;
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CUpnpMediaServerNotifier::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpMediaServerNotifier* CUpnpMediaServerNotifier::NewLC(
+ MUpnpMediaServerObserver* aObserver )
+ {
+ CUpnpMediaServerNotifier* self = new( ELeave ) CUpnpMediaServerNotifier( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CUpnpMediaServerNotifier::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpMediaServerNotifier* CUpnpMediaServerNotifier::NewL(
+ MUpnpMediaServerObserver* aObserver )
+ {
+ CUpnpMediaServerNotifier* self = NewLC( aObserver );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CUpnpMediaServerNotifier::RunL
+// ---------------------------------------------------------------------------
+//
+void CUpnpMediaServerNotifier::RunL()
+ {
+ if (iStatus.Int() < 0)
+ {
+ iObserver->NotifierError(iStatus.Int());
+ return;
+ }
+
+ switch ( iPendingAction )
+ {
+ case ESubscribe:
+ {
+ //starts listening for single events list,
+ //this request may wait for response for a long time
+ iMediaServerClient.ListenTransferEvent(iRespBufSizePkg, iStatus);
+ SetActive();
+ iPendingAction = EListenEvent;
+ break;
+ }
+ case EListenEvent:
+ {
+ //alocates buffer using size returned by ListenTransferEvent()
+ delete iReceiveBuffer;
+ iReceiveBuffer = NULL;
+ iReceiveBuffer = HBufC8::NewL( iRespBufSize );
+ iReceiveBufferPtr.Set( iReceiveBuffer->Des() );
+
+ //requests events list body
+ iMediaServerClient.GetTransferEventBody(iReceiveBufferPtr, iStatus);
+ SetActive();
+ iPendingAction = EGetEventBody;
+ break;
+ }
+ case EGetEventBody:
+ {
+ //internalizes events list from buffer
+ CUpnpFileTransferEventList* eventList = CUpnpFileTransferEventList::NewLC();
+ RDesReadStream stream( iReceiveBufferPtr );
+ CleanupClosePushL( stream );
+ stream >> *eventList;
+ CleanupStack::PopAndDestroy( &stream );
+
+ //listens next events
+ iMediaServerClient.ListenTransferEvent(iRespBufSizePkg, iStatus);
+ SetActive();
+ iPendingAction = EListenEvent;
+
+ //notifies observer
+ TInt count = eventList->GetPointerArray().Count();
+ for (TInt i=0; i<count; i++ )
+ {
+ iObserver->FileTransferEvent(
+ ( CUpnpFileTransferEvent* ) eventList->GetPointerArray()[0] );
+ eventList->GetPointerArray().Remove(0);
+ }
+
+ CleanupStack::PopAndDestroy(eventList);
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CUpnpMediaServerNotifier::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CUpnpMediaServerNotifier::DoCancel( )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CUpnpMediaServerNotifier::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CUpnpMediaServerNotifier::RunError(TInt aError)
+ {
+ iObserver->NotifierError(aError);
+ return KErrNone;
+ }
+
+
+
+
+
+
+
+