realtimenetprots/sipfw/SampleApp/gameengine/Src/SIPExState.cpp
author Stefan Karlsson <stefan.karlsson@nokia.com>
Sat, 10 Apr 2010 13:41:16 +0100
branchCompilerCompatibility
changeset 13 4f4a686bcb0a
parent 0 307788aac0a8
permissions -rw-r--r--
Got rid of some trivial warnings (nested comments and tokens after #endif).


// Copyright (c) 2004-2009 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    "SIPExState.h"
#include    "SIPExGameEngine.h"
#include    "SIPExSIPEngine.h"
#include    "SIPExGameObserver.h"

// -----------------------------------------------------------------------------
// TSIPExState::ChangeState
// Changes the active state through the context.
// -----------------------------------------------------------------------------
//
void TSIPExState::ChangeState( CSIPExEngine* aContext, TSIPExState* aNewState )
    {
    aContext->ChangeState( *aNewState );
    }

// -----------------------------------------------------------------------------
// TSIPExState::Info
// Traps the leaving functions. Ignores if leaves.
// -----------------------------------------------------------------------------
//
void TSIPExState::Info( CSIPExEngine* aContext, const TDesC& aText )
    {
    TRAPD( ignore, aContext->InfoL( aText ) );
    }

// -----------------------------------------------------------------------------
// TSIPExState::StatusInfo
// Traps the leaving functions. Ignores if leaves.
// -----------------------------------------------------------------------------
//
void TSIPExState::StatusInfo( CSIPExEngine* aContext, const TDesC& aText )
    {
    TRAPD( ignore, aContext->StatusInfoL( aText ) );
    }

// -----------------------------------------------------------------------------
// TSIPExState::CombineAndShowInfoL
// Combine desc and number value. E.g. aText="Hello", aNum=2, result="Hello 2".
// -----------------------------------------------------------------------------
//
void TSIPExState::CombineAndShowInfoL( 
    CSIPExEngine* aContext, 
    const TDesC& aText, 
    TInt aNum )
    {
    HBufC* buf = HBufC::NewLC( 64 );
    buf->Des().Append( aText );
    buf->Des().AppendNum( aNum );
    Info( aContext, *buf );
    CleanupStack::PopAndDestroy( buf );
    }

// -----------------------------------------------------------------------------
// TSIPExState::InviteReceived
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::InviteReceived( CSIPExEngine* /*aContext*/, 
                const TDesC8& /*aFrom*/, const TUint32 /*aIapId*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::InviteAcceptedByRemote
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::InviteAcceptedByRemote( 
    CSIPExEngine* /*aContext*/, 
    const TInetAddr& /*aIPAddress*/, 
    const TUint32 /*aIapId*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::InviteDeclinedByRemote
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::InviteDeclinedByRemote( 
    CSIPExEngine* /*aContext*/, 
    const TInt /*aResponse*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::InvitationCancelled
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::InvitationCancelled( CSIPExEngine* /*aContext*/) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::CancelFailed
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::CancelFailed( CSIPExEngine* /*aContext*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::ProfileEnabled
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::ProfileEnabled( 
    CSIPExEngine* /*aContext*/, 
    TUint32 /*aSIPProfileId*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::SocketState
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::SocketState( CSIPExEngine* /*aContext*/, TInt /*aNewState*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::SocketData
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::SocketData( CSIPExEngine* /*aContext*/, TDesC8& /*aData*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::EnableProfileL
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::EnableProfileL( CSIPExEngine* /*aContext*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::DisableProfileL
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::DisableProfileL( CSIPExEngine* /*aContext*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::CursorPressed
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::CursorPressed( CSIPExEngine* /*aContext*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::CursorRight
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::CursorRight( CSIPExEngine* /*aContext*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::CursorLeft
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::CursorLeft(  CSIPExEngine* /*aContext*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::MoveCursorL
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::MoveCursorL( 
    CSIPExEngine* /*aContext*/, 
    const TInt /*aNewPosition*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::SendInstantMsgL
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::SendInstantMsgL( 
    CSIPExEngine* /*aContext*/, 
    const TDesC& /*aAddress*/, 
    const TDesC& /*aMsg*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::EndGameL
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::EndGameL( CSIPExEngine* /*aContext*/ ) 
    { 
    }

// -----------------------------------------------------------------------------
// TSIPExState::InviteL
// Default implementation for virtual function.
// -----------------------------------------------------------------------------
//
void TSIPExState::InviteL( CSIPExEngine* /*aContext*/, const TDesC& /*aAddress*/ )
    {
    }

// -----------------------------------------------------------------------------
// TSIPExState::DrawCursor
// Returns always EFalse.
// -----------------------------------------------------------------------------
//
TBool TSIPExState::DrawCursor()
    {
    return EFalse;
    }

// -----------------------------------------------------------------------------
// TSIPExState::DrawBoard
// Returns always ETrue.
// -----------------------------------------------------------------------------
//
TBool TSIPExState::DrawBoard() 
    { 
    return ETrue; 
    }

// -----------------------------------------------------------------------------
// TSIPExState::CalculatePos
// Calculates the position next free position in the cursor's column.
// -----------------------------------------------------------------------------
//
TInt TSIPExState::CalculatePos( CSIPExEngine* aContext )
    {
    TInt y( KErrNotFound );

	for ( TInt i = KBoxCountX - 1; i >= 0; i-- ) 
        {
		if ( aContext->BoardValue( aContext->Cursor(), i ) == -1 ) 
            {
			y = i;
			return y;
		    }
	    }

	return y;
    }

// -----------------------------------------------------------------------------
// TSIPExState::IsWin
// Checks that if the specified move is the win move.
// -----------------------------------------------------------------------------
//
TInt TSIPExState::IsWin( CSIPExEngine* aContext, const TInt aX, const TInt aY )
    {
	TInt ret = -1;

	TInt player = aContext->BoardValue( aX, aY );
	TInt line1 = 1;
	TInt line2 = 1;
	TInt line3 = 1;
	TInt line4 = 1;

	TInt i = 0;
	TInt j = 0;

	for (i = aX + 1; i < 8; i ++) 
        {
		if ( aContext->BoardValue( i, aY ) == player )
			line1 ++;
		else
			break;
	    }

	for (i = aX - 1; i >= 0; i --) 
        {
		if ( aContext->BoardValue( i, aY ) == player )
			line1 ++;
		else
			break;
	    }

	if (line1 >= 4)
		return player;

	for (i = aY + 1; i < 8; i ++) 
        {
		if ( aContext->BoardValue( aX, i ) == player )
			line2 ++;
		else
			break;
	    }

	for (i = aY - 1; i >= 0; i --)
        {
		if ( aContext->BoardValue( aX, i ) == player )
			line2 ++;
		else
			break;
	    }

	if (line2 >= 4)
		return player;


	j = aY;
	for (i = aX + 1; i < 8; i ++) 
        {
		j = j + 1;
		if (j > 7)
			break;

		if ( aContext->BoardValue( i, j ) == player )
			line3 ++;
		else
			break;
	    }

	j = aY;
	for (i = aX - 1; i >= 0; i --) 
        {
		j = j - 1;
		if (j < 0)
			break;

		if ( aContext->BoardValue( i, j ) == player )
			line3 ++;
		else
			break;
	    }

	if (line3 >= 4)
		return player;

	j = aY;
	for (i = aX + 1; i < 8; i ++) 
        {
		j = j - 1;
		if (j < 0)
			break;

		if ( aContext->BoardValue( i, j ) == player )
			line4 ++;
		else
			break;
	    }

	j = aY;
	for (i = aX - 1; i >= 0; i --) 
        {
		j = j + 1;
		if (j > 7)
			break;

		if ( aContext->BoardValue( i, j ) == player )
			line4 ++;
		else
			break;
	    }

	if (line4 >= 4)
		return player;

	return ret;
    }

// -----------------------------------------------------------------------------
// TSIPExState::SessionEnded
// The remote peer has ended the session. 
// The state is changed to Idle and UI is notified.
// -----------------------------------------------------------------------------
//
void TSIPExState::SessionEnded( CSIPExEngine* aContext )
    {
    ChangeState( aContext, aContext->iStateRegistered );
    Info( aContext, KSessionEnded() );
    StatusInfo( aContext, KGameOver() );
    TRAPD( ignore, aContext->SocketEngineL()->Stop() );
    aContext->DestroySocketEngine();
    }

// -----------------------------------------------------------------------------
// TSIPExState::ConnectionLost
// The connection has lost. 
// The state is changed to Idle and UI is notified.
// -----------------------------------------------------------------------------
//
void TSIPExState::ConnectionLost( CSIPExEngine* aContext )
    {
    ChangeState( aContext, aContext->iStateIdle );
    Info( aContext, KConnectionLost() );
    StatusInfo( aContext, KGameOver() );
    }

// -----------------------------------------------------------------------------
// TSIPExState::ProfileError
// The error in profile operation
// The state is changed to Idle and UI is notified.
// -----------------------------------------------------------------------------
//
void TSIPExState::ProfileError( CSIPExEngine* aContext, TInt aError )
    {
    ChangeState( aContext, aContext->iStateIdle );
    TRAPD( ignore, CombineAndShowInfoL( aContext, KProfileError(), aError ) );
    StatusInfo( aContext, KGameOver() );
    }

// -----------------------------------------------------------------------------
// TSIPExState::IMReceived
// The error in profile operation
// The state is changed to Idle and UI is notified.
// -----------------------------------------------------------------------------
//
void TSIPExState::IMReceived( 
    CSIPExEngine* aContext, 
    const TDesC8& aFrom, 
    const TDesC8& aMessage )
    {
    TRAPD( ignore, aContext->GameObserver().IMReceivedL( aFrom, aMessage ) );
    }

// -----------------------------------------------------------------------------
// TSIPExState::EngineError
// The error in SIP Engine
// The state is changed to Idle and UI is notified.
// -----------------------------------------------------------------------------
//
void TSIPExState::EngineError( CSIPExEngine* aContext, TInt aError )
    {
    ChangeState( aContext, aContext->iStateIdle );
    TRAPD( ignore, CombineAndShowInfoL( aContext, KErrorInSIPEngine(), aError ) );
    StatusInfo( aContext, KGameOver() );
    }

// -----------------------------------------------------------------------------
// TSIPExState::InviteReceivedByRemote
// Callback from SIP engine observer.
// The UI is notified.
// -----------------------------------------------------------------------------
//
void TSIPExState::InviteReceivedByRemote( CSIPExEngine* aContext, 
                                          const TInt aResponse )
    {
    TRAPD( ignore, CombineAndShowInfoL( aContext, KProvResponse(), aResponse ) );
    }

// -----------------------------------------------------------------------------
// TSIPExState::InviteAcceptedByUs
// Callback from SIP engine observer.
// The UI is notified.
// -----------------------------------------------------------------------------
//
void TSIPExState::InviteAcceptedByUs( CSIPExEngine* aContext ) 
    { 
    Info( aContext, KAckReceived() ); 
    }

// End of file