Logo ROOT  
Reference Guide
ROOT::Experimental::RWebWindow Class Reference

Represents web window, which can be shown in web browser or any other supported environment.

Window can be configured to run either in the normal or in the batch (headless) mode. In second case no any graphical elements will be created. For the normal window one can configure geometry (width and height), which are applied when window shown.

Each window can be shown several times (if allowed) in different places - either as the CEF (chromium embedded) window or in the standard web browser. When started, window will open and show HTML page, configured with RWebWindow::SetDefaultPage() method.

Typically (but not necessarily) clients open web socket connection to the window and one can exchange data, using RWebWindow::Send() method and call-back function assigned via RWebWindow::SetDataCallBack().

Definition at line 53 of file RWebWindow.hxx.

Classes

struct  QueueEntry
 
struct  QueueItem
 
struct  WebConn
 

Public Member Functions

 RWebWindow ()
 RWebWindow constructor Should be defined here because of std::unique_ptr<RWebWindowWSHandler> More...
 
 ~RWebWindow ()
 RWebWindow destructor Closes all connections and remove window from manager. More...
 
void AssignThreadId ()
 Assign thread id which has to be used for callbacks WARNING!!! only for expert use Automatically done at the moment when any callback function is invoked Can be invoked once again if window Run method will be invoked from other thread Normally should be invoked before Show() method is called. More...
 
bool CanSend (unsigned connid, bool direct=true) const
 Returns true if sending via specified connection can be performed. More...
 
void CloseConnection (unsigned connid)
 Close specified connection. More...
 
void CloseConnections ()
 Closes all connection to clients Normally leads to closing of all correspondent browser windows Some browsers (like firefox) do not allow by default to close window. More...
 
std::string GetAddr () const
 Returns window address which is used in URL. More...
 
std::string GetClientVersion () const
 Returns current client version. More...
 
unsigned GetConnectionId (int num=0) const
 Returns connection id for specified connection sequence number Only active connections are returned - where clients confirms connection Total number of connections can be retrieved with NumConnections() method. More...
 
unsigned GetConnLimit () const
 returns configured connections limit (0 - default) More...
 
unsigned GetDisplayConnection () const
 Returns first connection id where window is displayed It could be that connection(s) not yet fully established - but also not timed out Batch jobs will be ignored here Returns 0 if connection not exists. More...
 
unsigned GetHeight () const
 returns configured window height (0 - default) More...
 
unsigned GetId () const
 Returns ID for the window - unique inside window manager. More...
 
std::shared_ptr< RWebWindowsManagerGetManager () const
 Returns window manager. More...
 
unsigned GetMaxQueueLength () const
 Return maximal queue length of data which can be held by window. More...
 
float GetOperationTmout () const
 Returns timeout for synchronous WebWindow operations. More...
 
std::string GetRelativeAddr (const RWebWindow &win) const
 Returns relative URL address for the specified window Address can be required if one needs to access data from one window into another window Used for instance when inserting panel into canvas. More...
 
std::string GetRelativeAddr (const std::shared_ptr< RWebWindow > &win) const
 Returns relative URL address for the specified window Address can be required if one needs to access data from one window into another window Used for instance when inserting panel into canvas. More...
 
int GetSendQueueLength (unsigned connid) const
 Returns send queue length for specified connection. More...
 
THttpServerGetServer ()
 Return THttpServer instance serving requests to the window. More...
 
std::string GetUrl (bool remote=true)
 Return URL string to access web window. More...
 
std::string GetUserArgs () const
 Returns configured user arguments for web window See SetUserArgs method for more details. More...
 
unsigned GetWidth () const
 returns configured window width (0 - default) actual window width can be different More...
 
bool HasConnection (unsigned connid=0, bool only_active=true) const
 returns true if specified connection id exists More...
 
bool IsNativeOnlyConn () const
 returns true if only native (own-created) connections are allowed More...
 
bool IsShown () const
 Returns true when window was shown at least once. More...
 
int NumConnections (bool with_pending=false) const
 Returns current number of active clients connections. More...
 
void RecordData (const std::string &fname="protocol.json", const std::string &fprefix="")
 Configures recording of communication data in protocol file Provided filename will be used to store JSON array with names of written files - text or binary If data was send from client, "send" entry will be placed. More...
 
void Run (double tm=0.)
 Run window functionality for specified time If no action can be performed - just sleep specified time. More...
 
void Send (unsigned connid, const std::string &data)
 Sends data to specified connection. More...
 
void SendBinary (unsigned connid, const void *data, std::size_t len)
 Send binary data to specified connection. More...
 
void SendBinary (unsigned connid, std::string &&data)
 Send binary data to specified connection. More...
 
void SetCallBacks (WebWindowConnectCallback_t conn, WebWindowDataCallback_t data, WebWindowConnectCallback_t disconn=nullptr)
 Set call-backs function for connect, data and disconnect events. More...
 
void SetClientVersion (const std::string &vers)
 Set client version, used as prefix in scripts URL When changed, web browser will reload all related JS files while full URL will be different Default is empty value - no extra string in URL Version should be string like "1.2" or "ver1.subv2" and not contain any special symbols. More...
 
void SetConnectCallBack (WebWindowConnectCallback_t func)
 Set call-back function for new connection. More...
 
void SetConnLimit (unsigned lmt=0)
 Configure maximal number of allowed connections - 0 is unlimited Will not affect already existing connections Default is 1 - the only client is allowed. More...
 
void SetConnToken (const std::string &token="")
 Configures connection token (default none) When specified, in URL of webpage such token should be provided as &token=value parameter, otherwise web window will refuse connection. More...
 
void SetDataCallBack (WebWindowDataCallback_t func)
 Set call-back function for data, received from the clients via websocket. More...
 
void SetDefaultPage (const std::string &page)
 Set content of default window HTML page This page returns when URL address of the window will be requested Either HTML code or file name in the form "file:/home/user/data/file.htm" One also can using default locations like "file:rootui5sys/canv/canvas.html". More...
 
void SetDisconnectCallBack (WebWindowConnectCallback_t func)
 Set call-back function for disconnecting. More...
 
