realtimenetprots/sipfw/SampleApp/gameengine/Src/SIPExState.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SampleApp/gameengine/Src/SIPExState.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,487 @@
+
+// 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