javauis/mmapi_akn/baseline/src/cmmaoutputstreamevent.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 09:48:13 +0300
branchRCL_3
changeset 60 6c158198356e
parent 25 9ac0a0a7da70
permissions -rw-r--r--
Revision: v2.2.9 Kit: 201033

/*
* Copyright (c) 2002 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 post events to the java.
*
*/


#include <jdebug.h>

#include "cmmaoutputstreamevent.h"

CMMAOutputStreamEvent::~CMMAOutputStreamEvent()
	{
		iMutex.Close();
	}
	
CMMAOutputStreamEvent::CMMAOutputStreamEvent(jmethodID aHandleEventMethod,
        jobject aNotifyObject)
        : CMMAEvent(EReusableEvent),
        iHandleEventMethod(aHandleEventMethod),
        iListenerObject(aNotifyObject)
{
    iState = EMMAEventNotActive;
    iMutex.CreateLocal();
}

void CMMAOutputStreamEvent::SetLength(TInt aLength)
{
		iMutex.Wait();
    iLength = aLength;
    iState = EMMAEventActive;
    iMutex.Signal();
}


void CMMAOutputStreamEvent::SetStatus(TInt aStatus)
{
		iMutex.Wait();
    iStatus = aStatus;
    iState = EMMAEventActive;
    iMutex.Signal();
}

void CMMAOutputStreamEvent::SetState(CMMAOutputStreamEvent::TMMAOutputStreamState aState)
{
		iMutex.Wait();
    iState = aState;
    iMutex.Signal();
}

CMMAOutputStreamEvent::TMMAOutputStreamState CMMAOutputStreamEvent::State()
{
    return iState;
}

void CMMAOutputStreamEvent::Dispatch(JNIEnv& aJni)
{
    DEBUG_INT2("CMMAOutputStreamEvent::Dispatch, len=%d status=%d-",
               iLength, iStatus);
		iMutex.Wait();
    if (iState == EMMAEventActive)
    {
        aJni.CallVoidMethod(iListenerObject,
                            iHandleEventMethod,
                            iLength,
                            iStatus);
        iState = EMMAEventNotActive;
    }
    else if (iState == EMMADeleteEvent)
    {
        // This is done because some
        // event may still exist in the event server when
        // the sender has been deleted.

        delete this;
    }
    iMutex.Signal();
    // else event is not active
}

//  END OF FILE