void SetGeometry (unsigned width, unsigned height)
 Set window geometry. Will be applied if supported by used web display (like CEF or Chromium) More...
 
void SetMaxQueueLength (unsigned len=10)
 configures maximal queue length of data which can be held by window More...
 
void SetNativeOnlyConn (bool on=true)
 configures that only native (own-created) connections are allowed More...
 
void SetOperationTmout (float tm=50.)
 Set timeout for synchronous WebWindow operations. More...
 
void SetPanelName (const std::string &name)
 Configure window to show some of existing JSROOT panels It uses "file:rootui5sys/panel/panel.html" as default HTML page At the moment only FitPanel is existing. More...
 
void SetUserArgs (const std::string &args)
 Set arbitrary JSON data, which is accessible via conn.getUserArgs() method in JavaScript This JSON code injected into main HTML document into connectWebWindow({}) Must be set before RWebWindow::Show() method is called. More...
 
unsigned Show (const RWebDisplayArgs &args="")
 Show window in specified location. More...
 
void StartThread ()
 Start special thread which will be used by the window to handle all callbacks One has to be sure, that access to global ROOT structures are minimized and protected with ROOT::EnableThreadSafety(); call. More...
 
void StopThread ()
 Stop special thread. More...
 
void Sync ()
 Special method to process all internal activity when window runs in separate thread. More...
 
void TerminateROOT ()
 Terminate ROOT session Tries to correctly close THttpServer, associated with RWebWindowsManager After that exit from process. More...
 
void UseServerThreads ()
 Let use THttpServer threads to process requests WARNING!!! only for expert use Should be only used when application provides proper locking and does not block. More...
 
int WaitFor (WebWindowWaitFunc_t check)
 Waits until provided check function or lambdas returns non-zero value Check function has following signature: int func(double spent_tm) Waiting will be continued, if function returns zero. More...
 
int WaitForTimed (WebWindowWaitFunc_t check)
 Waits until provided check function or lambdas returns non-zero value Check function has following signature: int func(double spent_tm) Waiting will be continued, if function returns zero. More...
 
int WaitForTimed (WebWindowWaitFunc_t check, double duration)
 Waits until provided check function or lambdas returns non-zero value Check function has following signature: int func(double spent_tm) Waiting will be continued, if function returns zero. More...
 

Static Public Member Functions

static std::shared_ptr< RWebWindowCreate ()
 Create new RWebWindow Using default RWebWindowsManager. More...
 
static unsigned ShowWindow (std::shared_ptr< RWebWindow > window, const RWebDisplayArgs &args="")
 Static method to show web window Has to be used instead of RWebWindow::Show() when window potentially can be embed into other windows Soon RWebWindow::Show() method will be done protected. More...
 

Private Types

using ConnectionsList_t = std::vector< std::shared_ptr< WebConn > >
 
enum  EQueueEntryKind { kind_None , kind_Connect , kind_Data , kind_Disconnect }
 
using timestamp_t = std::chrono::time_point< std::chrono::system_clock >
 

Private Member Functions

std::shared_ptr< WebConn_FindConnWithKey (const std::string &key) const
 Find connection with specified key. More...
 
std::string _MakeSendHeader (std::shared_ptr< WebConn > &conn, bool txt, const std::string &data, int chid)
 Internal method to prepare text part of send data Should be called under locked connection mutex. More...
 
unsigned AddDisplayHandle (bool headless_mode, const std::string &key, std::unique_ptr< RWebDisplayHandle > &handle)
 Add display handle and associated key Key is random number generated when starting new window When client is connected, key should be supplied to correctly identify it. More...
 
unsigned AddEmbedWindow (std::shared_ptr< RWebWindow > window, int channel)
 Add embed window. More...
 
void CheckDataToSend (bool only_once=false)
 Checks if new data can be send (internal use only) If necessary, provide credits to the client. More...
 
bool CheckDataToSend (std::shared_ptr< WebConn > &conn)
 Checks if one should send data for specified connection Returns true when send operation was performed. More...
 
void CheckInactiveConnections ()
 Check if there are connection which are inactive for longer time For instance, batch browser will be stopped if no activity for 30 sec is there. More...
 
void CheckPendingConnections ()
 Check if started process(es) establish connection. More...
 
void CheckThreadAssign ()
 Internal method to verify and thread id has to be assigned from manager again Special case when ProcessMT was enabled just until thread id will be assigned. More...
 
void CompleteWSSend (unsigned wsid)
 Complete websocket send operation Clear "doing send" flag and check if next operation has to be started. More...
 
std::shared_ptr< RWebWindowWSHandlerCreateWSHandler (std::shared_ptr< RWebWindowsManager > mgr, unsigned id, double tmout)
 Assigns manager reference, window id and creates websocket handler, used for communication with the clients. More...
 
std::shared_ptr< WebConnFindConnection (unsigned wsid)
 Find connection with specified websocket id. More...
 
unsigned FindHeadlessConnection ()
 Returns connection id of window running in headless mode This can be special connection which may run picture production jobs in background Connection to that job may not be initialized yet If connection does not exists, returns 0. More...
 
std::shared_ptr< WebConnFindOrCreateConnection (unsigned wsid, bool make_new, const char *query)
 Find connection with given websocket id. More...
 
ConnectionsList_t GetConnections (unsigned connid=0, bool only_active=false) const
 returns connection list (or all active connections) More...
 
std::string GetConnToken () const
 Returns configured connection token. More...
 
bool HasKey (const std::string &key) const
 Returns true if provided key value already exists (in processes map or in existing connections) More...
 
void InvokeCallbacks (bool force=false)
 Invoke callbacks with existing data Must be called from appropriate thread. More...
 
unsigned MakeHeadless (bool create_new=false)
 Start headless browser for specified window Normally only single instance is used, but many can be created See ROOT::Experimental::RWebWindowsManager::Show() docu for more info returns (future) connection id (or 0 when fails) More...
 
bool ProcessBatchHolder (std::shared_ptr< THttpCallArg > &arg)
 Process special http request, used to hold headless browser running Such requests should not be replied for the long time Be aware that function called directly from THttpServer thread, which is not same thread as window. More...
 
