summaryrefslogtreecommitdiffstats
path: root/src/uscxml/debug/DebuggerServlet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/debug/DebuggerServlet.cpp')
-rw-r--r--src/uscxml/debug/DebuggerServlet.cpp70
1 files changed, 35 insertions, 35 deletions
diff --git a/src/uscxml/debug/DebuggerServlet.cpp b/src/uscxml/debug/DebuggerServlet.cpp
index a570263..a99aaf8 100644
--- a/src/uscxml/debug/DebuggerServlet.cpp
+++ b/src/uscxml/debug/DebuggerServlet.cpp
@@ -25,24 +25,24 @@ namespace uscxml {
void DebuggerServlet::pushData(boost::shared_ptr<DebugSession> session, Data pushData) {
std::cout << "trying to push " << pushData["replyType"].atom << std::endl;
-
+
if (!session) {
if (_sendQueues.size() > 0) // logging is not aware of its interpreter
_sendQueues.begin()->second.push(pushData);
} else {
_sendQueues[session].push(pushData);
}
-
+
serverPushData(session);
}
void DebuggerServlet::serverPushData(boost::shared_ptr<DebugSession> session) {
if (_sendQueues[session].isEmpty())
return;
-
+
if (!_clientConns[session])
return;
-
+
Data reply = _sendQueues[session].pop();
std::cout << "pushing " << reply["replyType"].atom << std::endl;
returnData(_clientConns[session], reply);
@@ -51,13 +51,13 @@ void DebuggerServlet::serverPushData(boost::shared_ptr<DebugSession> session) {
void DebuggerServlet::returnData(const HTTPServer::Request& request, Data replyData) {
HTTPServer::Reply reply(request);
-
+
if (!replyData.hasKey("status")) {
replyData.compound["status"] = Data("success", Data::VERBATIM);
}
-
+
std::cout << "<- " << replyData << std::endl;
-
+
reply.content = Data::toJSON(replyData);
reply.headers["Access-Control-Allow-Origin"] = "*";
reply.headers["Content-Type"] = "application/json";
@@ -66,8 +66,8 @@ void DebuggerServlet::returnData(const HTTPServer::Request& request, Data replyD
bool DebuggerServlet::isCORS(const HTTPServer::Request& request) {
return (request.data.at("type").atom == "options" &&
- request.data.at("header").hasKey("Origin") &&
- request.data.at("header").hasKey("Access-Control-Request-Method"));
+ request.data.at("header").hasKey("Origin") &&
+ request.data.at("header").hasKey("Access-Control-Request-Method"));
}
void DebuggerServlet::handleCORS(const HTTPServer::Request& request) {
@@ -81,7 +81,7 @@ void DebuggerServlet::handleCORS(const HTTPServer::Request& request) {
corsReply.headers["Access-Control-Allow-Methods"] = request.data.at("header").at("Access-Control-Request-Method").atom;
if (request.data.at("header").hasKey("Access-Control-Request-Headers"))
corsReply.headers["Access-Control-Allow-Headers"] = request.data.at("header").at("Access-Control-Request-Headers").atom;
-
+
// std::cout << "CORS!" << std::endl << request << std::endl;
HTTPServer::reply(corsReply);
}
@@ -89,14 +89,14 @@ void DebuggerServlet::handleCORS(const HTTPServer::Request& request) {
bool DebuggerServlet::httpRecvRequest(const HTTPServer::Request& request) {
if (!request.data.hasKey("path"))
return false; // returnError(request);
-
+
if (isCORS(request)) {
handleCORS(request);
return true;
}
-
+
std::cout << request.data["path"] << ": " << request.data["content"] << std::endl;
-
+
Data replyData;
// process request that don't need a session
if (false) {
@@ -107,7 +107,7 @@ bool DebuggerServlet::httpRecvRequest(const HTTPServer::Request& request) {
processListSessions(request);
return true;
}
-
+
// get session or return error
if (false) {
} else if (!request.data.at("content").hasKey("session")) {
@@ -121,9 +121,9 @@ bool DebuggerServlet::httpRecvRequest(const HTTPServer::Request& request) {
returnData(request, replyData);
return true;
}
-
+
boost::shared_ptr<DebugSession> session = _sessionForId[request.data.at("content").at("session").atom];
-
+
if (false) {
} else if (boost::starts_with(request.data.at("path").atom, "/debug/poll")) {
// save long-standing client poll
@@ -164,7 +164,7 @@ bool DebuggerServlet::httpRecvRequest(const HTTPServer::Request& request) {
} else if (boost::starts_with(request.data.at("path").atom, "/debug/eval")) {
replyData = session->debugEval(request.data["content"]);
}
-
+
if (replyData) {
returnData(request, replyData);
return true;
@@ -177,10 +177,10 @@ bool DebuggerServlet::httpRecvRequest(const HTTPServer::Request& request) {
void DebuggerServlet::processConnect(const HTTPServer::Request& request) {
tthread::lock_guard<tthread::recursive_mutex> lock(_mutex);
std::string sessionId = UUID::getUUID();
-
+
_sessionForId[sessionId] = boost::shared_ptr<DebugSession>(new DebugSession());
_sessionForId[sessionId]->setDebugger(this);
-
+
Data replyData;
replyData.compound["session"] = Data(sessionId, Data::VERBATIM);
replyData.compound["status"] = Data("success", Data::VERBATIM);
@@ -211,18 +211,18 @@ void DebuggerServlet::processDisconnect(const HTTPServer::Request& request) {
_sendQueues.erase(_sessionForId[sessionId]);
_sessionForId.erase(sessionId);
}
-
+
returnData(request, replyData);
}
void DebuggerServlet::processListSessions(const HTTPServer::Request& request) {
Data replyData;
-
+
std::map<std::string, boost::weak_ptr<InterpreterImpl> > instances = Interpreter::getInstances();
for (std::map<std::string, boost::weak_ptr<InterpreterImpl> >::iterator instIter = instances.begin();
- instIter != instances.end();
- instIter++) {
-
+ instIter != instances.end();
+ instIter++) {
+
boost::shared_ptr<InterpreterImpl> instance = instIter->second.lock();
if (instance) {
Data sessionData;
@@ -234,25 +234,25 @@ void DebuggerServlet::processListSessions(const HTTPServer::Request& request) {
replyData.compound["sessions"].array.push_back(sessionData);
}
}
-
+
replyData.compound["status"] = Data("success", Data::VERBATIM);
returnData(request, replyData);
}
void DebuggerServlet::send(google::LogSeverity severity, const char* full_filename,
- const char* base_filename, int line,
- const struct ::tm* tm_time,
- const char* message, size_t message_len) {
-
+ const char* base_filename, int line,
+ const struct ::tm* tm_time,
+ const char* message, size_t message_len) {
+
// _sendQueue is thread-safe, not sure about ToString though
LogMessage msg(severity,
- full_filename,
- base_filename,
- line,
- tm_time,
- std::string(message, message_len),
- ToString(severity, base_filename, line, tm_time, message, message_len));
+ full_filename,
+ base_filename,
+ line,
+ tm_time,
+ std::string(message, message_len),
+ ToString(severity, base_filename, line, tm_time, message, message_len));
msg.compound["replyType"] = Data("log", Data::VERBATIM);
pushData(boost::shared_ptr<DebugSession>(), msg);
}