16 #ifndef ROOT7_RWebWindowWSHandler
17 #define ROOT7_RWebWindowWSHandler
26 using namespace std::string_literals;
29 namespace Experimental {
33 class RWebWindowWSHandler :
public THttpWSHandler {
36 Bool_t ProcessBatchHolder(std::shared_ptr<THttpCallArg> &arg)
override
38 return IsDisabled() ? kFALSE : fWindow.ProcessBatchHolder(arg);
41 void VerifyDefaultPageContent(std::shared_ptr<THttpCallArg> &arg)
override
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;
48 arg->ReplaceAllinContent(search, replace,
true);
49 arg->AddNoCacheHeader();
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;
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();
78 RWebWindowWSHandler(RWebWindow &wind,
const char *name)
79 : THttpWSHandler(name,
"RWebWindow websockets handler", kFALSE), fWindow(wind)
83 virtual ~RWebWindowWSHandler() =
default;
87 TString GetDefaultPageContent()
override {
return IsDisabled() ?
"" : fWindow.fDefaultPage.c_str(); }
90 Bool_t CanServeFiles()
const override {
return !IsDisabled(); }
94 Bool_t ProcessWS(THttpCallArg *arg)
override {
return arg && !IsDisabled() ? fWindow.ProcessWS(*arg) : kFALSE; }
97 Bool_t AllowMTProcess()
const override {
return fWindow.fProcessMT; }
100 Bool_t AllowMTSend()
const override {
return fWindow.fSendMT; }
103 void CompleteWSSend(UInt_t wsid)
override {
if (!IsDisabled()) fWindow.CompleteWSSend(wsid); }