Remoto - VFS: VFS_stream Class Reference
Remoto - VFS

VFS_stream stores data sequentially within a buffer. More...

#include <VFS_stream.h>

Inheritance diagram for VFS_stream:
VFS_node

Public Slots

virtual void applyDiff (VFS_request *r)
 Apply a diff to the buffer. More...
 
- Public Slots inherited from VFS_node
virtual void applyDiff (VFS_request *r)
 Apply a diff received via subscription. More...
 
virtual void executeRequest (VFS_request *t)
 Based on the VFS_request::requestType, execute the function associated with an operation. More...
 
void notifySubscribers (VFS_node *origin, VFS_request *t)
 Propagate a diff to subscribers. More...
 
virtual void receiveResponse (VFS_request *t)
 Once a VFS_request has been completed, a response will be issued back to its _origin. More...
 
void remove (bool andDelete)
 Remove a child node. More...
 
virtual void remove (VFS_node *node=nullptr, QString *name=nullptr, QString user="server")
 Remove a child node from this node. More...
 
virtual void subtreeRequest (VFS_request *t)
 find() the target of a VFS_request, and execute the request More...
 
virtual void unsubscribeAll (VFS_node *n)
 Remove all references to a subscriber from this node. More...
 

Public Member Functions

Q_INVOKABLE VFS_stream (quint32 maxSize=0, bool newlineTrim=false)
 
virtual ~VFS_stream ()
 
virtual bool isContainer ()
 A VFS_stream node cannot contain children. More...
 
virtual void metadata (VFS_request *r)
 Fetch the metadata for this node. More...
 
virtual void read (VFS_request *r)
 Read the contents of the buffer. More...
 
virtual QString reportDetails ()
 Report the current stream size. More...
 
virtual void submit (VFS_request *r)
 Submit data to the buffer. More...
 
virtual void write (VFS_request *r)
 Write to the buffer. More...
 
- Public Member Functions inherited from VFS_node
Q_INVOKABLE VFS_node ()
 The VFS_node constructor will add its instance to the VFS_node::__allNodes global node registry, observing thread safety rules. More...
 
virtual ~VFS_node ()
 VFS_node destructor. More...
 
virtual VFS_nodeappend (QString name, VFS_node *node, bool containerCheck=true, QString user="server")
 Append a VFS_node as a child of this node. More...
 
QString className ()
 Return the class name of a node. More...
 
virtual VFS_requestcreateRequest (VFS_request::requestType type, QString path, QString user="unknown", QJsonDocument data=QJsonDocument(), QJsonObject metadata=QJsonObject(), bool dontDelete=false)
 Create a new VFS_request with this object as _origin. More...
 
VFS_nodefind (QString path)
 Find a node by string path. More...
 
virtual VFS_nodefind (VFS_request *r)
 Find a node using a VFS_request. More...
 
VFS_nodefindChildWithName (QString name)
 Check if a child with a given name exists. More...
 
virtual VFS_nodemount ()
 Mount this node. More...
 
QString uniqueChildName (QString name)
 Generate a unique child name. More...
 
virtual VFS_nodeunmount ()
 Unmount this node. More...
 
virtual bool validChildName (QString name)
 Check if a node name is valid. More...
 

Protected Member Functions

virtual QByteArray icon ()
 The "stream" icon found in the VFS_icons library. More...
 
- Protected Member Functions inherited from VFS_node
virtual void aclDefaults (VFS_request *r)
 Return default values and features associated wth this node. More...
 
void addACLDefault (QJsonObject &acl, bool value, QString description="")
 Add a default value to the acl object. More...
 
void addACLFeature (QJsonObject &acl, QString feature, bool value, QString description="")
 Add a feature to the acl object. More...
 
void addACLFeatureGroup (QJsonObject &acl, QString feature, QString group, bool value)
 Add a feature group to the acl object. More...
 
void addACLFeatureUser (QJsonObject &acl, QString feature, QString user, bool value)
 Add a feature user to the acl object. More...
 
void addACLGroup (QJsonObject &acl, QString group, bool value)
 Add a group to the acl object. More...
 
void addACLUser (QJsonObject &acl, QString user, bool value)
 Add a user to the acl object. More...
 
virtual void issueRequest (VFS_node *target, VFS_request *t)
 Issue a VFS_request to its target. More...
 
virtual void issueRequest (VFS_request *t)
 A convenience function. More...
 
virtual void issueResponse (VFS_request *t)
 Once a request has been completed, issue a response. More...
 
virtual void ls (VFS_request *r)
 List the contents of this node. More...
 
virtual void releaseLock (VFS_request *r)
 Release a lock on this node. More...
 
virtual void report (VFS_request *r)
 Report debugging information about the current state of this node. More...
 
virtual void requestLock (VFS_request *r)
 Request a lock on this node. More...
 
virtual void rm (VFS_request *r)
 Remove a child entry from a node, or the node itself. More...
 
virtual void subscribe (VFS_request *r)
 Add an entry to this node's _subscription list. More...
 
virtual void unsubscribe (VFS_request *r)
 Remove an entry from this node's _subscription list. More...
 
virtual void unsubscribePath (QString path)
 Unsubscribe all references to a subpath. More...
 

Protected Attributes

