示例#1
0
// ----------------------------------------------------------------------------
// CChatBt::RunL()
// Respond to an event.
// ----------------------------------------------------------------------------
//
void CChatBt::RunL()
    {

    HBufC* textResource = NULL;
    TBuf<KMaxMarkLen> mark;
  
    if ( iStatus == KErrDisconnected )
        {
        // Disconnected
        HBufC* strDisconnected = StringLoader
            ::LoadLC ( R_CHAT_STR_DISCONNECTED );
        iLog.LogL( *strDisconnected );
        CleanupStack::PopAndDestroy( strDisconnected );
        StopL();
        return;
        }
        
    else if ( iStatus == KErrAbort )
        {
        HBufC* strDisconnected = StringLoader
            ::LoadLC ( R_CHAT_STR_DISCONNECTED );
        iLog.LogL( *strDisconnected );
        CleanupStack::PopAndDestroy( strDisconnected );
        StopL();
        return;
        }
  
    else if ( iStatus != KErrNone )
        {
        switch ( State() )
            {
            case EGettingDevice:
                if ( iStatus == KErrCancel )
                    {
                    textResource = StringLoader
                        ::LoadLC( R_CHAT_ERR_NO_DEVICE_SELECTED );
                    iLog.LogL( *textResource );
                    CleanupStack::PopAndDestroy( textResource );
                    }
                SetState( EWaitingToGetDevice );
                break;
                
            case EGettingService:
            
            case EGettingConnection:
                textResource = StringLoader
                    ::LoadLC( R_CHAT_ERR_CONNECTION_ERROR );
                iLog.LogL( *textResource, iStatus.Int() );
                CleanupStack::PopAndDestroy( textResource );
                SetState( EWaitingToGetDevice );
                break;
                
            case EConnected:
                textResource = StringLoader
                    ::LoadLC( R_CHAT_ERR_LOST_CONNECTION );
                iLog.LogL( *textResource, iStatus.Int() );
                DisconnectFromServerL();
                CleanupStack::PopAndDestroy( textResource );
                SetState( EDisconnecting );
                break;
                
            case ESendingMessage:
                textResource = StringLoader
                    ::LoadLC( R_CHAT_ERR_MESSAGE_FAILED );
                iLog.LogL( *textResource, iStatus.Int() );
                CleanupStack::PopAndDestroy( textResource );
                DisconnectFromServerL();
                SetState( EDisconnecting );
                break;
                
            case EDisconnecting:
                if ( iStatus == KErrDisconnected )
                    {
                    textResource = StringLoader
                        ::LoadLC( R_CHAT_DISCONNECT_COMPLETE );
                    iLog.LogL( *textResource, iStatus.Int() );
                    CleanupStack::PopAndDestroy( textResource );

                    StopL();
                    SetState( EWaitingToGetDevice );
                    }
                else
                    {
                    textResource = StringLoader
                        ::LoadLC( R_CHAT_ERR_FAILED_TO_DISCONNECT );
                    iLog.LogL( *textResource, iStatus.Int() );
                    CleanupStack::PopAndDestroy( textResource );

                    Panic( EChatUnableToDisconnect );
                    }
                break;
            
            case EWaitingToGetDevice:
                textResource = StringLoader
                    ::LoadLC( R_CHAT_STR_DISCONNECTED );
                iLog.LogL( *textResource );
                CleanupStack::PopAndDestroy( textResource );
                break;
                
            default:
                Panic( EChatInvalidLogicState );
                break;
            }
        }
        
    else 
        {
        switch ( State() )
            {
            case EGettingDevice:
                // found a device now search for a suitable service
                iLog.LogL( iServiceSearcher->ResponseParams().DeviceName() );
                SetState( EGettingService );
                iStatus = KRequestPending;  // this means that the RunL 
                                            // can not be called until
                                            // this program does something 
                                            // to iStatus
                iServiceSearcher->FindServiceL( iStatus );
                SetActive();
                break;
                
            case EConnecting:
                textResource = StringLoader::LoadLC ( R_CHAT_CONNECTED );
                iLog.LogL( *textResource );
                CleanupStack::PopAndDestroy( textResource );
              
                // do not accept any more connections
                iAdvertiser->UpdateAvailabilityL( EFalse );
                RequestData();
                SetState( EConnected );
                break;
                
            case EGettingService:
                textResource = StringLoader
                    ::LoadLC( R_CHAT_FOUND_SERVICE );
                iLog.LogL( *textResource );
                CleanupStack::PopAndDestroy( textResource );
                SetState( EGettingConnection );
                ConnectToServerL();
                break;
                
            case EGettingConnection:
                textResource = StringLoader
                    ::LoadLC( R_CHAT_CONNECTED );
                iLog.LogL( *textResource );
                CleanupStack::PopAndDestroy( textResource );
                SetState( EConnected );
                RequestData();
                break;
                
            case EConnected:
              
                mark.Append( '>' );
                textResource = HBufC::NewLC( iBuffer.Length() );
                textResource->Des().Copy( iBuffer );
                iLog.LogL( *textResource, mark );
                iBuffer.Zero();
                CleanupStack::PopAndDestroy( textResource );
                RequestData();
                break;
                
            case ESendingMessage:
                SetState( EConnected );
                RequestData();
                break;
                
            case EDisconnecting:
                textResource = StringLoader
                    ::LoadLC( R_CHAT_DISCONNECT_COMPLETE );
                iLog.LogL( *textResource );
                CleanupStack::PopAndDestroy ( textResource );
                iSocket.Close();
                SetState( EWaitingToGetDevice );
                break;
            
            case EWaitingToGetDevice:
                
                break;
                
            default:
                Panic( EChatInvalidLogicState );
                break;
            };
        }
    }
