File indexing completed on 2025-09-15 09:11:48
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef ROOT7_RWebWindowsManager
0014 #define ROOT7_RWebWindowsManager
0015
0016 #include <memory>
0017 #include <string>
0018 #include <thread>
0019 #include <mutex>
0020 #include <functional>
0021
0022 #include "THttpEngine.h"
0023
0024 #include <ROOT/RWebWindow.hxx>
0025
0026 class THttpServer;
0027 class THttpWSHandler;
0028 class TExec;
0029
0030 namespace ROOT {
0031
0032
0033
0034 using WebWindowShowCallback_t = std::function<bool(RWebWindow &, const RWebDisplayArgs &)>;
0035
0036
0037 using WebWindowDeleteCallback_t = std::function<void(RWebWindow &)>;
0038
0039
0040 class RWebWindowsManager {
0041
0042 friend class RWebWindow;
0043
0044 private:
0045 std::unique_ptr<THttpServer> fServer;
0046 std::string fAddr;
0047 std::string fSessionKey;
0048 bool fUseSessionKey{false};
0049 std::recursive_mutex fMutex;
0050 unsigned fIdCnt{0};
0051 bool fUseHttpThrd{false};
0052 bool fUseSenderThreads{false};
0053 float fLaunchTmout{30.};
0054 bool fExternalProcessEvents{false};
0055 std::unique_ptr<TExec> fAssgnExec;
0056 WebWindowShowCallback_t fShowCallback;
0057 WebWindowDeleteCallback_t fDeleteCallback;
0058
0059
0060 bool IsUseHttpThread() const { return fUseHttpThrd; }
0061
0062
0063 bool IsUseSenderThreads() const { return fUseSenderThreads; }
0064
0065
0066 float GetLaunchTmout() const { return fLaunchTmout; }
0067
0068 void Unregister(RWebWindow &win);
0069
0070
0071 unsigned ShowWindow(RWebWindow &win, const RWebDisplayArgs &args);
0072
0073 int WaitFor(RWebWindow &win, WebWindowWaitFunc_t check, bool timed = false, double tm = -1);
0074
0075 std::string GetUrl(RWebWindow &win, bool remote = false, std::string *produced_key = nullptr);
0076
0077 bool CreateServer(bool with_http = false);
0078
0079 bool InformListener(const std::string &msg);
0080
0081 static std::string GenerateKey(int keylen = 32);
0082
0083 public:
0084 RWebWindowsManager();
0085
0086 ~RWebWindowsManager();
0087
0088
0089 THttpServer *GetServer() const { return fServer.get(); }
0090
0091
0092 std::string GetServerAddr() const { return fAddr; }
0093
0094
0095 void SetShowCallback(WebWindowShowCallback_t func) { fShowCallback = func; }
0096
0097
0098 void SetDeleteCallback(WebWindowDeleteCallback_t func) { fDeleteCallback = func; }
0099
0100 static std::shared_ptr<RWebWindowsManager> &Instance();
0101
0102 std::shared_ptr<RWebWindow> CreateWindow();
0103
0104 void Terminate();
0105
0106 static bool IsMainThrd();
0107 static void AssignMainThrd();
0108
0109 static void SetLoopbackMode(bool on = true);
0110 static bool IsLoopbackMode();
0111
0112 static void SetUseSessionKey(bool on = true);
0113 static void SetUseConnectionKey(bool on = true);
0114 static void SetSingleConnMode(bool on = true);
0115
0116 static void AddServerLocation(const std::string &server_prefix, const std::string &files_path);
0117 static std::map<std::string, std::string> GetServerLocations();
0118 static void ClearServerLocations();
0119 };
0120
0121 }
0122
0123 #endif