bool ProcessWS (THttpCallArg &arg)
 Processing of websockets call-backs, invoked from RWebWindowWSHandler Method invoked from http server thread, therefore appropriate mutex must be used on all relevant data. More...
 
void ProvideQueueEntry (unsigned connid, EQueueEntryKind kind, std::string &&arg)
 Provide data to user callback User callback must be executed in the window thread. More...
 
std::shared_ptr< WebConnRemoveConnection (unsigned wsid)
 Remove connection with given websocket id. More...
 
void RemoveEmbedWindow (unsigned connid, int channel)
 Remove RWebWindow associated with the channel. More...
 
void SubmitData (unsigned connid, bool txt, std::string &&data, int chid=1)
 Internal method to send data. More...
 

Private Attributes

std::thread::id fCallbacksThrdId
 ! thread id where callbacks should be invoked More...
 
bool fCallbacksThrdIdSet {false}
 ! flag indicating that thread id is assigned More...
 
std::string fClientVersion
 ! configured client version, used as prefix in scripts URL More...
 
ConnectionsList_t fConn
 ! list of all accepted connections More...
 
WebWindowConnectCallback_t fConnCallback
 ! callback for connect event More...
 
unsigned fConnCnt {0}
 ! counter of new connections to assign ids More...
 
unsigned fConnLimit {1}
 ! number of allowed active connections More...
 
std::mutex fConnMutex
 ! mutex used to protect connection list More...
 
std::string fConnToken
 ! value of "token" URL parameter which should be provided for connecting window More...
 
WebWindowDataCallback_t fDataCallback
 ! main callback when data over channel 1 is arrived More...
 
std::string fDefaultPage
 ! HTML page (or file name) returned when window URL is opened More...
 
WebWindowConnectCallback_t fDisconnCallback
 ! callback for disconnect event More...
 
bool fHasWindowThrd {false}
 ! indicate if special window thread was started More...
 
unsigned fHeight {0}
 ! initial window height when displayed More...
 
unsigned fId {0}
 ! unique identifier More...
 
std::queue< QueueEntryfInputQueue
 ! input queue for all callbacks More...
 
std::mutex fInputQueueMutex
 ! mutex to protect input queue More...
 
std::shared_ptr< RWebWindowfMaster
 ! master window where this window is embedded More...
 
int fMasterChannel {-1}
 ! channel id in the master window More...
 
unsigned fMasterConnId {0}
 ! master connection id More...
 
unsigned fMaxQueueLength {10}
 ! maximal number of queue entries More...
 
std::shared_ptr< RWebWindowsManagerfMgr
 ! display manager More...
 
bool fNativeOnlyConn {false}
 ! only native connection are allowed, created by Show() method More...
 
float fOperationTmout {50.}
 ! timeout in seconds to perform synchronous operation, default 50s More...
 
std::string fPanelName
 ! panel name which should be shown in the window More...
 
ConnectionsList_t fPendingConn
 ! list of pending connection with pre-assigned keys More...
 
bool fProcessMT {false}
 ! if window event processing performed in dedicated thread More...
 
std::string fProtocol
 ! protocol More...
 
int fProtocolCnt {-1}
 ! counter for protocol recording More...
 
unsigned fProtocolConnId {0}
 ! connection id, which is used for writing protocol More...
 
std::string fProtocolFileName
 ! local file where communication protocol will be written More...
 
std::string fProtocolPrefix
 ! prefix for created files names More...
 
bool fSendMT {false}
 ! true is special threads should be used for sending data More...
 
std::string fUserArgs
 ! arbitrary JSON code, which is accessible via conn.getUserArgs() method More...
 
bool fUseServerThreads {false}
 ! indicates that server thread is using, no special window thread More...
 
unsigned fWidth {0}
 ! initial window width when displayed More...
 
std::thread fWindowThrd
 ! special thread for that window More...
 
std::shared_ptr< RWebWindowWSHandlerfWSHandler
 ! specialize websocket handler for all incoming connections More...
 

Friends

class RWebDisplayHandle
 
class RWebWindowsManager
 
class RWebWindowWSHandler
 

#include <ROOT/RWebWindow.hxx>

Member Typedef Documentation

◆ ConnectionsList_t

using ROOT::Experimental::RWebWindow::ConnectionsList_t = std::vector<std::shared_ptr<WebConn> >
private

Definition at line 111 of file RWebWindow.hxx.

◆ timestamp_t

using ROOT::Experimental::RWebWindow::timestamp_t = std::chrono::time_point<std::chrono::system_clock>
private

Definition at line 60 of file RWebWindow.hxx.

Member Enumeration Documentation

◆ EQueueEntryKind

Enumerator
kind_None 
kind_Connect 
kind_Data 
kind_Disconnect 

Definition at line 101 of file RWebWindow.hxx.

Constructor & Destructor Documentation

◆ RWebWindow()

RWebWindow::RWebWindow ( )
default

RWebWindow constructor Should be defined here because of std::unique_ptr<RWebWindowWSHandler>

◆ ~RWebWindow()

RWebWindow::~RWebWindow ( )

RWebWindow destructor Closes all connections and remove window from manager.

Definition at line 76 of file RWebWindow.cxx.

Member Function Documentation

◆ _FindConnWithKey()

std::shared_ptr< RWebWindow::WebConn > RWebWindow::_FindConnWithKey ( const std::string &  key) const
private

Find connection with specified key.

Must be used under connection mutex lock

Definition at line 439 of file RWebWindow.cxx.

◆ _MakeSendHeader()

std::string RWebWindow::_MakeSendHeader ( std::shared_ptr< WebConn > &  conn,
bool  txt,
const std::string &  data,
int  chid 
)
private

Internal method to prepare text part of send data Should be called under locked connection mutex.

Definition at line 826 of file RWebWindow.cxx.

◆ AddDisplayHandle()

unsigned RWebWindow::AddDisplayHandle ( bool  headless_mode,
const std::string &  key,
std::unique_ptr< RWebDisplayHandle > &  handle 
)
private

Add display handle and associated key Key is random number generated when starting new window When client is connected, key should be supplied to correctly identify it.