QString _data
 The actual buffer. More...
 
int _maxSize
 The maximum size in bytes. More...
 
bool _newlineTrim
 Buffer will be truncated by bytes or newlines. More...
 
- Protected Attributes inherited from VFS_node
VFS_children _children
 This node's children. More...
 
QMutex _lock
 A recursive mutex that is local to this node. More...
 
VFS_subscriptionType _subscribers
 This node's subscribers. These subscribers will receive diff notifications. More...
 

Additional Inherited Members

- Signals inherited from VFS_node
void diff (VFS_node *origin, VFS_request *t)
 Emit a diff, which will trigger notifySubscribers() for a mounted node. More...
 
void finished (bool andDelete=false)
 Emitted if a thread fails to create its node, or a node is rm()'d, or any other reason a node has completed its lifecycle. It is deleted if andDelete==true. More...
 
void mounted ()
 Emitted when a node is mount()ed. More...
 
void unmounted (VFS_node *self)
 Emitted when a node is unmount()ed. More...
 
- Static Public Member Functions inherited from VFS_node
static bool __isNode (VFS_node *)
 Check to see if a node is in the global registry. More...
 
static QString code (QString nodename, QString libname, QString &error)
 Fetch code or any other resource from a node. More...
 

Detailed Description

VFS_stream stores data sequentially within a buffer.

When a VFS_stream receives data from either a submit() or write() call, the new data is appended to the end of the stream.

The data in the buffer is limited to a maximum size. Based on the _newlineTrim setting, a saturated buffer can be trimmed by simple truncation from the head or by removing full lines from the head.

VFS_stream is the primary mechanism used for logging. As new events are written to the stream, old ones are removed from the head. Other nodes can subscribe to a stream and will receive diffs of new data, and will receive the entire buffer upon subscription.

Data going in and out must be in a "data" field:

{
"data": "A new line of information"
}

As with any other VFS_node, writing a null value will clear the buffer:

{
"data": null
}

Definition at line 6 of file VFS_stream.h.

Constructor & Destructor Documentation

◆ VFS_stream()

VFS_stream::VFS_stream ( quint32  maxSize = 0,
bool  newlineTrim = false 
)
explicit
Parameters
maxSizein bytes
newlineTrimtrue=trim by line, not by byte

Definition at line 43 of file VFS_stream.cpp.

◆ ~VFS_stream()

VFS_stream::~VFS_stream ( )
virtual

Definition at line 50 of file VFS_stream.cpp.

Member Function Documentation

◆ applyDiff

void VFS_stream::applyDiff ( VFS_request r)
virtualslot

Apply a diff to the buffer.

Parameters
rThe VFS_request object

Synonym for write()

Definition at line 213 of file VFS_stream.cpp.

◆ icon()

QByteArray VFS_stream::icon ( )
protectedvirtual

The "stream" icon found in the VFS_icons library.

Returns
The "stream" icon
See also
VFS_node::icon()

Reimplemented from VFS_node.

Definition at line 61 of file VFS_stream.cpp.

◆ isContainer()

bool VFS_stream::isContainer ( )
virtual

A VFS_stream node cannot contain children.

Returns
false

Reimplemented from VFS_node.

Definition at line 225 of file VFS_stream.cpp.

◆ metadata()

void VFS_stream::metadata ( VFS_request r)
virtual

Fetch the metadata for this node.

Parameters
rThe VFS_request object

VFS_stream will always return a metadata type of "textStream"

Reimplemented from VFS_node.

Definition at line 109 of file VFS_stream.cpp.

◆ read()

void VFS_stream::read ( VFS_request r)
virtual

Read the contents of the buffer.

Parameters
rThe VFS_request object

The entire buffer contentents will be returned:

{
"data": [entire buffer]
}

Reimplemented from VFS_node.

Definition at line 90 of file VFS_stream.cpp.

◆ reportDetails()

QString VFS_stream::reportDetails ( )
virtual

Report the current stream size.

Returns
Return stream size of total.

Reimplemented from VFS_node.

Definition at line 71 of file VFS_stream.cpp.

◆ submit()

void VFS_stream::submit ( VFS_request r)
virtual

Submit data to the buffer.

Parameters
rThe VFS_request object

Synonym for write()

Reimplemented from VFS_node.

Definition at line 201 of file VFS_stream.cpp.

◆ write()

void VFS_stream::write ( VFS_request r)
virtual

Write to the buffer.

Parameters
rThe VFS_request object

Incoming data must be in the form:

{
"data": "A new line of information"
}

If the incoming data does not end with a newline, one will be added.

When data is written, the buffer may be truncated to maintain _maxSize based on the _newlineTrim mode.

If the incoming data is a JSON null, the buffer will be cleared.

Reimplemented from VFS_node.

Definition at line 137 of file VFS_stream.cpp.

Member Data Documentation

◆ _data

QString VFS_stream::_data
protected

The actual buffer.

Definition at line 26 of file VFS_stream.h.

◆ _maxSize

int VFS_stream::_maxSize
protected

The maximum size in bytes.

Definition at line 24 of file VFS_stream.h.

◆ _newlineTrim

bool VFS_stream::_newlineTrim
protected

Buffer will be truncated by bytes or newlines.

Definition at line 25 of file VFS_stream.h.


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