diff -r 000000000000 -r b16258d2340f applayerprotocols/httptransportfw/Test/T_HttpIntegration/CConsoleReader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerprotocols/httptransportfw/Test/T_HttpIntegration/CConsoleReader.cpp Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,174 @@ +// Copyright (c) 2002-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: +// rev: mjdavey, symbian@mjdss.com, July 2002 +// for: Typhoon (7.0s) & JetStream (8.0) +// +// + +#include "CConsoleReader.h" + +//----------------------------------------------------------------------------- + +CConsoleReader* CConsoleReader::NewL(CConsoleBase& aConsole) +{ +CConsoleReader* self = new (ELeave) CConsoleReader(aConsole); +return self; +} + +//----------------------------------------------------------------------------- + +CConsoleReader::~CConsoleReader() +{ +CActive::Cancel(); +} + +//----------------------------------------------------------------------------- + +CConsoleReader::CConsoleReader(CConsoleBase& aConsole) + : + CActive(EPriorityUserInput), + iConsole(aConsole) +{ +CActiveScheduler::Add(this); +} + +//----------------------------------------------------------------------------- + +void CConsoleReader::ReadLine(TDes& aData, TRequestStatus& aCallbackStatus) +{ +// Set data buffer and call back request status +iData = &aData; +iCallbackStatus = &aCallbackStatus; +*iCallbackStatus = KRequestPending; + +// Set mode +iMode = ELineMode; + +// Issue character request +IssueRequest(); +} + +//----------------------------------------------------------------------------- + +void CConsoleReader::ReadChar(TDes& aData, TRequestStatus& aCallbackStatus) +{ +// Set data buffer and call back request status +iData = &aData; +iCallbackStatus = &aCallbackStatus; +*iCallbackStatus = KRequestPending; + +// Set mode +iMode = ECharMode; + +// Issue character request +IssueRequest(); +} + +//----------------------------------------------------------------------------- + +void CConsoleReader::ReadCancel() +{ +Cancel(); +} + +//----------------------------------------------------------------------------- + +void CConsoleReader::IssueRequest() +{ +__ASSERT_DEBUG( !IsActive(), User::Panic(_L("Reader"), KErrCorrupt) ); + +// Issue read character request +iConsole.Read(iStatus); +// Wait for request to be handled; +SetActive(); +} + +//----------------------------------------------------------------------------- + +void CConsoleReader::RunL() +{ +ProcessKeyPress(TChar(iConsole.KeyCode())); +} + +//----------------------------------------------------------------------------- + +void CConsoleReader::DoCancel() +{ +iConsole.ReadCancel(); +User::RequestComplete(iCallbackStatus, KErrCancel); +} + +//----------------------------------------------------------------------------- + +void CConsoleReader::ProcessKeyPress(TChar aKey) +{ +TBuf<1> charBuf; +charBuf.Format(_L("%d"), (TInt)aKey); + +switch( aKey ) + { + case EKeyBackspace: + case EKeyDelete: + // Reduce the data length and request another key press + if( iData->Length() > 0 ) + { + iData->SetLength(iData->Length() - 1); + iConsole.Write(charBuf); + } + + if( iMode == ECharMode ) + { + // Complete the request + User::RequestComplete(iCallbackStatus, KErrNone); + iCallbackStatus = NULL; + } + else + { + // Get the next key press + IssueRequest(); + } + break; + + case EKeyEnter: + + // Write the new line to the console and complete the callback request status + iConsole.Write(KTxtNewLine); + User::RequestComplete(iCallbackStatus, KErrNone); + iCallbackStatus = NULL; + break; + + default: + // Append to input line, display and request another key press + iData->Append(aKey); + iConsole.Write(charBuf); + if( iMode == ECharMode ) + { + // Add a carriage return + iConsole.Write(KTxtNewLine); + // Complete the request + User::RequestComplete(iCallbackStatus, KErrNone); + iCallbackStatus = NULL; + } + else + // Get the next key press + IssueRequest(); + break; + } +} + +//----------------------------------------------------------------------------- +// End of File +//----------------------------------------------------------------------------- + +