Logo ROOT  
Reference Guide
RWebWindowWSHandler.hxx
Go to the documentation of this file.
1/// \file RWebWindowWSHandler.hxx
2/// \ingroup WebGui ROOT7
3/// \author Sergey Linev <s.linev@gsi.de>
4/// \date 2018-08-20
5/// \warning This is part of the ROOT 7 prototype! It will change without notice. It might trigger earthquakes. Feedback
6/// is welcome!
7
8/*************************************************************************
9 * Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. *
10 * All rights reserved. *
11 * *
12 * For the licensing terms see $ROOTSYS/LICENSE. *
13 * For the list of contributors see $ROOTSYS/README/CREDITS. *
14 *************************************************************************/
15
16#ifndef ROOT7_RWebWindowWSHandler
17#define ROOT7_RWebWindowWSHandler
18
19#include "THttpWSHandler.h"
20#include "TEnv.h"
21
22#include <ROOT/RWebWindow.hxx>
23
24#include <string>
25
26using namespace std::string_literals;
27
28namespace ROOT {
29namespace Experimental {
30
31/// just wrapper to deliver websockets call-backs to the RWebWindow class
32
34
35protected:
36 Bool_t ProcessBatchHolder(std::shared_ptr<THttpCallArg> &arg) override
37 {
39 }
40
41 void VerifyDefaultPageContent(std::shared_ptr<THttpCallArg> &arg) override
42 {
43 auto version = fWindow.GetClientVersion();
44 if (!version.empty()) {
45 std::string search = "jsrootsys/scripts/JSRootCore."s;
46 std::string replace = version + "/jsrootsys/scripts/JSRootCore."s;
47 // replace link to JSROOT main script to emulate new version
48 arg->ReplaceAllinContent(search, replace, true);
49 arg->AddNoCacheHeader();
50 }
51
52 std::string more_args;
53 const char *ui5source = gEnv->GetValue("WebGui.openui5src","");
54 if (ui5source && *ui5source)
55 more_args.append("openui5src: \""s + ui5source + "\","s);
56 const char *ui5libs = gEnv->GetValue("WebGui.openui5libs","");
57 if (ui5libs && *ui5libs)
58 more_args.append("openui5libs: \""s + ui5libs + "\","s);
59 const char *ui5theme = gEnv->GetValue("WebGui.openui5theme","");
60 if (ui5theme && *ui5theme)
61 more_args.append("openui5theme: \""s + ui5theme + "\","s);
62 auto user_args = fWindow.GetUserArgs();
63 if (!user_args.empty())
64 more_args = "user_args: "s + user_args + ","s;
65
66 if (!more_args.empty()) {
67 std::string search = "JSROOT.ConnectWebWindow({"s;
68 std::string replace = search + more_args;
69 arg->ReplaceAllinContent(search, replace, true);
70 arg->AddNoCacheHeader();
71 }
72 }
73
74public:
75 RWebWindow &fWindow; ///<! window reference
76
77 /// constructor
79 : THttpWSHandler(name, "RWebWindow websockets handler", kFALSE), fWindow(wind)
80 {
81 }
82
83 virtual ~RWebWindowWSHandler() = default;
84
85 /// returns content of default web-page
86 /// THttpWSHandler interface
87 TString GetDefaultPageContent() override { return IsDisabled() ? "" : fWindow.fDefaultPage.c_str(); }
88
89 /// returns true when window allowed to serve files relative to default page
90 Bool_t CanServeFiles() const override { return !IsDisabled(); }
91
92 /// Process websocket request - called from THttpServer thread
93 /// THttpWSHandler interface
94 Bool_t ProcessWS(THttpCallArg *arg) override { return arg && !IsDisabled() ? fWindow.ProcessWS(*arg) : kFALSE; }
95
96 /// Allow processing of WS actions in arbitrary thread
97 Bool_t AllowMTProcess() const override { return fWindow.fProcessMT; }
98
99 /// Allows usage of special threads for send operations
100 Bool_t AllowMTSend() const override { return fWindow.fSendMT; }
101
102 /// React on completion of multi-threaded send operation
103 void CompleteWSSend(UInt_t wsid) override { if (!IsDisabled()) fWindow.CompleteWSSend(wsid); }
104};
105
106} // namespace Experimental
107} // namespace ROOT
108
109#endif
unsigned int UInt_t
Definition: RtypesCore.h:42
const Bool_t kFALSE
Definition: RtypesCore.h:88
bool Bool_t
Definition: RtypesCore.h:59
R__EXTERN TEnv * gEnv
Definition: TEnv.h:171
char name[80]
Definition: TGX11.cxx:109
just wrapper to deliver websockets call-backs to the RWebWindow class
TString GetDefaultPageContent() override
returns content of default web-page THttpWSHandler interface
RWebWindowWSHandler(RWebWindow &wind, const char *name)
constructor
Bool_t AllowMTSend() const override
Allows usage of special threads for send operations.
void CompleteWSSend(UInt_t wsid) override
React on completion of multi-threaded send operation.
Bool_t CanServeFiles() const override
returns true when window allowed to serve files relative to default page
void VerifyDefaultPageContent(std::shared_ptr< THttpCallArg > &arg) override
Method called when default page content is prepared for use By default no-cache header is provided.
RWebWindow & fWindow
! window reference
Bool_t ProcessBatchHolder(std::shared_ptr< THttpCallArg > &arg) override
Method used to accept or reject root_batch_holder.js request.
Bool_t AllowMTProcess() const override
Allow processing of WS actions in arbitrary thread.
Bool_t ProcessWS(THttpCallArg *arg) override
Process websocket request - called from THttpServer thread THttpWSHandler interface.
Represents web window, which can be shown in web browser or any other supported environment.
Definition: RWebWindow.hxx:56
std::string fDefaultPage
! HTML page (or file name) returned when window URL is opened
Definition: RWebWindow.hxx:119
bool ProcessWS(THttpCallArg &arg)
Processing of websockets call-backs, invoked from RWebWindowWSHandler Method invoked from http server...
Definition: RWebWindow.cxx:525
bool fSendMT
! true is special threads should be used for sending data
Definition: RWebWindow.hxx:123
std::string GetUserArgs() const
Returns configured user arguments for web window See SetUserArgs method for more details.
Definition: RWebWindow.cxx:901
bool ProcessBatchHolder(std::shared_ptr< THttpCallArg > &arg)
Process special http request, used to hold headless browser running Such requests should not be repli...
Definition: RWebWindow.cxx:311
void CompleteWSSend(unsigned wsid)
Definition: RWebWindow.cxx:694
bool fProcessMT
! if window event processing performed in dedicated thread
Definition: RWebWindow.hxx:122
std::string GetClientVersion() const
Returns current client version.
Definition: RWebWindow.cxx:880
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Definition: TEnv.cxx:491
Bool_t IsDisabled() const
Returns true when processing of websockets is disabled, set shortly before handler need to be destroy...
Basic string class.
Definition: TString.h:131
VSD Structures.
Definition: StringConv.hxx:21
static constexpr double s