mmtestenv/mmtestfw/Source/TestFrameworkServer/ServerConsole.cpp
changeset 32 ae690a8c4a18
parent 31 ae0addfe117e
child 41 f7bf1ed8db72
--- a/mmtestenv/mmtestfw/Source/TestFrameworkServer/ServerConsole.cpp	Fri Jul 09 12:53:09 2010 +0100
+++ b/mmtestenv/mmtestfw/Source/TestFrameworkServer/ServerConsole.cpp	Fri Jul 09 13:09:11 2010 +0100
@@ -48,6 +48,8 @@
  */
 CServerConsole::~CServerConsole()
 	{
+	Cancel();
+	delete iConsoleReader;
 	delete iWindowName;
 	delete iInstructions;
 	delete iConsole;
@@ -62,7 +64,9 @@
  *
  */
 CServerConsole::CServerConsole()
+	:CActive(EPriorityHigh)
 	{
+	CActiveScheduler::Add(this);
 	}
 
 /**
@@ -80,6 +84,7 @@
 	{
 	iWindowName = aName.AllocL();
 	iConsole =  Console::NewL(*iWindowName, TSize(KConsFullScreen,KConsFullScreen));
+	iConsoleReader = CConsoleReader::NewL(*iConsole);
 	}
 
 /**
@@ -119,3 +124,190 @@
 	iConsole->Write(*iInstructions);
 	}
 
+/**
+ *
+ * Starts the console reader listening for input.
+ *
+ * @param	"MConsoleReader& aReader"
+ *			The console reader.
+ *
+ * @xxxx 
+ *
+ */
+void CServerConsole::Read(MConsoleReader& aReader)
+	{
+	iConsoleReader->DoRead(aReader);
+	}
+
+/**
+ *
+ * Stops the console reader listening for input.
+ *
+ *
+ * @xxxx 
+ *
+ */
+void CServerConsole::ReadCancel()
+	{
+	iConsoleReader->Cancel();
+	}
+
+/**
+ *
+ * RunL method for active object CServerConsole.
+ *
+ * @xxxx
+ *
+ */
+void CServerConsole::RunL()
+	{
+	User::LeaveIfError(iStatus.Int());
+	TBool reading = iConsoleReader->IsActive();
+	iConsoleReader->Cancel();
+
+	//listen for key input if we were before...
+	if (reading)
+		iConsoleReader->DoRead();
+	}
+
+/**
+ *
+ * DoCancel method for active object CServerConsole.
+ *
+ * @xxxx
+ *
+ */
+void CServerConsole::DoCancel()
+	{
+	ReadCancel();
+	}
+
+/**
+ *
+ * Error handler for active object CServerConsole.
+ * (Currently a stub)
+ *
+ * @param	"TInt aError"
+ *			The error code
+ *
+ * @return	"TInt"
+ *			The error code
+ *
+ * @xxxx
+ *
+ */
+TInt CServerConsole::RunError(TInt aError)
+	{
+	return aError;
+	}
+
+
+
+/**
+ *
+ * Static constructor for CConsoleReader.
+ *
+ * @param	"CConsoleBase& aConsole"
+ *			The console we are to read
+ *
+ * @return	"CConsoleReader*"
+ *			The constructed CConsoleReader
+ *
+ * @xxxx
+ *
+ */
+CConsoleReader* CConsoleReader::NewL(CConsoleBase& aConsole)
+	{
+	CConsoleReader* s = new(ELeave) CConsoleReader(aConsole);
+	return s;
+	}
+
+/**
+ *
+ * First-phase constructor for CConsoleReader.
+ * Adds itself to the Active Scheduler.
+ *
+ * @param	"CConsoleBase& aConsole"
+ *			console to read from
+ *
+ * @xxxx
+ *
+ */
+CConsoleReader::CConsoleReader(CConsoleBase& aConsole) :
+	CActive(EPriorityUserInput),
+	iConsole(aConsole)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+/**
+ *
+ * Destructor for CConsoleReader.
+ *
+ * @xxxx
+ *
+ */
+CConsoleReader::~CConsoleReader()
+	{
+	Cancel();
+	}
+
+/**
+ *
+ * DoRead method for active object CConsoleReader;
+ * sets client and starts reading
+ *
+ * @param	"MConsoleReader& aClient"
+ *			client MConsoleReader (which will process the input)
+ *
+ * @xxxx
+ *
+ */
+void CConsoleReader::DoRead(MConsoleReader& aClient)
+	{
+	iClient = &aClient;
+	DoRead();
+	}
+
+/**
+ *
+ * DoRead method for active object CConsoleReader;
+ * starts reading from current client
+ *
+ * @xxxx
+ *
+ */
+void CConsoleReader::DoRead()
+	{
+	iConsole.Read(iStatus);
+	SetActive();
+	}
+
+/**
+ *
+ * RunL method for active object CConsoleReader;
+ * fetches a keystroke and sends it to its client for processing.
+ *
+ * @xxxx
+ *
+ */
+void CConsoleReader::RunL()
+	{
+	iKeyStroke = iConsole.KeyCode();
+	if (iStatus.Int())
+		iClient->Error(iStatus.Int());
+	else
+		iClient->InputReceived(iKeyStroke);
+	}
+
+/**
+ *
+ * DoCancel method for active object CConsoleReader
+ *
+ * @xxxx
+ *
+ */
+void CConsoleReader::DoCancel()
+	{
+	iConsole.ReadCancel();
+	}