Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: src/engine/main.cpp

Issue 10824027: Implement better marshaling (Closed)
Patch Set: Created May 31, 2013, 8:26 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/engine/main.cpp
===================================================================
--- a/src/engine/main.cpp
+++ b/src/engine/main.cpp
@@ -35,35 +35,53 @@ namespace
if (utf8StringLength == 0)
throw std::runtime_error("Failed to determine the required buffer size");
std::string utf8String(utf8StringLength, '\0');
WideCharToMultiByte(CP_UTF8, 0, str.c_str(), length, &utf8String[0], utf8StringLength, 0, 0);
return utf8String;
}
- std::string HandleRequest(const std::vector<std::string>& strings)
+ Communication::OutputBuffer HandleRequest(Communication::InputBuffer& request)
{
- std::string procedureName = strings[0];
+ Communication::OutputBuffer response;
+
+ std::string procedureName;
+ request >> procedureName;
if (procedureName == "Matches")
- return filterEngine->Matches(strings[1], strings[2], strings[3]) ? "1" : "0";
+ {
+ std::string url;
+ std::string type;
+ std::string documentUrl;
+ request >> url >> type >> documentUrl;
+ response << filterEngine->Matches(url, type, documentUrl);
+ }
if (procedureName == "GetElementHidingSelectors")
- return Communication::MarshalStrings(filterEngine->GetElementHidingSelectors(strings[1]));
- return "";
+ {
+ std::string domain;
+ request >> domain;
+
+ std::vector<std::string> selectors = filterEngine->GetElementHidingSelectors(domain);
+
+ int32_t length = selectors.size();
+ response << length;
+ for (int32_t i = 0; i < length; i++)
+ response << selectors[i];
+ }
+ return response;
}
DWORD WINAPI ClientThread(LPVOID param)
{
HANDLE pipe = static_cast<HANDLE>(param);
try
{
- std::string message = Communication::ReadMessage(pipe);
- std::vector<std::string> strings = Communication::UnmarshalStrings(message);
- std::string response = HandleRequest(strings);
+ Communication::InputBuffer message = Communication::ReadMessage(pipe);
+ Communication::OutputBuffer response = HandleRequest(message);
Communication::WriteMessage(pipe, response);
}
catch (const std::exception& e)
{
LogException(e);
}
// TODO: Keep the pipe open until the client disconnects

Powered by Google App Engine
This is Rietveld