/// <summary>
/// Starts native message processing.
/// </summary>
public void Run()
{
log.Info("host started 0.0.0.1");
m_f.log("host started");
stop.Reset();
while (!stop.WaitOne(0))
{
// process messages from Chrome
//
try
{
//
// read a message
//
string message = port.Read();
// log
//
log.DebugFormat("request message\n{0}", message);
m_f.log("request message " + message);
JObject request = JObject.Parse(message);
//
// execute the request
//
executeMessage(request);
//
// prepare a response
//
JObject reply = new JObject();
if (request["source"] != null)
{
reply["source"] = request["destination"];
}
if (request["destination"] != null)
{
reply["destination"] = request["source"];
}
reply["message"] = new JObject();
reply["message"]["id"] = request["id"];
// identify service
//
reply["extension"] = C_EXTENSION_NAME;
message = reply.ToString(Formatting.None);
// log
//
log.DebugFormat("reply message\n{0}", message);
m_f.log(message);
//
// send response
//
port.Write(message);
}
catch (EndOfInputStreamException)
{
log.Debug("end of input stream");
stop.Set();
}
catch (Exception ex)
{
log.Error("message processing caused an exception", ex);
stop.Set();
throw ex;
}
// process messages from CSReports
//
JObject jMessage = m_messageQueue.Dequeue();
while (jMessage != null)
{
// identify service
//
jMessage["extension"] = C_EXTENSION_NAME;
string message = jMessage.ToString(Formatting.None);
// log
//
log.DebugFormat("reply message\n{0}", message);
m_f.log(message);
//
// send message
//
port.Write(message);
jMessage = m_messageQueue.Dequeue();
}
}
log.Info("host stopped");
m_f.log("host stopped");
m_f.close();
}