13#ifndef ROOT7_RWebWindowWSHandler
14#define ROOT7_RWebWindowWSHandler
24using namespace std::string_literals;
47 arg->SetContent(
"refused");
59 arg->SetContent(
"refused");
66 if (!version.empty()) {
68 std::string search =
"from './jsrootsys/"s;
69 std::string replace =
"from './"s + version +
"/jsrootsys/"s;
70 arg->ReplaceAllinContent(search, replace);
72 search =
"from './rootui5sys/"s;
73 replace =
"from './"s + version +
"/rootui5sys/"s;
74 arg->ReplaceAllinContent(search, replace);
76 search =
"jsrootsys/scripts/JSRoot.core."s;
77 replace = version +
"/jsrootsys/scripts/JSRoot.core."s;
78 arg->ReplaceAllinContent(search, replace,
true);
79 arg->AddNoCacheHeader();
82 std::string more_args;
84 std::string wskind = arg->GetWSKind();
85 if ((wskind ==
"websocket") && (
GetBoolEnv(
"WebGui.WSLongpoll") == 1))
87 if (!wskind.empty() && (wskind !=
"websocket"))
88 more_args.append(
"socket_kind: \""s + wskind +
"\","s);
89 std::string wsplatform = arg->GetWSPlatform();
90 if (!wsplatform.empty() && (wsplatform !=
"http"))
91 more_args.append(
"platform: \""s + wsplatform +
"\","s);
92 const char *ui5source =
gEnv->
GetValue(
"WebGui.openui5src",
"");
93 if (ui5source && *ui5source)
94 more_args.append(
"openui5src: \""s + ui5source +
"\","s);
95 const char *ui5libs =
gEnv->
GetValue(
"WebGui.openui5libs",
"");
96 if (ui5libs && *ui5libs)
97 more_args.append(
"openui5libs: \""s + ui5libs +
"\","s);
98 const char *ui5theme =
gEnv->
GetValue(
"WebGui.openui5theme",
"");
99 if (ui5theme && *ui5theme)
100 more_args.append(
"openui5theme: \""s + ui5theme +
"\","s);
102 if ((credits > 0) && (credits != 10))
103 more_args.append(
"credits: "s + std::to_string(credits) +
","s);
107 more_args.append(
"winX:"s + std::to_string(
fWindow.
GetX()) +
",winY:"s + std::to_string(
fWindow.
GetY()) +
","s);
109 if (!user_args.empty())
110 more_args.append(
"user_args: "s + user_args +
","s);
111 if (!more_args.empty()) {
112 std::string search =
"connectWebWindow({"s;
113 std::string replace = search + more_args;
114 arg->ReplaceAllinContent(search, replace,
true);
115 arg->AddNoCacheHeader();
just wrapper to deliver websockets call-backs to the RWebWindow class
RWebWindow & fWindow
! window reference
~RWebWindowWSHandler() override=default
Bool_t AllowMTSend() const override
Allows usage of special threads for send operations.
Bool_t CanServeFiles() const override
returns true when window allowed to serve files relative to default page
Bool_t ProcessWS(THttpCallArg *arg) override
Process websocket request - called from THttpServer thread THttpWSHandler interface.
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.
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.
void CompleteWSSend(UInt_t wsid) override
React on completion of multi-threaded send operation.
static int GetBoolEnv(const std::string &name, int dfl=-1)
Parse boolean gEnv variable which should be "yes" or "no".
TString GetDefaultPageContent() override
returns content of default web-page THttpWSHandler interface
RWebWindowWSHandler(RWebWindow &wind, const char *name)
constructor
Represents web window, which can be shown in web browser or any other supported environment.
std::string fDefaultPage
! HTML page (or file name) returned when window URL is opened
bool fSendMT
! true is special threads should be used for sending data
std::string GetClientVersion() const
Returns current client version.
int GetX() const
returns configured window X position (-1 - default)
bool ProcessBatchHolder(std::shared_ptr< THttpCallArg > &arg)
Process special http request, used to hold headless browser running Such requests should not be repli...
unsigned GetHeight() const
returns configured window height (0 - default)
std::string GetConnToken() const
Returns configured connection token.
bool IsRequireAuthKey() const
returns true if authentication string is required
std::string GetUserArgs() const
Returns configured user arguments for web window See SetUserArgs method for more details.
int GetY() const
returns configured window Y position (-1 - default)
bool ProcessWS(THttpCallArg &arg)
Processing of websockets call-backs, invoked from RWebWindowWSHandler Method invoked from http server...
unsigned GetWidth() const
returns configured window width (0 - default) actual window width can be different
bool HasKey(const std::string &key, bool also_newkey=false) const
Returns true if provided key value already exists (in processes map or in existing connections) In sp...
void CompleteWSSend(unsigned wsid)
Complete websocket send operation Clear "doing send" flag and check if next operation has to be start...
bool fProcessMT
! if window event processing performed in dedicated thread
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Contains arguments for single HTTP call.
Class for user-side handling of websocket with THttpServer.
Bool_t IsDisabled() const
Returns true when processing of websockets is disabled, set shortly before handler need to be destroy...
const char * Data() const
This class represents a WWW compatible URL.
const char * GetValueFromOptions(const char *key) const
Return a value for a given key from the URL options.
void SetOptions(const char *opt)
Bool_t HasOption(const char *key) const
Returns true if the given key appears in the URL options list.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...