// ---------------------------------------------------------------------------- // 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; }; } }