This macro demonstrates custom access and custom drawing for TMsgList class Main motivation for this example - demonstrate how traffic between server and client can be minimized and how one could build custom UI in the browser.
TMsgList in this tutorial keep last N messages, numbering each with unique identifier There is TMsgList::Select() method which selects messages from the list If one specifies identifier, only messages newer than this identifier are selected In the selection list (TList object of TObjString) first item always identifier for the latest message in the list
In JavaScript code (httptextlog.js) one uses Select() method to receive latest messages, which not yet been seen in the browser and display them as text At maximum, 1000 elements are preserved in the browser.
One could either click item again or enable monitoring to always receive latest messages Or one could open only this output and nothing else:
In last case it could be used in iframe, also it requires less code to load on the page
#include <cstdio>
#include <cstring>
class TMsgList :
public TNamed {
protected:
public:
TMsgList(
const char*
name =
"log",
Int_t limit = 1000) :
fLimit(limit)
{
}
~TMsgList()
override { fMsgs.
Clear(); }
void AddMsg(const char* msg)
{
while (fMsgs.
GetSize() >= fLimit) {
delete last;
}
if (!msg) return;
fCounter++;
}
{
fSelect.
Add(&fStrCounter);
while ((obj = iter()) && (--curr >= id) && (--max >= 0))
return &fSelect;
}
};
void httptextlog()
{
TMsgList *
log =
new TMsgList(
"log", 200);
TH1D *hpx =
new TH1D(
"hpx",
"This is the px distribution",100,-4,4);
TH2F *hpxpy =
new TH2F(
"hpxpy",
"py vs px",40,-4,4,40,-4,4);
TString jspath =
"currentdir/", jsname =
"httptextlog.mjs";
std::string fdir = __FILE__;
auto pos = fdir.find("httptextlog.C");
if (pos > 0) {
fdir.resize(pos);
jspath = "customdir/";
serv->AddLocation(jspath, fdir.c_str());
} else {
printf("Cannot detect directory with macro - not possible to load JavaScript file\n");
return;
}
}
serv->GetSniffer()->SetAutoLoad("/" + jspath + jsname);
serv->Register("/", hpx);
serv->Register("/", hpxpy);
serv->Register("/", log);
serv->Restrict("/log", "allow_method=Select,GetTitle");
serv->RegisterCommand("/Stop", "bRun=kFALSE;", "rootsys/icons/ed_delete.png");
serv->RegisterCommand("/ExitRoot", "gSystem->Exit(1);", "rootsys/icons/ed_delete.png");
while (bRun) {
if (loop % 1000 == 0) {
loop = loop/1000;
int shift = loop % 40;
}
}
}
}
#define ClassDefOverride(name, id)
R__EXTERN TSystem * gSystem
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
UInt_t Get() const
Return raw date/time as encoded by TDatime.
1-D histogram with a double per channel (see TH1 documentation)
virtual void SetDirectory(TDirectory *dir)
By default, when a histogram is created, it is added to the list of histogram objects in the current ...
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
2-D histogram with a float per channel (see TH1 documentation)
Int_t Fill(Double_t) override
Invalid Fill method.
Online http server for arbitrary ROOT application.
void Clear(Option_t *option="") override
Remove all objects from the list.
void Add(TObject *obj) override
TObject * Last() const override
Return the last object in the list. Returns 0 when list is empty.
void RemoveLast() override
Remove the last object of the list.
void AddFirst(TObject *obj) override
Add object at the beginning of the list.
The TNamed class is the base class for all named ROOT classes.
Collectable string class.
void SetString(const char *s)
Mother of all ROOT objects.
Random number generator class based on M.
virtual void Rannor(Float_t &a, Float_t &b)
Return 2 numbers distributed following a gaussian with mean=0 and sigma=1.
virtual Int_t GetLast() const
Returns index of last object in collection.
static TString LLtoa(Long64_t value, Int_t base)
Converts a Long64_t to a TString with respect to the base specified (2-36).
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
RVec< PromoteType< T > > log(const RVec< T > &v)
__device__ AFloat max(AFloat x, AFloat y)