diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SampleApp/gameengine/Inc/SIPExGameEngine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SampleApp/gameengine/Inc/SIPExGameEngine.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,425 @@ + +/* +* 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: +* +*/ + + + +#ifndef __CSIPEXENGINE_H__ +#define __CSIPEXENGINE_H__ + +// INCLUDES +#include "SIPExGameConstants.h" +#include "SIPExSocketEngineObserver.h" +#include "SIPExSIPEngineObserver.h" + + +// Remove imports in unit test build +#ifdef CPPUNIT_TEST +#undef IMPORT_C +#define IMPORT_C +#endif + +// DATA TYPES + +// FORWARD DECLARATIONS +class MSIPExStateViewNotifier; +class TSIPExState; +class MSIPExGameObserver; +class CSIPExSIPEngine; +class CSIPExSocketEngine; +class TInetAddr; + +// CLASS DECLARATIONS +/** +* The engine class for SIP Example application. +* the networking and SIP messaging. +*/ +class CSIPExEngine +: public CBase, + public MSIPExSIPEngineObserver, + public MSIPExSocketEngineObserver + { + public: + + /** + * Create new instance of GameEngine. + * @param aGameObserver Reference to observing class. + * @returns Pointer to new CSIPExEngine instance. + */ + IMPORT_C static CSIPExEngine* NewL( MSIPExGameObserver& aGameObserver ); + + /** + * Create new instance of GameEngine. + * The GameEngine pointer is left to the CleanupStack + * returned. + * @param aGameObserver Reference to observing class. + * @returns Pointer to new CSIPExEngine instance. + */ + IMPORT_C static CSIPExEngine* NewLC( MSIPExGameObserver& aGameObserver ); + + /** + * Destructor. + */ + IMPORT_C ~CSIPExEngine(); + + public: // public data + + /** + * Enumerations for the application role. + * The inviting peer acts as a client and invited peer as a server. + */ + enum TPeer + { + EUnknown, + EClient, + EServer + }; + + /** + * Game engine states for UI. + */ + enum TEngineState + { + EIdle, + EEnabled, + EActivating, + EActive + }; + + public: // New functions + + /** + * The instant message is send to the remote user. + * Redirects the call to the active State object. + * @param aAddress The address of the recipient. + * @param aMsg The message. + */ + IMPORT_C void SendInstantMsgL( const TDesC& aAddress, const TDesC& aMsg ); + + /** + * Player invites the remote peer to the game. + * Redirectes the call to the active State object. + * @param aAddress The address of the invited peer. + */ + IMPORT_C void InviteL( const TDesC& aAddress ); + + /** + * The SIP profile is enabled. + * Redirectes the call to the active State object. + */ + IMPORT_C void EnableProfileL(); + + /** + * The SIP profile is disabled. + * Redirectes the call to the active State object. + */ + IMPORT_C void DisableProfileL(); + + /** + * The user ends the game. + * Redirectes the call to the active State object. + */ + IMPORT_C void EndGameL(); + + /** + * Resolves whether we should draw cursor or not. + * @return Returns ETrue if the game is in state where we + * should draw cursor (if it is our turn). Otherwise + * EFalse is returned. + */ + IMPORT_C TBool DrawCursor(); + + /** + * Resolves whether we should draw board or not. + * @return Returns ETrue if the game is in state where we + * should draw board (if profile is enabled). Otherwise + * EFalse is returned. + */ + IMPORT_C TBool DrawBoard(); + + /** + * Updates the game state. User has pressed left key. + */ + IMPORT_C void CursorLeft(); + + /** + * Updates the game state. User has pressed right key. + */ + IMPORT_C void CursorRight(); + + /** + * Updates the game state. User has pressed enter key. + */ + IMPORT_C void CursorPressed(); + + /** + * Updatas the game state. User moves the cursor with pointer. + * @param aNewCursorPosition A new cursor column position. + */ + IMPORT_C void MoveCursorL( const TInt aNewCursorPosition ); + + /** + * Returns value in specified place in the board. + * @param aX The place's x coordinate. + * @param aY The place's y coordinate. + * @return The value in specified place. + */ + IMPORT_C TInt BoardValue( TInt aX, TInt aY ); + + /** + * Returns the cursor position. + * @return The cursor's position + */ + IMPORT_C TInt Cursor(); + + /** + * Sets the iNotifier. + * @param aNotifier Reference to the view notifier. + */ + IMPORT_C void SetViewNotifier( MSIPExStateViewNotifier& aNotifier ); + + public: // From socket observer + + /** + * Callback from socket observer. + * Called when the state changes in the socket engine. + * @param aNewState A new state of the socket engine. + */ + void SocketState( TInt aNewState ); + + /** + * Callback from socket observer. + * Called when the data is received from the socket. + * @param aData The data received from the socket. + */ + void SocketData( TDesC8& aData ); + + private: // From SIP observer. See SIPExObserver.h + void InviteReceived( const TDesC8& aFrom, const TUint32 aIapId ); + void InviteReceivedByRemote( const TInt aResponse ); + void InviteDeclinedByRemote( const TInt aResponse ); + void InviteAcceptedByRemote( const TInetAddr& aIPAddress, const TUint32 aIapId ); + void InviteAcceptedByUs(); + void InvitationCancelled(); + void EngineError( TInt aError ); + void CancelFailed(); + void SessionEnded(); + void ConnectionLost(); + void ProfileEnabled( TUint32 aSIPProfileId ); + void ProfileError( TInt aError ); + void IMReceived( const TDesC8& aFrom, + const TDesC8& aMessage ); + void WriteLog( const TDesC8& aLog ); + + private: // New functions + + /** + * Initilizes the game state. + */ + void ResetGame(); + + /** + * Destroys the iSocketEngine. + */ + void DestroySocketEngine(); + + /** + * Changes the active state. + * @param aNewState A reference the to new active state. + */ + void ChangeState( TSIPExState& aNewState ); + + /** + * Send the move to the remote peer. + * @param aX The x coordinate of the move. + * @param aY The y coordinate of the move. + */ + void SendMessage( const TInt aX, const TInt aY ); + + /** + * Shows the text in the status info area. The call is + * redirected to the view notifier. + * @param aTxt The text shown in the status info area. + */ + void StatusInfoL( const TDesC& aTxt ); + + /** + * Shows the text in the info area. The call is redirected + * to the view notifier. + * @param aTxt The text shown in the info area. + */ + void InfoL( const TDesC& aInfoTxt ); + + /** + * Calculates the next free place in cursor's column. + * @return The next free position on the board. + */ + TInt CalculatePos(); + + /** + * Checks if the move is win move. + * @param aX The x coordinate of the move. + * @param aY The y coordinate of the move. + * @return 1 if you won, + * 2 if the remote player has won, + * -1 if not win move. + */ + TInt IsWin( const TInt aX, const TInt aY ); + + /** + * Returns the count of moves in this game. + * @return The count of moves. + */ + TInt Moves(); + + /** + * Sets the specified value in to the specified place in + * the board. + * @param aX The x coordinate value. + * @param aY The y coordinate value. + * @param aValue The value to be set to the (x, y) position. + */ + void SetBoard( const TInt aX, const TInt aY, const TInt aValue ); + + /** + * Increases the moves value by specified amount. + * @param aAmount The amount of the increased moves. + */ + void IncreaseMovesBy( const TInt aAmount ); + + /** + * Set cursor the specified position. + * @param aNewValue The new position value for the cursor. + */ + void SetCursor( const TInt aNewValue ); + + /** + * Returns the peer value. + * @return The iPeer value. + */ + TPeer Peer(); + + /** + * Sets the iPeer's value + * @param aPeer A new value for the iPeer. + */ + void SetPeer( TPeer aPeer ); + + /** + * Sets remote peer's move to the board. + * @param aX The x coordinate value. + * @param aY The y coordinate value. + */ + void SetRemote( const TInt aX, const TInt aY ); + + /** + * The acceptance is asked from the user + * Redirectes the call to the game observer. + * @param aFrom The summoner's address + * @return Whether we accept the invitation or not. + */ + TBool AcceptInvitationL( const TDesC8& aFrom ); + + /** + * Returns the SIP Engine pointer. + * @return The pointer to the CSIPExSIPEngine. The ownership + * is NOT transferred. + */ + CSIPExSIPEngine* SIPEngine(); + + /** + * Returns the socket engine. If the socket engine (iSocketEngine) is + * NULL it will be created. + * @return The pointer to the CSIPExSocketEngine. The ownership + * is NOT transferred. + */ + CSIPExSocketEngine* SocketEngineL(); + + /** + * Returns the game observer reference. + * @return The reference to the MSIPExGameObserver. + */ + MSIPExGameObserver& GameObserver(); + + private: + + /** + * Constructor + * @param aGameObserver The observer reference. + */ + CSIPExEngine( MSIPExGameObserver& aGameObserver ); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + private: // Member variables + // Owned: States + TSIPExState* iStateIdle; + TSIPExState* iStateRegistering; + TSIPExState* iStateRegistered; + TSIPExState* iStateInviting; + TSIPExState* iStateConnecting; + TSIPExState* iStateLocal; + TSIPExState* iStateRemote; + TSIPExState* iStateAcceptingSIP; + + // Not owned: ui notifier + MSIPExStateViewNotifier* iNotifier; + + // Owned: The networking engine + CSIPExSocketEngine* iSocketEngine; + + // Owned: The SIP signaling engine. + CSIPExSIPEngine* iSIPEngine; + + // Observer for game events + MSIPExGameObserver& iGameObserver; + + // Game data + TInt iMoves; + TInt iBoard[ KBoxCountX ][ KBoxCountY ]; + TInt iCursor; + TPeer iPeer; + + // Not owned: Reference to active state + TSIPExState* iActiveState; + + // State classes are friend classes because they need access + // to the engine. + + friend class TSIPExState; + friend class TSIPExStateAcceptingSIP; + friend class TSIPExStateConnecting; + friend class TSIPExStateIdle; + friend class TSIPExStateInviting; + friend class TSIPExStateLocal; + friend class TSIPExStateRegistered; + friend class TSIPExStateRegistering; + friend class TSIPExStateRemote; + + // In unit tests following friend class definitions are needed + #ifdef CPPUNIT_TEST + friend class CGameEngineTest; + friend class CBaseStateTest; + friend class CStateAcceptingSIPTest; + #endif + }; + +#endif // __CSIPEXENGINE_H__ +