Definition at line 420 of file RWebWindow.cxx.

◆ AddEmbedWindow()

unsigned RWebWindow::AddEmbedWindow ( std::shared_ptr< RWebWindow window,
int  channel 
)
private

Add embed window.

Definition at line 1475 of file RWebWindow.cxx.

◆ AssignThreadId()

void RWebWindow::AssignThreadId ( )

Assign thread id which has to be used for callbacks WARNING!!! only for expert use Automatically done at the moment when any callback function is invoked Can be invoked once again if window Run method will be invoked from other thread Normally should be invoked before Show() method is called.

Definition at line 1289 of file RWebWindow.cxx.

◆ CanSend()

bool RWebWindow::CanSend ( unsigned  connid,
bool  direct = true 
) const

Returns true if sending via specified connection can be performed.

Parameters
connidconnection id, when 0 - all existing connections are checked
directwhen true, checks if direct sending (without queuing) is possible

Definition at line 1152 of file RWebWindow.cxx.

◆ CheckDataToSend() [1/2]

void RWebWindow::CheckDataToSend ( bool  only_once = false)
private

Checks if new data can be send (internal use only) If necessary, provide credits to the client.

Parameters
only_onceif true, data sending performed once or until there is no data to send

Definition at line 922 of file RWebWindow.cxx.

◆ CheckDataToSend() [2/2]

bool RWebWindow::CheckDataToSend ( std::shared_ptr< WebConn > &  conn)
private

Checks if one should send data for specified connection Returns true when send operation was performed.

Definition at line 873 of file RWebWindow.cxx.

◆ CheckInactiveConnections()

void RWebWindow::CheckInactiveConnections ( )
private

Check if there are connection which are inactive for longer time For instance, batch browser will be stopped if no activity for 30 sec is there.

Definition at line 512 of file RWebWindow.cxx.

◆ CheckPendingConnections()

void RWebWindow::CheckPendingConnections ( )
private

Check if started process(es) establish connection.

After timeout such processed will be killed Method invoked from http server thread, therefore appropriate mutex must be used on all relevant data

Definition at line 477 of file RWebWindow.cxx.

◆ CheckThreadAssign()

void RWebWindow::CheckThreadAssign ( )
private

Internal method to verify and thread id has to be assigned from manager again Special case when ProcessMT was enabled just until thread id will be assigned.

Definition at line 590 of file RWebWindow.cxx.

◆ CloseConnection()

void RWebWindow::CloseConnection ( unsigned  connid)

Close specified connection.

Parameters
connidconnection id, when 0 - all connections will be closed

Definition at line 1115 of file RWebWindow.cxx.

◆ CloseConnections()

void RWebWindow::CloseConnections ( )

Closes all connection to clients Normally leads to closing of all correspondent browser windows Some browsers (like firefox) do not allow by default to close window.

Definition at line 1106 of file RWebWindow.cxx.

◆ CompleteWSSend()

void RWebWindow::CompleteWSSend ( unsigned  wsid)
private

Complete websocket send operation Clear "doing send" flag and check if next operation has to be started.

Definition at line 807 of file RWebWindow.cxx.

◆ Create()

std::shared_ptr< RWebWindow > RWebWindow::Create ( )
static

Create new RWebWindow Using default RWebWindowsManager.

Definition at line 1512 of file RWebWindow.cxx.

◆ CreateWSHandler()

std::shared_ptr< RWebWindowWSHandler > RWebWindow::CreateWSHandler ( std::shared_ptr< RWebWindowsManager mgr,
unsigned  id,
double  tmout 
)
private

Assigns manager reference, window id and creates websocket handler, used for communication with the clients.

Definition at line 131 of file RWebWindow.cxx.

◆ FindConnection()

std::shared_ptr< WebConn > ROOT::Experimental::RWebWindow::FindConnection ( unsigned  wsid)
inlineprivate

Find connection with specified websocket id.

Definition at line 163 of file RWebWindow.hxx.

◆ FindHeadlessConnection()

unsigned RWebWindow::FindHeadlessConnection ( )
private

Returns connection id of window running in headless mode This can be special connection which may run picture production jobs in background Connection to that job may not be initialized yet If connection does not exists, returns 0.

Definition at line 195 of file RWebWindow.cxx.

◆ FindOrCreateConnection()

std::shared_ptr< RWebWindow::WebConn > RWebWindow::FindOrCreateConnection ( unsigned  wsid,
bool  make_new,
const char *  query 
)
private

Find connection with given websocket id.

Definition at line 238 of file RWebWindow.cxx.

◆ GetAddr()

std::string RWebWindow::GetAddr ( ) const

Returns window address which is used in URL.

Definition at line 956 of file RWebWindow.cxx.

◆ GetClientVersion()

std::string RWebWindow::GetClientVersion ( ) const

Returns current client version.

Definition at line 1004 of file RWebWindow.cxx.

◆ GetConnectionId()

unsigned RWebWindow::GetConnectionId ( int  num = 0) const

Returns connection id for specified connection sequence number Only active connections are returned - where clients confirms connection Total number of connections can be retrieved with NumConnections() method.

Parameters
numconnection sequence number

Definition at line 1070 of file RWebWindow.cxx.

◆ GetConnections()

RWebWindow::ConnectionsList_t RWebWindow::GetConnections ( unsigned  connid = 0,
bool  only_active = false 
) const
private

returns connection list (or all active connections)

Parameters
connidconnection id, when 0 - all existing connections are returned
only_activewhen true, only active (already established) connections are returned

Definition at line 1126 of file RWebWindow.cxx.

◆ GetConnLimit()

unsigned RWebWindow::GetConnLimit ( ) const

returns configured connections limit (0 - default)

Definition at line 557 of file RWebWindow.cxx.

◆ GetConnToken()

std::string RWebWindow::GetConnToken ( ) const
private

Returns configured connection token.

Definition at line 579 of file RWebWindow.cxx.

◆ GetDisplayConnection()

unsigned RWebWindow::GetDisplayConnection ( ) const

Returns first connection id where window is displayed It could be that connection(s) not yet fully established - but also not timed out Batch jobs will be ignored here Returns 0 if connection not exists.

