[Libreoffice-commits] online.git: Branch 'private/Ashod/nonblocking' - net/clientnb.cpp net/loolnb.cpp

Michael Meeks michael.meeks at collabora.com
Thu Feb 16 14:22:31 UTC 2017


 net/clientnb.cpp |   54 ++++++++++++++++++++++++++++++++++++++++++------------
 net/loolnb.cpp   |   14 ++++----------
 2 files changed, 46 insertions(+), 22 deletions(-)

New commits:
commit dc52b96aa756198e75d0fe85a7bbb8db1acf7496
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Thu Feb 16 14:14:12 2017 +0000

    Websocket client test with WS=1

diff --git a/net/clientnb.cpp b/net/clientnb.cpp
index aa123e9..de6576c 100644
--- a/net/clientnb.cpp
+++ b/net/clientnb.cpp
@@ -25,6 +25,7 @@
 #include <Poco/Net/HTTPResponse.h>
 #include <Poco/Net/FilePartSource.h>
 #include <Poco/Net/SSLManager.h>
+#include <Poco/Net/WebSocket.h>
 #include <Poco/Net/KeyConsoleHandler.h>
 #include <Poco/Net/AcceptCertificateHandler.h>
 #include <Poco/StreamCopier.h>
@@ -39,6 +40,7 @@
 using Poco::Net::HTTPClientSession;
 using Poco::Net::HTTPRequest;
 using Poco::Net::HTTPResponse;
+using Poco::Net::WebSocket;
 using Poco::Runnable;
 using Poco::Thread;
 using Poco::URI;
@@ -107,6 +109,15 @@ struct Session
         }
         return number;
     }
+
+    std::shared_ptr<WebSocket> getWebSocket()
+    {
+        _session->setTimeout(Poco::Timespan(10, 0));
+        HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
+        HTTPResponse response;
+        return std::shared_ptr<WebSocket>(
+            new WebSocket(*_session, request, response));
+    }
 };
 
 struct ThreadWorker : public Runnable
@@ -151,25 +162,44 @@ struct Client : public Poco::Util::Application
             snakes[i].join();
     }
 
+    void testWebsocket()
+    {
+        Session session("ws");
+        std::shared_ptr<WebSocket> ws = session.getWebSocket();
+        for (size_t i = 0; i < 10; i++)
+        {
+            ws->sendFrame(&i, sizeof(i), WebSocket::SendFlags::FRAME_BINARY);
+            size_t back[5];
+            int flags = 0;
+            int recvd = ws->receiveFrame((void *)back, sizeof(back), flags);
+            assert(recvd == sizeof(size_t));
+            assert(back[0] == i + 1);
+        }
+    }
+
 public:
     int main(const std::vector<std::string>& /* args */) override
     {
-        Session first("init");
-        Session second("init");
-
-        int count = 42, back;
-        first.sendPing(count);
-        second.sendPing(count + 1);
+        if (getenv("WS"))
+            testWebsocket();
+        else
+        {
+            Session first("init");
+            Session second("init");
 
-        back = first.getResponse();
-        assert (back == count + 1);
+            int count = 42, back;
+            first.sendPing(count);
+            second.sendPing(count + 1);
 
-        back = second.getResponse();
-        assert (back == count + 2);
+            back = first.getResponse();
+            assert (back == count + 1);
 
-        testLadder();
-        testParallel();
+            back = second.getResponse();
+            assert (back == count + 2);
 
+            testLadder();
+            testParallel();
+        }
         return 0;
     }
 };
diff --git a/net/loolnb.cpp b/net/loolnb.cpp
index 5c61a78..01fc3c5 100644
--- a/net/loolnb.cpp
+++ b/net/loolnb.cpp
@@ -210,15 +210,6 @@ void server(SocketPoll& clientPoller)
     }
 }
 
-/// Poll client sockets and do IO.
-void pollAndComm(SocketPoll& poller, std::atomic<bool>& stop)
-{
-    while (!stop)
-    {
-        poller.poll(5000);
-    }
-}
-
 int main(int, const char**)
 {
     // Used to poll client sockets.
@@ -227,7 +218,10 @@ int main(int, const char**)
     // Start the client polling thread.
     Thread threadPoll([&poller](std::atomic<bool>& stop)
     {
-        pollAndComm(poller, stop);
+        while (!stop)
+        {
+            poller.poll(5000);
+        }
     });
 
     // Start the server.


More information about the Libreoffice-commits mailing list