[Libreoffice-commits] online.git: Branch 'private/Ashod/nonblocking' - wsd/LOOLWSD.cpp
Michael Meeks
michael.meeks at collabora.com
Sat Mar 4 23:41:14 UTC 2017
wsd/LOOLWSD.cpp | 39 ++++++++++++++++++++++-----------------
1 file changed, 22 insertions(+), 17 deletions(-)
New commits:
commit 2dbc5ddf4f6988e27241b04f7c55e519221d7c3a
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Sat Mar 4 23:40:07 2017 +0000
Rename members: accept and webserver pieces have cleaner names.
As distinct from the websocket poll per DocumentBroker.
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 755991f..cf9dc33 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -1771,7 +1771,7 @@ private:
}
else if (reqPathTokens.count() > 2 && reqPathTokens[0] == "lool" && reqPathTokens[2] == "ws")
{
- handleClientWsRequest(request, reqPathTokens[1]);
+ handleClientWsUpgrade(request, reqPathTokens[1]);
}
else
{
@@ -2163,7 +2163,7 @@ private:
throw BadRequestException("Invalid or unknown request.");
}
- void handleClientWsRequest(const Poco::Net::HTTPRequest& request, const std::string& url)
+ void handleClientWsUpgrade(const Poco::Net::HTTPRequest& request, const std::string& url)
{
// requestHandler = new ClientRequestHandler();
LOG_INF("Client WS request" << request.getURI() << ", url: " << url);
@@ -2209,7 +2209,9 @@ private:
{
_clientSession = createNewClientSession(ws, _id, uriPublic, docBroker, isReadOnly);
if (_clientSession)
+ {
_clientSession->onConnect(_socket);
+ }
}
if (!docBroker || !_clientSession)
LOG_WRN("Failed to connect DocBroker and Client Session.");
@@ -2348,22 +2350,22 @@ public:
~LOOLWSDServer()
{
stop();
- if (_serverThread.joinable())
- _serverThread.join();
- if (_documentThread.joinable())
- _documentThread.join();
+ if (_acceptThread.joinable())
+ _acceptThread.join();
+ if (_webServerThread.joinable())
+ _webServerThread.join();
}
void start(const int port)
{
std::shared_ptr<ServerSocket> serverSocket = findServerPort(port);
- _serverPoll.insertNewSocket(serverSocket);
+ _acceptPoll.insertNewSocket(serverSocket);
- _serverThread = std::thread(runServer, std::ref(_stop), std::ref(_serverPoll));
+ _acceptThread = std::thread(runServer, std::ref(_stop), std::ref(_acceptPoll));
// TODO loolnb - we need a documentThread per document
- _documentThread = std::thread(runDocument, std::ref(_stop), std::ref(_documentPoll));
+ _webServerThread = std::thread(runDocument, std::ref(_stop), std::ref(_webServerPoll));
}
void stop()
@@ -2379,21 +2381,24 @@ public:
<< " isShuttingDown: " << ShutdownRequestFlag << "\n";
std::cerr << "Server poll:\n";
- _serverPoll.dumpState();
+ _acceptPoll.dumpState();
std::cerr << "Document poll:\n";
- _documentPoll.dumpState();
+ _webServerPoll.dumpState();
}
private:
std::atomic<bool> _stop;
- SocketPoll _serverPoll;
- std::thread _serverThread;
+ /// This thread & poll accepts incoming connections.
+ SocketPoll _acceptPoll;
+ std::thread _acceptThread;
- // TODO loolnb - we need a documentThread per document
- SocketPoll _documentPoll;
- std::thread _documentThread;
+ /// This thread polls basic web serving, and handling of
+ /// websockets before upgrade: when upgraded they go to the
+ /// relevant DocumentBroker poll instead.
+ SocketPoll _webServerPoll;
+ std::thread _webServerThread;
static void runServer(std::atomic<bool>& stop, SocketPoll& serverPoll) {
LOG_INF("Starting master server thread.");
@@ -2418,7 +2423,7 @@ private:
std::shared_ptr<ServerSocket> getServerSocket(const Poco::Net::SocketAddress& addr)
{
- std::shared_ptr<ServerSocket> serverSocket = std::make_shared<ServerSocket>(_documentPoll,
+ std::shared_ptr<ServerSocket> serverSocket = std::make_shared<ServerSocket>(_webServerPoll,
#if ENABLE_SSL
LOOLWSD::isSSLEnabled() ? std::unique_ptr<SocketFactory>{ new SslSocketFactory() } :
#endif
More information about the Libreoffice-commits
mailing list