Definition at line 218 of file RWebWindow.cxx.

◆ GetHeight()

unsigned ROOT::Experimental::RWebWindow::GetHeight ( ) const
inline

returns configured window height (0 - default)

Definition at line 237 of file RWebWindow.hxx.

◆ GetId()

unsigned ROOT::Experimental::RWebWindow::GetId ( ) const
inline

Returns ID for the window - unique inside window manager.

Definition at line 210 of file RWebWindow.hxx.

◆ GetManager()

std::shared_ptr< RWebWindowsManager > ROOT::Experimental::RWebWindow::GetManager ( ) const
inline

Returns window manager.

Definition at line 213 of file RWebWindow.hxx.

◆ GetMaxQueueLength()

unsigned ROOT::Experimental::RWebWindow::GetMaxQueueLength ( ) const
inline

Return maximal queue length of data which can be held by window.

Definition at line 251 of file RWebWindow.hxx.

◆ GetOperationTmout()

float ROOT::Experimental::RWebWindow::GetOperationTmout ( ) const
inline

Returns timeout for synchronous WebWindow operations.

Definition at line 280 of file RWebWindow.hxx.

◆ GetRelativeAddr() [1/2]

std::string RWebWindow::GetRelativeAddr ( const RWebWindow win) const

Returns relative URL address for the specified window Address can be required if one needs to access data from one window into another window Used for instance when inserting panel into canvas.

Definition at line 976 of file RWebWindow.cxx.

◆ GetRelativeAddr() [2/2]

std::string RWebWindow::GetRelativeAddr ( const std::shared_ptr< RWebWindow > &  win) const

Returns relative URL address for the specified window Address can be required if one needs to access data from one window into another window Used for instance when inserting panel into canvas.

Definition at line 966 of file RWebWindow.cxx.

◆ GetSendQueueLength()

int RWebWindow::GetSendQueueLength ( unsigned  connid) const

Returns send queue length for specified connection.

Parameters
connidconnection id, 0 - maximal value for all connections is returned If wrong connection id specified, -1 is return

Definition at line 1177 of file RWebWindow.cxx.

◆ GetServer()

THttpServer * RWebWindow::GetServer ( )

Return THttpServer instance serving requests to the window.

Definition at line 155 of file RWebWindow.cxx.

◆ GetUrl()

std::string RWebWindow::GetUrl ( bool  remote = true)

Return URL string to access web window.

Parameters
remoteif true, real HTTP server will be started automatically

Definition at line 147 of file RWebWindow.cxx.

◆ GetUserArgs()

std::string RWebWindow::GetUserArgs ( ) const

Returns configured user arguments for web window See SetUserArgs method for more details.

Definition at line 1026 of file RWebWindow.cxx.

◆ GetWidth()

unsigned ROOT::Experimental::RWebWindow::GetWidth ( ) const
inline

returns configured window width (0 - default) actual window width can be different

Definition at line 233 of file RWebWindow.hxx.

◆ HasConnection()

bool RWebWindow::HasConnection ( unsigned  connid = 0,
bool  only_active = true 
) const

returns true if specified connection id exists

Parameters
connidconnection id (0 - any)
only_activewhen true only active connection will be checked, otherwise also pending (not yet established) connections are checked

Definition at line 1081 of file RWebWindow.cxx.

◆ HasKey()

bool RWebWindow::HasKey ( const std::string &  key) const
private

Returns true if provided key value already exists (in processes map or in existing connections)

Definition at line 462 of file RWebWindow.cxx.

◆ InvokeCallbacks()

void RWebWindow::InvokeCallbacks ( bool  force = false)
private

Invoke callbacks with existing data Must be called from appropriate thread.

Definition at line 376 of file RWebWindow.cxx.

◆ IsNativeOnlyConn()

bool ROOT::Experimental::RWebWindow::IsNativeOnlyConn ( ) const
inline

returns true if only native (own-created) connections are allowed

Definition at line 259 of file RWebWindow.hxx.

◆ IsShown()

bool ROOT::Experimental::RWebWindow::IsShown ( ) const
inline

Returns true when window was shown at least once.

Definition at line 298 of file RWebWindow.hxx.

◆ MakeHeadless()

unsigned RWebWindow::MakeHeadless ( bool  create_new = false)
private

Start headless browser for specified window Normally only single instance is used, but many can be created See ROOT::Experimental::RWebWindowsManager::Show() docu for more info returns (future) connection id (or 0 when fails)

Definition at line 176 of file RWebWindow.cxx.

◆ NumConnections()

int RWebWindow::NumConnections ( bool  with_pending = false) const

Returns current number of active clients connections.

Parameters
with_pendingif true, also pending (not yet established) connection accounted

Definition at line 1036 of file RWebWindow.cxx.

◆ ProcessBatchHolder()

bool RWebWindow::ProcessBatchHolder ( std::shared_ptr< THttpCallArg > &  arg)
private

Process special http request, used to hold headless browser running Such requests should not be replied for the long time Be aware that function called directly from THttpServer thread, which is not same thread as window.

Definition at line 314 of file RWebWindow.cxx.

◆ ProcessWS()

bool RWebWindow::ProcessWS ( THttpCallArg arg)
private

Processing of websockets call-backs, invoked from RWebWindowWSHandler Method invoked from http server thread, therefore appropriate mutex must be used on all relevant data.

Definition at line 600 of file RWebWindow.cxx.

◆ ProvideQueueEntry()

void RWebWindow::ProvideQueueEntry ( unsigned  connid,
EQueueEntryKind  kind,
std::string &&  arg 
)
private

Provide data to user callback User callback must be executed in the window thread.

Definition at line 362 of file RWebWindow.cxx.

◆ RecordData()

void RWebWindow::RecordData ( const std::string &  fname = "protocol.json",
const std::string &  fprefix = "" 
)

Configures recording of communication data in protocol file Provided filename will be used to store JSON array with names of written files - text or binary If data was send from client, "send" entry will be placed.

JSON file will look like:

 ["send", "msg0.txt", "send", "msg1.txt", "msg2.txt"]

