loleaflet/src/core/Socket.js |    3 +++
 loolwsd/LOOLWSD.cpp          |   16 +++++++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

New commits:
commit 9fc5ffc59244f6ca4f1d876e95ef9823b1cbab48
Author: Jan Holesovsky <[email protected]>
Date:   Mon Mar 14 16:53:31 2016 +0100

    loolwsd, loleaflet: Let the server know when we are closing the connection.
    
    This is to distinguish the deliberate close of connection, and timeout,
    connection drop, or forced close.

diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 2420d91..110b98e 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -20,6 +20,9 @@ L.Socket = L.Class.extend({
        },
 
        close: function () {
+               // mark this as a deliberate shutdown
+               this.sendMessage('closeconnection');
+
                this.socket.onerror = function () {};
                this.socket.onclose = function () {};
                this.socket.onmessage = function () {};
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 7387d27..ff3ddbc 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -382,6 +382,7 @@ public:
         Thread queueHandlerThread;
         QueueHandler handler(queue);
         Poco::Timespan waitTime(LOOLWSD::POLL_TIMEOUT);
+        bool normalShutdown = false;
 
         try
         {
@@ -436,6 +437,9 @@ public:
                             std::string firstLine = getFirstLine(buffer, n);
                             StringTokenizer tokens(firstLine, " ", 
StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
 
+                            if (tokens.count() == 1 && tokens[0] == 
"closeconnection")
+                                normalShutdown = true;
+
                             if ((flags & 
WebSocket::FrameFlags::FRAME_FLAG_FIN) != WebSocket::FrameFlags::FRAME_FLAG_FIN)
                             {
                                 // One WS message split into multiple frames.
@@ -484,9 +488,19 @@ public:
                 while (!LOOLWSD::isShutDown &&
                         (!pollTimeout || (n > 0 && (flags & 
WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE)));
 
+                if (normalShutdown)
+                {
+                    
Application::instance().logger().information(Util::logPrefix() + "Deliberate 
shutdown, clearing the queue.");
+                    queue.clear();
+                }
+                else
+                {
+                    
Application::instance().logger().information(Util::logPrefix() + 
"Non-deliberate shutdown, saving the document before tearing down.");
+                    queue.put("uno .uno:Save");
+                }
+
                 Application::instance().logger().information(Util::logPrefix() 
+ "Finished the websocket handling.");
 
-                queue.clear();
                 queue.put("eof");
                 queueHandlerThread.join();
 
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to