Warning, file /include/root/ROOT/RWebWindowsManager.hxx was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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 float fReconnectTmout{15.};
0055 bool fExternalProcessEvents{false};
0056 std::unique_ptr<TExec> fAssgnExec;
0057 WebWindowShowCallback_t fShowCallback;
0058 WebWindowDeleteCallback_t fDeleteCallback;
0059
0060
0061 bool IsUseHttpThread() const { return fUseHttpThrd; }
0062
0063
0064 bool IsUseSenderThreads() const { return fUseSenderThreads; }
0065
0066
0067 float GetLaunchTmout() const { return fLaunchTmout; }
0068
0069
0070 float GetReconnectTmout() const { return fReconnectTmout; }
0071
0072 void Unregister(RWebWindow &win);
0073
0074
0075 unsigned ShowWindow(RWebWindow &win, const RWebDisplayArgs &args);
0076
0077 int WaitFor(RWebWindow &win, WebWindowWaitFunc_t check, bool timed = false, double tm = -1);
0078
0079 std::string GetUrl(RWebWindow &win, bool remote = false, std::string *produced_key = nullptr);
0080
0081 bool CreateServer(bool with_http = false);
0082
0083 bool InformListener(const std::string &msg);
0084
0085 static std::string GenerateKey(int keylen = 32);
0086
0087 public:
0088 RWebWindowsManager();
0089
0090 ~RWebWindowsManager();
0091
0092
0093 THttpServer *GetServer() const { return fServer.get(); }
0094
0095
0096 std::string GetServerAddr() const { return fAddr; }
0097
0098
0099 void SetShowCallback(WebWindowShowCallback_t func) { fShowCallback = func; }
0100
0101
0102 void SetDeleteCallback(WebWindowDeleteCallback_t func) { fDeleteCallback = func; }
0103
0104 static std::shared_ptr<RWebWindowsManager> &Instance();
0105
0106 std::shared_ptr<RWebWindow> CreateWindow();
0107
0108 void Terminate();
0109
0110 static bool IsMainThrd();
0111 static void AssignMainThrd();
0112
0113 static void SetLoopbackMode(bool on = true);
0114 static bool IsLoopbackMode();
0115
0116 static void SetUseSessionKey(bool on = true);
0117 static void SetUseConnectionKey(bool on = true);
0118 static void SetSingleConnMode(bool on = true);
0119
0120 static void AddServerLocation(const std::string &server_prefix, const std::string &files_path);
0121 static std::map<std::string, std::string> GetServerLocations();
0122 static void ClearServerLocations();
0123 };
0124
0125 }
0126
0127 #endif