If empty file name is provided, data recording will be disabled Recorded data can be used in JSROOT directly to test client code without running C++ server

Definition at line 1055 of file RWebWindow.cxx.

◆ RemoveConnection()

std::shared_ptr< RWebWindow::WebConn > RWebWindow::RemoveConnection ( unsigned  wsid)
private

Remove connection with given websocket id.

Definition at line 285 of file RWebWindow.cxx.

◆ RemoveEmbedWindow()

void RWebWindow::RemoveEmbedWindow ( unsigned  connid,
int  channel 
)
private

Remove RWebWindow associated with the channel.

Definition at line 1496 of file RWebWindow.cxx.

◆ Run()

void RWebWindow::Run ( double  tm = 0.)

Run window functionality for specified time If no action can be performed - just sleep specified time.

Definition at line 1456 of file RWebWindow.cxx.

◆ Send()

void RWebWindow::Send ( unsigned  connid,
const std::string &  data 
)

Sends data to specified connection.

Parameters
connidconnection id, when 0 - data will be send to all connections
datadata to be copied to SubmitData function

Definition at line 1253 of file RWebWindow.cxx.

◆ SendBinary() [1/2]

void RWebWindow::SendBinary ( unsigned  connid,
const void *  data,
std::size_t  len 
)

Send binary data to specified connection.

Parameters
connidconnection id, when 0 - data will be send to all connections
datapointer to binary data
lennumber of bytes in data

Definition at line 1274 of file RWebWindow.cxx.

◆ SendBinary() [2/2]

void RWebWindow::SendBinary ( unsigned  connid,
std::string &&  data 
)

Send binary data to specified connection.

Parameters
connidconnection id, when 0 - data will be send to all connections
datadata to be std-moved to SubmitData function

Definition at line 1263 of file RWebWindow.cxx.

◆ SetCallBacks()

void RWebWindow::SetCallBacks ( WebWindowConnectCallback_t  conn,
WebWindowDataCallback_t  data,
WebWindowConnectCallback_t  disconn = nullptr 
)

Set call-backs function for connect, data and disconnect events.

Definition at line 1402 of file RWebWindow.cxx.

◆ SetClientVersion()

void RWebWindow::SetClientVersion ( const std::string &  vers)

Set client version, used as prefix in scripts URL When changed, web browser will reload all related JS files while full URL will be different Default is empty value - no extra string in URL Version should be string like "1.2" or "ver1.subv2" and not contain any special symbols.

Definition at line 995 of file RWebWindow.cxx.

◆ SetConnectCallBack()

void RWebWindow::SetConnectCallBack ( WebWindowConnectCallback_t  func)

Set call-back function for new connection.

Definition at line 1384 of file RWebWindow.cxx.

◆ SetConnLimit()

void RWebWindow::SetConnLimit ( unsigned  lmt = 0)

Configure maximal number of allowed connections - 0 is unlimited Will not affect already existing connections Default is 1 - the only client is allowed.

Definition at line 547 of file RWebWindow.cxx.

◆ SetConnToken()

void RWebWindow::SetConnToken ( const std::string &  token = "")

Configures connection token (default none) When specified, in URL of webpage such token should be provided as &token=value parameter, otherwise web window will refuse connection.

Definition at line 569 of file RWebWindow.cxx.

◆ SetDataCallBack()

void RWebWindow::SetDataCallBack ( WebWindowDataCallback_t  func)

Set call-back function for data, received from the clients via websocket.

Function should have signature like void func(unsigned connid, const std::string &data) First argument identifies connection (unique for each window), second argument is received data

At the moment when callback is assigned, RWebWindow working thread is detected. If called not from main application thread, RWebWindow::Run() function must be regularly called from that thread.

Most simple way to assign call-back - use of c++11 lambdas like:

win->SetDefaultPage("file:./page.htm");
win->SetDataCallBack(
[](unsigned connid, const std::string &data) {
printf("Conn:%u data:%s\n", connid, data.c_str());
}
);
win->Show();
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t win
static std::shared_ptr< RWebWindow > Create()
Create new RWebWindow Using default RWebWindowsManager.

Definition at line 1375 of file RWebWindow.cxx.

◆ SetDefaultPage()

void ROOT::Experimental::RWebWindow::SetDefaultPage ( const std::string &  page)
inline

Set content of default window HTML page This page returns when URL address of the window will be requested Either HTML code or file name in the form "file:/home/user/data/file.htm" One also can using default locations like "file:rootui5sys/canv/canvas.html".

Definition at line 219 of file RWebWindow.hxx.

◆ SetDisconnectCallBack()

void RWebWindow::SetDisconnectCallBack ( WebWindowConnectCallback_t  func)

Set call-back function for disconnecting.

Definition at line 1393 of file RWebWindow.cxx.

◆ SetGeometry()

void ROOT::Experimental::RWebWindow::SetGeometry ( unsigned  width,
unsigned  height 
)
inline

Set window geometry. Will be applied if supported by used web display (like CEF or Chromium)

Definition at line 224 of file RWebWindow.hxx.

◆ SetMaxQueueLength()

void ROOT::Experimental::RWebWindow::SetMaxQueueLength ( unsigned  len = 10)
inline

configures maximal queue length of data which can be held by window

Definition at line 247 of file RWebWindow.hxx.

◆ SetNativeOnlyConn()

void ROOT::Experimental::RWebWindow::SetNativeOnlyConn ( bool  on = true)
inline

configures that only native (own-created) connections are allowed

Definition at line 255 of file RWebWindow.hxx.

◆ SetOperationTmout()

void ROOT::Experimental::RWebWindow::SetOperationTmout ( float  tm = 50.)
inline

Set timeout for synchronous WebWindow operations.

Definition at line 283 of file RWebWindow.hxx.

◆ SetPanelName()

void RWebWindow::SetPanelName ( const std::string &  name)

Configure window to show some of existing JSROOT panels It uses "file:rootui5sys/panel/panel.html" as default HTML page At the moment only FitPanel is existing.

Definition at line 113 of file RWebWindow.cxx.

◆ SetUserArgs()

void RWebWindow::SetUserArgs ( const std::string &  args)

