simpleengine/engine/src/simpleengineimhandler.cpp
changeset 0 c8caa15ef882
child 12 e6a66db4e9d0
equal deleted inserted replaced
-1:000000000000 0:c8caa15ef882
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    SIMPLE Engine IM Handler
       
    15 *
       
    16 */
       
    17 
       
    18 #include "simpleengineimhandler.h"
       
    19 #include "simpleenginerequest.h"
       
    20 #include "simpleinstantmsgobserver.h"
       
    21 #include "simplesipconnection.h"
       
    22 #ifdef _DEBUG
       
    23 #include "simpledebugutils.h"
       
    24 #endif
       
    25 
       
    26 
       
    27 // ======== MEMBER FUNCTIONS ========
       
    28 
       
    29 
       
    30 // ---------------------------------------------------------------------------
       
    31 // CSimpleEngineImHandler::CSimpleEngineImHandler
       
    32 // ---------------------------------------------------------------------------
       
    33 //
       
    34 CSimpleEngineImHandler::CSimpleEngineImHandler( MSimpleConnection& aConn,
       
    35     MSimpleInstantMsgObserver& aObserver ) : CSimpleClient( aConn ),
       
    36     iObserver( aObserver )
       
    37     {
       
    38     
       
    39     }
       
    40 
       
    41 // ---------------------------------------------------------------------------
       
    42 // CSimpleEngineImHandler::ConstructL
       
    43 // ---------------------------------------------------------------------------
       
    44 //
       
    45 void CSimpleEngineImHandler::ConstructL()
       
    46     {
       
    47     BaseConstructL();
       
    48     
       
    49     // Enable instant message receiving
       
    50     ReceiveInstantMessageL();
       
    51     }
       
    52 
       
    53 // ---------------------------------------------------------------------------
       
    54 // CSimpleEngineImHandler::NewL
       
    55 // ---------------------------------------------------------------------------
       
    56 //
       
    57 CSimpleEngineImHandler* CSimpleEngineImHandler::NewL(
       
    58     MSimpleConnection& aConn,
       
    59     MSimpleInstantMsgObserver& aObserver )
       
    60     {
       
    61     CSimpleEngineImHandler* self = new (ELeave) CSimpleEngineImHandler(
       
    62         aConn, aObserver );
       
    63     CleanupStack::PushL( self );
       
    64     self->ConstructL();
       
    65     CleanupStack::Pop( self );
       
    66 #ifdef _DEBUG
       
    67     TSimpleLogger::Log( _L("CSimpleEngineImHandler::NewL this=%d"),
       
    68         (TInt)self );
       
    69 #endif
       
    70     return self;
       
    71     }
       
    72 
       
    73 // ---------------------------------------------------------------------------
       
    74 // CSimpleEngineImHandler::~CSimpleEngineImHandler
       
    75 // ---------------------------------------------------------------------------
       
    76 //
       
    77 CSimpleEngineImHandler::~CSimpleEngineImHandler()
       
    78     {
       
    79 #ifdef _DEBUG
       
    80     TSimpleLogger::Log(
       
    81         _L("CSimpleEngineImHandler::~CSimpleEngineImHandler this=%d"),
       
    82         (TInt)this );
       
    83 #endif
       
    84     }
       
    85 
       
    86 // ---------------------------------------------------------------------------
       
    87 // From class MSimpleInstantMessage
       
    88 // Send instant message
       
    89 // ---------------------------------------------------------------------------
       
    90 //
       
    91 TInt CSimpleEngineImHandler::SendInstantMessage( TPtrC8 aMsgContent,
       
    92     TPtrC8 aRecipient )
       
    93     {
       
    94 #ifdef _DEBUG
       
    95     TSimpleLogger::Log( _L("CSimpleEngineImHandler::SendInstantMessage") );
       
    96 #endif
       
    97     
       
    98     IncreaseOpId();
       
    99     TRAPD( error, DoSendInstantMessageRequestL( aMsgContent, aRecipient ) )
       
   100     
       
   101     if ( error )
       
   102         {
       
   103         return error;
       
   104         }
       
   105     
       
   106     return iOpId;
       
   107     }
       
   108 
       
   109 // ----------------------------------------------------------
       
   110 // From class MSimpleInstantMessage
       
   111 // CSimpleEngineImHandler::Close
       
   112 // ----------------------------------------------------------
       
   113 //
       
   114 void CSimpleEngineImHandler::Close()
       
   115     {
       
   116     delete this;
       
   117     }
       
   118 
       
   119 // ---------------------------------------------------------------------------
       
   120 // From class CSimpleClient
       
   121 // Complete the open client request
       
   122 // ---------------------------------------------------------------------------
       
   123 //
       
   124 void CSimpleEngineImHandler::Complete( TInt aOpId, TInt aStatus,
       
   125     MSimpleEngineRequest& aReq )
       
   126     {
       
   127 #ifdef _DEBUG
       
   128     TSimpleLogger::Log(
       
   129         _L( "CSimpleEngineImHandler::Complete opid=%d, status=%d - Start"),
       
   130             aOpId, aStatus );
       
   131 #endif
       
   132     
       
   133     if( MSimpleEngineRequest::EReceiveIM == aReq.RequestType() )
       
   134         {
       
   135         if( !aStatus )
       
   136             {
       
   137             iObserver.HandleReceiveTextMessage( aReq.Recipient(),
       
   138                 aReq.ResponseData() );
       
   139             }
       
   140         // Open receive request was already deleted from SIP Utils side
       
   141         // Activate receiving again
       
   142         TRAP_IGNORE( ReceiveInstantMessageL() )
       
   143         }
       
   144     else if( MSimpleEngineRequest::ESendIM == aReq.RequestType() )
       
   145         {
       
   146         iObserver.SendInstantMsgReqComplete( aOpId, aStatus );
       
   147         
       
   148         // Delete the request as not needed anymore
       
   149         
       
   150         iRequest = MSimpleEngineRequest::ENone;
       
   151         // Delete corresponding request from another DLL too.
       
   152         aReq.ModifyType( MSimpleEngineRequest::EDestroy );
       
   153         TRAP_IGNORE( SendReqL( aReq ) );
       
   154         // delete request from this DLL.
       
   155         aReq.Destroy();
       
   156         }
       
   157     else
       
   158         {
       
   159         // Unknown request
       
   160         #ifdef _DEBUG
       
   161             TSimpleLogger::Log(
       
   162                 _L( "CSimpleEngineImHandler::Complete - Unknown request") );
       
   163         #endif
       
   164         }
       
   165     
       
   166 #ifdef _DEBUG
       
   167     TSimpleLogger::Log( _L( "CSimpleEngineImHandler::Complete - End") );
       
   168 #endif
       
   169     }
       
   170 
       
   171 // ---------------------------------------------------------------------------
       
   172 // Do Send Instant Message request
       
   173 // ---------------------------------------------------------------------------
       
   174 //
       
   175 void CSimpleEngineImHandler::DoSendInstantMessageRequestL( TPtrC8 aMsgContent,
       
   176     TPtrC8 aRecipient )
       
   177     {
       
   178 #ifdef _DEBUG
       
   179     TSimpleLogger::Log(
       
   180         _L( "CSimpleEngineImHandler::DoSendInstantMessageRequestL - Start") );
       
   181 #endif
       
   182     CSimpleEngineRequest* req = CSimpleEngineRequest::NewL( *this,
       
   183         MSimpleEngineRequest::ESendIM, iOpId );
       
   184     CleanupStack::PushL( req );
       
   185     
       
   186     req->SetRefresh( ETrue );
       
   187     req->SetRequestData( aMsgContent );
       
   188     req->SetRecipientL( aRecipient );
       
   189     
       
   190     // send a request to engine DLL
       
   191     SendReqL( *req );
       
   192     iRequestList.AddLast( *req );
       
   193     CleanupStack::Pop( req );
       
   194     iRequest = MSimpleEngineRequest::ESendIM;
       
   195     iSipStatus = KErrNone;
       
   196 #ifdef _DEBUG
       
   197     TSimpleLogger::Log(
       
   198         _L( "CSimpleEngineImHandler::DoSendInstantMessageRequestL - End") );
       
   199 #endif
       
   200     }
       
   201 
       
   202 // ---------------------------------------------------------------------------
       
   203 // Receive instant message
       
   204 // ---------------------------------------------------------------------------
       
   205 //
       
   206 void CSimpleEngineImHandler::ReceiveInstantMessageL()   
       
   207     {
       
   208 #ifdef _DEBUG
       
   209     TSimpleLogger::Log(
       
   210         _L( "CSimpleEngineImHandler::ReceiveInstantMessageL - Start") );
       
   211 #endif
       
   212     IncreaseOpId();
       
   213     
       
   214     CSimpleEngineRequest* req = CSimpleEngineRequest::NewL( *this,
       
   215         MSimpleEngineRequest::EReceiveIM, iOpId );
       
   216     CleanupStack::PushL( req );
       
   217     
       
   218     req->SetRefresh( ETrue );
       
   219     // Send a request to engine DLL
       
   220     SendReqL( *req );
       
   221     iRequestList.AddLast( *req );
       
   222     CleanupStack::Pop( req );
       
   223     iRequest = MSimpleEngineRequest::EReceiveIM;
       
   224     iSipStatus = KErrNone;
       
   225 #ifdef _DEBUG
       
   226     TSimpleLogger::Log(
       
   227         _L( "CSimpleEngineImHandler::ReceiveInstantMessageL - End") );
       
   228 #endif 
       
   229     }