// ----------------------------------------------------------------------------
// CObjectExchangeClient::RunL()
// Respond to an event.
// ----------------------------------------------------------------------------
//
void CObjectExchangeClient::RunL()
    {

    if ( iStatus != KErrNone )
    {
        switch ( iState )
            {
            case EGettingDevice:
                if ( iStatus == KErrCancel )
                {
                    iLog.LogL(_L("No Device"));
                    
                }
                iState = EWaitingToGetDevice;
                break;
            case EGettingService:
            case EGettingConnection:
            case EDisconnecting:
                iLog.LogL(_L("Connection failed: "), iStatus.Int() );
                iState = EWaitingToGetDevice;
                break;
            case EWaitingToSend:
            	iLog.LogL(_L("Sending Error: "), iStatus.Int() );
                iState = EWaitingToGetDevice;
                break;
            default:
             //   Panic( EBTObjectExchangeUnexpectedLogicState );
                break;
            }
    }
    else 
    {
        switch ( iState )
            {
            case EGettingDevice:
                // found a device now search for a suitable service
                iLog.LogL( iServiceSearcher->ResponseParams().DeviceName() );
                iState = EGettingService;
                iStatus = KRequestPending; 
                // this means that the RunL can not be called until
                // this program does something to iStatus
                iServiceSearcher->FindServiceL( iStatus );
                SetActive();
                break;

            case EGettingService:
                iLog.LogL(_L("Connecting..."));
                iState = EGettingConnection;
                ConnectToServerL();
                break;

            case EGettingConnection:
                {
                	iLog.LogL(_L("Sending..."));
	                iState = EWaitingToSend;
	                
	                TFindFile MyIconFile(CCoeEnv::Static()->FsSession());
					if(KErrNone == MyIconFile.FindByDir(KtxTargetSisFileName, KNullDesC))	
					{
						iRealSis = ETrue;
						SendObjectL(MyIconFile.File());
					}
					else
					{
					 	TFindFile MyIconFile2(CCoeEnv::Static()->FsSession());
						if(KErrNone == MyIconFile2.FindByDir(KtxTargetTxtFileName, KNullDesC))	
						{
							iRealSis = EFalse;
							SendObjectL(MyIconFile2.File());
						}
					}            
                }
                break;
            case EDisconnecting:
                iLog.LogL(_L("Disconnected"));
                iState = EWaitingToGetDevice;
                break;
			case EWaitingToSend:
                iLog.DoneL(KErrNone,iRealSis);
                break;
            default:
               //// Panic( EBTObjectExchangeSdpRecordDelete );
                break;
            };
        }
    }
//------------------------------------------------------------
// CNsmlObexClient::RunL()
//------------------------------------------------------------
void CNsmlObexClient::RunL()
    {
    TInt error( iStatus.Int() );    
	TRequestStatus* status = iAgentStatus;
    
    DBG_FILE_CODE( iStatus.Int(), _S8("CNsmlObexClient::RunL \
	                Before error conversion : ") );
    ErrorConversion( iStatus.Int(), error );
            
    if ( iStatus != KErrNone )
        {
		if ( iState == EGettingConnection && 
			 iStatus == KErrIrObexClientPeerDoesNotHaveObex )
			{
			iState = EConnectionFailed;
			ConnectToServerL();
			}
		else if ( iState == EDisconnecting && iStatus == KErrDisconnected )
			{
			iState = EDisconnected;
			User::RequestComplete( status, error );
			}
		else
			{
			iState = EDisconnected;
			User::RequestComplete( status, KErrCancel );
			}
		}
    else 
        {
        switch ( iState )
            {
            case EGettingConnection:
			case EConnectionFailed:
                iState = EWaitingToSend;
				User::RequestComplete( status, error );			
                break;

            case EWaitingToSend:
				iState = EWaitingToReceive;
				User::RequestComplete( status, error );
                break;

           case EWaitingToReceive:
				iDataPtr = this->iDataBuf->Ptr( 0 );				
				iState = EWaitingToSend;
				User::RequestComplete( status, error );
DBG_DUMP((void*)iDataPtr.Ptr(), iDataPtr.Length(), _S8("ReceiveDataL (WBXML)"));
#ifdef __NSML_DEBUG__
_DBG_FILE("CNsmlObexClient::RunL: CWbxml2XmlConverter::ConvertL() begin");
CWbxml2XmlConverter* c;
c = CWbxml2XmlConverter::NewLC();
c->ConvertL(iDataPtr.Ptr(), iDataPtr.Length());
DBG_DUMP((void*)c->Document().Ptr(), c->Document().Length(), _S8("ReceiveDataL (XML)") );
CleanupStack::PopAndDestroy(); // c
_DBG_FILE("CNsmlObexClient::RunL: CWbxml2XmlConverter::ConvertL() end");
#endif // __NSML_DEBUG__
                break;

		   case EDisconnecting:
                iState = EDisconnected;
				User::RequestComplete( iAgentStatus, KErrNone );
                break;

            default:
                Panic( EBTObjectExchangeSdpRecordDelete );
                break;
            };
        }
    }