Set arbitrary JSON data, which is accessible via conn.getUserArgs() method in JavaScript This JSON code injected into main HTML document into connectWebWindow({}) Must be set before RWebWindow::Show() method is called.

Parameters
args- arbitrary JSON data which can be provided to client side

Definition at line 1016 of file RWebWindow.cxx.

◆ Show()

unsigned RWebWindow::Show ( const RWebDisplayArgs args = "")

Show window in specified location.

See also
ROOT::Experimental::RWebWindowsManager::Show for more info
Returns
(future) connection id (or 0 when fails)

Definition at line 165 of file RWebWindow.cxx.

◆ ShowWindow()

unsigned RWebWindow::ShowWindow ( std::shared_ptr< RWebWindow window,
const RWebDisplayArgs args = "" 
)
static

Static method to show web window Has to be used instead of RWebWindow::Show() when window potentially can be embed into other windows Soon RWebWindow::Show() method will be done protected.

Definition at line 1544 of file RWebWindow.cxx.

◆ StartThread()

void RWebWindow::StartThread ( )

Start special thread which will be used by the window to handle all callbacks One has to be sure, that access to global ROOT structures are minimized and protected with ROOT::EnableThreadSafety(); call.

Definition at line 1322 of file RWebWindow.cxx.

◆ StopThread()

void RWebWindow::StopThread ( )

Stop special thread.

Definition at line 1344 of file RWebWindow.cxx.

◆ SubmitData()

void RWebWindow::SubmitData ( unsigned  connid,
bool  txt,
std::string &&  data,
int  chid = 1 
)
private

Internal method to send data.

Parameters
connidconnection id, when 0 - data will be send to all connections
txtis text message that should be sent
datadata to be std-moved to SubmitData function
chidchannel id, 1 - normal communication, 0 - internal with highest priority

Definition at line 1197 of file RWebWindow.cxx.

◆ Sync()

void RWebWindow::Sync ( )

Special method to process all internal activity when window runs in separate thread.

Definition at line 942 of file RWebWindow.cxx.

◆ TerminateROOT()

void RWebWindow::TerminateROOT ( )

Terminate ROOT session Tries to correctly close THttpServer, associated with RWebWindowsManager After that exit from process.

Definition at line 1522 of file RWebWindow.cxx.

◆ UseServerThreads()

void RWebWindow::UseServerThreads ( )

Let use THttpServer threads to process requests WARNING!!! only for expert use Should be only used when application provides proper locking and does not block.

Such mode provides minimal possible latency Must be called before callbacks are assigned

Definition at line 1310 of file RWebWindow.cxx.

◆ WaitFor()

int RWebWindow::WaitFor ( WebWindowWaitFunc_t  check)

Waits until provided check function or lambdas returns non-zero value Check function has following signature: int func(double spent_tm) Waiting will be continued, if function returns zero.

Parameter spent_tm is time in seconds, which already spent inside the function First non-zero value breaks loop and result is returned. Runs application mainloop and short sleeps in-between

Definition at line 1418 of file RWebWindow.cxx.

◆ WaitForTimed() [1/2]

int RWebWindow::WaitForTimed ( WebWindowWaitFunc_t  check)

Waits until provided check function or lambdas returns non-zero value Check function has following signature: int func(double spent_tm) Waiting will be continued, if function returns zero.

Parameter spent_tm in lambda is time in seconds, which already spent inside the function First non-zero value breaks waiting loop and result is returned (or 0 if time is expired). Runs application mainloop and short sleeps in-between WebGui.OperationTmout rootrc parameter defines waiting time in seconds

Definition at line 1432 of file RWebWindow.cxx.

◆ WaitForTimed() [2/2]

int RWebWindow::WaitForTimed ( WebWindowWaitFunc_t  check,
double  duration 
)

Waits until provided check function or lambdas returns non-zero value Check function has following signature: int func(double spent_tm) Waiting will be continued, if function returns zero.

Parameter spent_tm in lambda is time in seconds, which already spent inside the function First non-zero value breaks waiting loop and result is returned (or 0 if time is expired). Runs application mainloop and short sleeps in-between duration (in seconds) defines waiting time

Definition at line 1446 of file RWebWindow.cxx.

Friends And Related Function Documentation

◆ RWebDisplayHandle

friend class RWebDisplayHandle
friend

Definition at line 57 of file RWebWindow.hxx.

◆ RWebWindowsManager

friend class RWebWindowsManager
friend

Definition at line 55 of file RWebWindow.hxx.

◆ RWebWindowWSHandler

friend class RWebWindowWSHandler
friend

Definition at line 56 of file RWebWindow.hxx.

Member Data Documentation

◆ fCallbacksThrdId

std::thread::id ROOT::Experimental::RWebWindow::fCallbacksThrdId
private

! thread id where callbacks should be invoked

Definition at line 135 of file RWebWindow.hxx.

◆ fCallbacksThrdIdSet

bool ROOT::Experimental::RWebWindow::fCallbacksThrdIdSet {false}
private

! flag indicating that thread id is assigned

Definition at line 136 of file RWebWindow.hxx.

◆ fClientVersion

std::string ROOT::Experimental::RWebWindow::fClientVersion
private

! configured client version, used as prefix in scripts URL

Definition at line 144 of file RWebWindow.hxx.

◆ fConn

ConnectionsList_t ROOT::Experimental::RWebWindow::fConn
private

! list of all accepted connections

Definition at line 126 of file RWebWindow.hxx.

◆ fConnCallback

WebWindowConnectCallback_t ROOT::Experimental::RWebWindow::fConnCallback
private

! callback for connect event

Definition at line 132 of file RWebWindow.hxx.

◆ fConnCnt

unsigned ROOT::Experimental::RWebWindow::fConnCnt {0}
private

! counter of new connections to assign ids

Definition at line 124 of file RWebWindow.hxx.

◆ fConnLimit

unsigned ROOT::Experimental::RWebWindow::fConnLimit {1}
private

! number of allowed active connections

Definition at line 128 of file RWebWindow.hxx.

◆ fConnMutex

std::mutex ROOT::Experimental::RWebWindow::fConnMutex
mutableprivate

