Logo ROOT  
Reference Guide
THttpLongPollEngine.h
Go to the documentation of this file.
1// $Id$
2// Author: Sergey Linev 8/01/2018
3
4/*************************************************************************
5 * Copyright (C) 1995-2017, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_THttpLongPollEngine
13#define ROOT_THttpLongPollEngine
14
15#include "THttpWSEngine.h"
16
17#include <string>
18#include <queue>
19#include <mutex>
20
21class THttpServer;
22
24 friend class THttpServer;
25
26protected:
27
29
30 bool fRaw{false}; ///!< if true, only content can be used for data transfer
31 std::mutex fMutex; ///!< protect polling request to use it from different threads
32 std::shared_ptr<THttpCallArg> fPoll; ///!< hold polling request, which can be immediately used for the next sending
33 EBufKind fBufKind{kNoBuf}; ///!< if buffered data available
34 std::string fBuf; ///!< buffered data
35 std::string fBufHeader; ///!< buffered header
36 static const std::string gLongPollNope; ///!< default reply on the longpoll request
37
38 std::string MakeBuffer(const void *buf, int len, const char *hdr = nullptr);
39
40 virtual Bool_t CanSendDirectly() override;
41
42public:
43 THttpLongPollEngine(bool raw = false);
44 virtual ~THttpLongPollEngine() = default;
45
46 UInt_t GetId() const override;
47
48 void ClearHandle(Bool_t) override;
49
50 void Send(const void *buf, int len) override;
51
52 void SendCharStar(const char *buf) override;
53
54 void SendHeader(const char *hdr, const void *buf, int len) override;
55
56 Bool_t PreProcess(std::shared_ptr<THttpCallArg> &arg) override;
57
58 void PostProcess(std::shared_ptr<THttpCallArg> &arg) override;
59};
60
61#endif
unsigned int UInt_t
Definition: RtypesCore.h:46
bool Bool_t
Definition: RtypesCore.h:63
std::string fBufHeader
!< buffered data
std::string MakeBuffer(const void *buf, int len, const char *hdr=nullptr)
!< default reply on the longpoll request
std::shared_ptr< THttpCallArg > fPoll
!< protect polling request to use it from different threads
void Send(const void *buf, int len) override
Send binary data via connection.
void SendHeader(const char *hdr, const void *buf, int len) override
Send binary data with text header via connection.
std::mutex fMutex
!< if true, only content can be used for data transfer
virtual Bool_t CanSendDirectly() override
Indicate that polling requests is there or buffer empty and can be immediately invoked.
THttpLongPollEngine(bool raw=false)
constructor
static const std::string gLongPollNope
!< buffered header
void ClearHandle(Bool_t) override
clear request, normally called shortly before destructor
void SendCharStar(const char *buf) override
Send const char data Either do it immediately or keep in internal buffer.
Bool_t PreProcess(std::shared_ptr< THttpCallArg > &arg) override
Preview data for given socket Method called by WS handler before processing websocket data Returns kT...
EBufKind fBufKind
!< hold polling request, which can be immediately used for the next sending
UInt_t GetId() const override
returns ID of the engine, created from this pointer
void PostProcess(std::shared_ptr< THttpCallArg > &arg) override
Normally requests from client does not replied directly for longpoll socket Therefore one can use suc...
std::string fBuf
!< if buffered data available
virtual ~THttpLongPollEngine()=default