Moving micasa 1.5 trunk to Novell forge.
This commit is contained in:
102
c_micasad/init/AppHandler.cs
Normal file
102
c_micasad/init/AppHandler.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Text;
|
||||
using sscs.communication;
|
||||
using sscs.common;
|
||||
using sscs.verbs;
|
||||
using sscs.constants;
|
||||
|
||||
class AppHandler
|
||||
{
|
||||
//Data
|
||||
private IPCChannel clientChannel;
|
||||
|
||||
//Methods
|
||||
internal AppHandler(IPCChannel ipcChannel)
|
||||
{
|
||||
clientChannel = ipcChannel;
|
||||
CSSSLogger.ExecutionTrace(this);
|
||||
}
|
||||
|
||||
~AppHandler()
|
||||
{
|
||||
CSSSLogger.ExecutionTrace(this);
|
||||
}
|
||||
|
||||
/* Starts servicing the application. This is called as soon
|
||||
* as a new client connection is established.
|
||||
*/
|
||||
internal int ServiceApp()
|
||||
{
|
||||
SSVerb verb = null;
|
||||
CSSSLogger.ExecutionTrace(this);
|
||||
|
||||
while(true)
|
||||
{
|
||||
byte[] buf = null;
|
||||
|
||||
try
|
||||
{
|
||||
buf = clientChannel.Read();
|
||||
if( null == buf )
|
||||
{
|
||||
return RetCodes.SUCCESS;
|
||||
}
|
||||
RequestParser reqParser = new RequestParser();
|
||||
verb = reqParser.ParseRequest(buf);
|
||||
CSSSLogger.logbreak();
|
||||
CSSSLogger.DbgLog("SSCS going to sevice a :: ** " + verb.GetVerbName() + " **");
|
||||
|
||||
UserIdentifier userId = clientChannel.GetIPCChannelUserId();
|
||||
|
||||
if(null == userId)
|
||||
{
|
||||
CSSSLogger.log(ConstStrings.DEBUG, "In " + CSSSLogger.GetExecutionPath(this) + " a null user is obtained.");
|
||||
return RetCodes.FAILURE;
|
||||
|
||||
}
|
||||
|
||||
buf = verb.ProcessRequest(userId);
|
||||
if ( buf != null)
|
||||
{
|
||||
int retVal = clientChannel.Write(buf);
|
||||
if(retVal < 0)
|
||||
{
|
||||
CSSSLogger.DbgLog("Write failed");
|
||||
return RetCodes.FAILURE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//There must always be something written back to client.
|
||||
return RetCodes.FAILURE;
|
||||
}
|
||||
}
|
||||
catch(CommunicationException e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
throw e;
|
||||
}
|
||||
catch(FormatException e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
throw e;
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
throw e;
|
||||
}
|
||||
|
||||
/* TBD define verb specific heirarchy of exceptions catch
|
||||
* (Some processing problem)
|
||||
*/
|
||||
|
||||
finally
|
||||
{
|
||||
CSSSLogger.DbgLog("SSCS finished processing a SS Verb :: ** " + verb.GetVerbName() + " **");
|
||||
CSSSLogger.logbreak();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user