! mutex used to protect connection list

Definition at line 127 of file RWebWindow.hxx.

◆ fConnToken

std::string ROOT::Experimental::RWebWindow::fConnToken
private

! value of "token" URL parameter which should be provided for connecting window

Definition at line 129 of file RWebWindow.hxx.

◆ fDataCallback

WebWindowDataCallback_t ROOT::Experimental::RWebWindow::fDataCallback
private

! main callback when data over channel 1 is arrived

Definition at line 133 of file RWebWindow.hxx.

◆ fDefaultPage

std::string ROOT::Experimental::RWebWindow::fDefaultPage
private

! HTML page (or file name) returned when window URL is opened

Definition at line 117 of file RWebWindow.hxx.

◆ fDisconnCallback

WebWindowConnectCallback_t ROOT::Experimental::RWebWindow::fDisconnCallback
private

! callback for disconnect event

Definition at line 134 of file RWebWindow.hxx.

◆ fHasWindowThrd

bool ROOT::Experimental::RWebWindow::fHasWindowThrd {false}
private

! indicate if special window thread was started

Definition at line 137 of file RWebWindow.hxx.

◆ fHeight

unsigned ROOT::Experimental::RWebWindow::fHeight {0}
private

! initial window height when displayed

Definition at line 142 of file RWebWindow.hxx.

◆ fId

unsigned ROOT::Experimental::RWebWindow::fId {0}
private

! unique identifier

Definition at line 119 of file RWebWindow.hxx.

◆ fInputQueue

std::queue<QueueEntry> ROOT::Experimental::RWebWindow::fInputQueue
private

! input queue for all callbacks

Definition at line 139 of file RWebWindow.hxx.

◆ fInputQueueMutex

std::mutex ROOT::Experimental::RWebWindow::fInputQueueMutex
private

! mutex to protect input queue

Definition at line 140 of file RWebWindow.hxx.

◆ fMaster

std::shared_ptr<RWebWindow> ROOT::Experimental::RWebWindow::fMaster
private

! master window where this window is embedded

Definition at line 114 of file RWebWindow.hxx.

◆ fMasterChannel

int ROOT::Experimental::RWebWindow::fMasterChannel {-1}
private

! channel id in the master window

Definition at line 116 of file RWebWindow.hxx.

◆ fMasterConnId

unsigned ROOT::Experimental::RWebWindow::fMasterConnId {0}
private

! master connection id

Definition at line 115 of file RWebWindow.hxx.

◆ fMaxQueueLength

unsigned ROOT::Experimental::RWebWindow::fMaxQueueLength {10}
private

! maximal number of queue entries

Definition at line 131 of file RWebWindow.hxx.

◆ fMgr

std::shared_ptr<RWebWindowsManager> ROOT::Experimental::RWebWindow::fMgr
private

! display manager

Definition at line 113 of file RWebWindow.hxx.

◆ fNativeOnlyConn

bool ROOT::Experimental::RWebWindow::fNativeOnlyConn {false}
private

! only native connection are allowed, created by Show() method

Definition at line 130 of file RWebWindow.hxx.

◆ fOperationTmout

float ROOT::Experimental::RWebWindow::fOperationTmout {50.}
private

! timeout in seconds to perform synchronous operation, default 50s

Definition at line 143 of file RWebWindow.hxx.

◆ fPanelName

std::string ROOT::Experimental::RWebWindow::fPanelName
private

! panel name which should be shown in the window

Definition at line 118 of file RWebWindow.hxx.

◆ fPendingConn

ConnectionsList_t ROOT::Experimental::RWebWindow::fPendingConn
private

! list of pending connection with pre-assigned keys

Definition at line 125 of file RWebWindow.hxx.

◆ fProcessMT

bool ROOT::Experimental::RWebWindow::fProcessMT {false}
private

! if window event processing performed in dedicated thread

Definition at line 121 of file RWebWindow.hxx.

◆ fProtocol

std::string ROOT::Experimental::RWebWindow::fProtocol
private

! protocol

Definition at line 149 of file RWebWindow.hxx.

◆ fProtocolCnt

int ROOT::Experimental::RWebWindow::fProtocolCnt {-1}
private

! counter for protocol recording

Definition at line 146 of file RWebWindow.hxx.

◆ fProtocolConnId

unsigned ROOT::Experimental::RWebWindow::fProtocolConnId {0}
private

! connection id, which is used for writing protocol

Definition at line 147 of file RWebWindow.hxx.

◆ fProtocolFileName

std::string ROOT::Experimental::RWebWindow::fProtocolFileName
private

! local file where communication protocol will be written

Definition at line 145 of file RWebWindow.hxx.

◆ fProtocolPrefix

std::string ROOT::Experimental::RWebWindow::fProtocolPrefix
private

! prefix for created files names

Definition at line 148 of file RWebWindow.hxx.

◆ fSendMT

bool ROOT::Experimental::RWebWindow::fSendMT {false}
private

! true is special threads should be used for sending data

Definition at line 122 of file RWebWindow.hxx.

◆ fUserArgs

std::string ROOT::Experimental::RWebWindow::fUserArgs
private

! arbitrary JSON code, which is accessible via conn.getUserArgs() method

Definition at line 150 of file RWebWindow.hxx.

◆ fUseServerThreads

bool ROOT::Experimental::RWebWindow::fUseServerThreads {false}
private

! indicates that server thread is using, no special window thread

Definition at line 120 of file RWebWindow.hxx.

◆ fWidth

unsigned ROOT::Experimental::RWebWindow::fWidth {0}
private

! initial window width when displayed

Definition at line 141 of file RWebWindow.hxx.

◆ fWindowThrd

std::thread ROOT::Experimental::RWebWindow::fWindowThrd
private

! special thread for that window

Definition at line 138 of file RWebWindow.hxx.

◆ fWSHandler

std::shared_ptr<RWebWindowWSHandler> ROOT::Experimental::RWebWindow::fWSHandler
private

! specialize websocket handler for all incoming connections

Definition at line 123 of file RWebWindow.hxx.

Libraries for ROOT::Experimental::RWebWindow:
[legend]

The documentation for this class was generated from the following files: