Remoto - VFS: VFS_websocket_client Class Reference
Remoto - VFS

A VFS_node that manages a QWebSocket connection. More...

#include <VFS_websocket_client.h>

Inheritance diagram for VFS_websocket_client:
VFS_node VFS_remotoserver_client VFS_websocket_VFSclient

Signals

void connected ()
 Connection has been made. More...
 
void disconnected ()
 Connection has been lost. More...
 
void error (QAbstractSocket::SocketError)
 There has been a socket error. More...
 
void readyBinaryMessage (QByteArray message)
 A binary message has been received. More...
 
void readyTextMessage (QString message)
 A text message has been received. More...
 
- 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...
 

Public Member Functions

 VFS_websocket_client (QString wsurl, quint16 interval=3000)
 
 VFS_websocket_client (QWebSocket *socket, VFS_websocket_server *server)
 
virtual ~VFS_websocket_client ()
 VFS_websocket_client destructor -. More...
 
virtual bool isConnected ()
 If the client will attempt to reconnect, return true. More...
 
virtual bool isConnecting ()
 If the client will attempt to reconnect, return true. More...
 
virtual bool isContainer ()
 A VFS_websocket_client cannot contain children. More...
 
virtual void submit (VFS_request *r)
 Submit to the socket. More...
 
virtual void write (VFS_request *r)
 Write to the socket. More...
 
virtual bool writeBinary (QByteArray data)
 Write binary data over the websocket. More...
 
virtual bool writeText (QString data)
 Write text data over the websocket. 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...
 
virtual QString reportDetails ()
 Additional details for a generated report. 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 Slots

virtual void close ()
 Close the socket if it is connected. More...
 
virtual void socket_connected ()
 Slot called when the client is connected. More...
 
virtual void socket_disconnected ()
 Slot called when the client is disconnected. More...
 
virtual void socket_receive_binary (QByteArray message)
 VFS_websocket_client::socket_receive_binary. More...
 
virtual void socket_receive_text (QString message)
 The socket has received a message in text mode. More...
 
virtual void startPing ()
 Start the ping timer. More...
 
virtual void timerEvent (QTimerEvent *event)
 Send the ping command. More...
 

Protected Member Functions

virtual void authorized ()
 Notify the node that it has received authorization from some auth method. More...
 
virtual void init ()
 Initialize needed signal/slot connections. More...
 
virtual QJsonDocument receive (QByteArray message)
 VFS_websocket_VFSclient::receive. 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 QByteArray icon ()
 Fetch the icon for a node. 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 metadata (VFS_request *r)
 Fetch the metadata of this node. More...
 
virtual void read (VFS_request *r)
 Return the data contents of this node, or if it's a container call ls() 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

QHostAddress _address
 The network address of the connected client. More...
 
bool _authenticated
 if auth has taken place and succeeded More...
 
bool _authorized
 if this connection has a session More...
 
int _connectID
 For client connections, the reconnect timerID. More...
 
quint16 _interval
 The reconnect interval if disconnected. More...
 
bool _isClient
 A client connection may not be created by a listening server, thus the second constructor. More...
 
int _pingID
 Connections can become stale; This is the ID of the ping timer. More...
 
VFS_websocket_server_server
 owning server More...
 
QWebSocket * _socket
 client socket More...
 
QString _wsurl
 For client connections, the WebSocket address to connect to. 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...
 

Friends

class VFS_websocket_server
 

Additional Inherited Members

- 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...
 
- 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

A VFS_node that manages a QWebSocket connection.

The connected side will usually be a web browser client, but could also be a unity game engine, for instance.

Definition at line 11 of file VFS_websocket_client.h.

Constructor & Destructor Documentation

◆ VFS_websocket_client() [1/2]

VFS_websocket_client::VFS_websocket_client ( QWebSocket *  socket,
VFS_websocket_server server 
)
explicit
Parameters
socketA newly created QWebSocket
serverThe server instance that is hosting the socket.

Connects signals and slots together for basic functionality: disconnection, incoming messages, errors.

Definition at line 23 of file VFS_websocket_client.cpp.

◆ VFS_websocket_client() [2/2]

VFS_websocket_client::VFS_websocket_client ( QString  wsurl,
quint16  interval = 3000 
)
explicit
Parameters
wsurlA websocket address in the form: ws[s]://address[:port][/path/to/resource]
intervalInterval to attempt reconnection

Definition at line 42 of file VFS_websocket_client.cpp.

◆ ~VFS_websocket_client()

VFS_websocket_client::~VFS_websocket_client ( )
virtual

VFS_websocket_client destructor -.

-- Close the socket, and call deleteLater() on it.

Definition at line 113 of file VFS_websocket_client.cpp.

Member Function Documentation

◆ authorized()

void VFS_websocket_client::authorized ( )
protectedvirtual

Notify the node that it has received authorization from some auth method.

The default implementation will mount the newly authorized node into the VFS. Subclasses may want to do some setup after the node has been authorized. All subclass implementations need to call this.

Only after authorization will a node be mounted with a valid VFS_session.

This deferred mounting ensures that the node is complete before anything tries to subscribe to it.

Definition at line 137 of file VFS_websocket_client.cpp.

◆ close

void VFS_websocket_client::close ( )
protectedvirtualslot

Close the socket if it is connected.

Definition at line 265 of file VFS_websocket_client.cpp.

◆ connected

void VFS_websocket_client::connected ( )
signal

Connection has been made.

◆ disconnected

void VFS_websocket_client::disconnected ( )
signal

Connection has been lost.

◆ error

void VFS_websocket_client::error ( QAbstractSocket::SocketError  )
signal

There has been a socket error.

◆ init()

void VFS_websocket_client::init ( )
protectedvirtual

Initialize needed signal/slot connections.

Definition at line 67 of file VFS_websocket_client.cpp.

◆ isConnected()

bool VFS_websocket_client::isConnected ( )
virtual

If the client will attempt to reconnect, return true.

Otherwise false.

Returns
whether or not the _connectID is not -1

Definition at line 236 of file VFS_websocket_client.cpp.

◆ isConnecting()

bool VFS_websocket_client::isConnecting ( )
virtual

If the client will attempt to reconnect, return true.

Otherwise false.

Returns
whether or not the _connectID is not -1

Definition at line 226 of file VFS_websocket_client.cpp.

◆ isContainer()

bool VFS_websocket_client::isContainer ( )
virtual

A VFS_websocket_client cannot contain children.

Returns
false

Reimplemented from VFS_node.

Definition at line 341 of file VFS_websocket_client.cpp.

◆ readyBinaryMessage

void VFS_websocket_client::readyBinaryMessage ( QByteArray  message)
signal

A binary message has been received.

◆ readyTextMessage

void VFS_websocket_client::readyTextMessage ( QString  message)
signal

A text message has been received.

◆ receive()

QJsonDocument VFS_websocket_client::receive ( QByteArray  message)
protectedvirtual

VFS_websocket_VFSclient::receive.

Parameters
messageThe incoming message as JSON, which will need to be parsed.

Reimplemented in VFS_remotoserver_client, and VFS_websocket_VFSclient.

Definition at line 351 of file VFS_websocket_client.cpp.

◆ socket_connected

void VFS_websocket_client::socket_connected ( )
protectedvirtualslot

Slot called when the client is connected.

Definition at line 190 of file VFS_websocket_client.cpp.

◆ socket_disconnected

void VFS_websocket_client::socket_disconnected ( )
protectedvirtualslot

Slot called when the client is disconnected.

Definition at line 210 of file VFS_websocket_client.cpp.

◆ socket_receive_binary

void VFS_websocket_client::socket_receive_binary ( QByteArray  message)
protectedvirtualslot

VFS_websocket_client::socket_receive_binary.

Parameters
messageThe incoming message

Definition at line 256 of file VFS_websocket_client.cpp.

◆ socket_receive_text

void VFS_websocket_client::socket_receive_text ( QString  message)
protectedvirtualslot

The socket has received a message in text mode.

Parameters
messageThe incoming message

Definition at line 246 of file VFS_websocket_client.cpp.

◆ startPing

void VFS_websocket_client::startPing ( )
protectedvirtualslot

Start the ping timer.

The startPing() function will start a ping timer. This will send a ping command every 20 seconds to a connected client, which will keep the connection open on browsers that disconnect due to inactivity.

Definition at line 151 of file VFS_websocket_client.cpp.

◆ submit()

void VFS_websocket_client::submit ( VFS_request r)
virtual

Submit to the socket.

Parameters
rThe VFS_request object

The base class implementation logs an error. It needs to be subclassed.

Reimplemented from VFS_node.

Definition at line 290 of file VFS_websocket_client.cpp.

◆ timerEvent

void VFS_websocket_client::timerEvent ( QTimerEvent *  e)
protectedvirtualslot

Send the ping command.

When the timer fires (every 20 seconds), send the ping command.

Definition at line 165 of file VFS_websocket_client.cpp.

◆ write()

void VFS_websocket_client::write ( VFS_request r)
virtual

Write to the socket.

Parameters
rThe VFS_request object

The base class implementation logs an error. It needs to be subclassed.

Reimplemented from VFS_node.

Reimplemented in VFS_remotoserver_client.

Definition at line 278 of file VFS_websocket_client.cpp.

◆ writeBinary()

bool VFS_websocket_client::writeBinary ( QByteArray  data)
virtual

Write binary data over the websocket.

Parameters
dataThe binary data to write
Returns
true if all data was written, false otherwise

DOCME

Definition at line 325 of file VFS_websocket_client.cpp.

◆ writeText()

bool VFS_websocket_client::writeText ( QString  data)
virtual

Write text data over the websocket.

Parameters
dataThe string data to write
Returns
true if all data was written, false otherwise
Warning
The length test is currently disabled, as websockets often misreport bytes written, which is a documented bug in Qt5.6-5.7

Definition at line 303 of file VFS_websocket_client.cpp.

Friends And Related Function Documentation

◆ VFS_websocket_server

friend class VFS_websocket_server
friend

Definition at line 15 of file VFS_websocket_client.h.

Member Data Documentation

◆ _address

QHostAddress VFS_websocket_client::_address
protected

The network address of the connected client.

Definition at line 37 of file VFS_websocket_client.h.

◆ _authenticated

bool VFS_websocket_client::_authenticated
protected

if auth has taken place and succeeded

Definition at line 35 of file VFS_websocket_client.h.

◆ _authorized

bool VFS_websocket_client::_authorized
protected

if this connection has a session

Definition at line 36 of file VFS_websocket_client.h.

◆ _connectID

int VFS_websocket_client::_connectID
protected

For client connections, the reconnect timerID.

Definition at line 41 of file VFS_websocket_client.h.

◆ _interval

quint16 VFS_websocket_client::_interval
protected

The reconnect interval if disconnected.

Definition at line 43 of file VFS_websocket_client.h.

◆ _isClient

bool VFS_websocket_client::_isClient
protected

A client connection may not be created by a listening server, thus the second constructor.

Definition at line 40 of file VFS_websocket_client.h.

◆ _pingID

int VFS_websocket_client::_pingID
protected

Connections can become stale; This is the ID of the ping timer.

Definition at line 38 of file VFS_websocket_client.h.

◆ _server

VFS_websocket_server* VFS_websocket_client::_server
protected

owning server

Definition at line 34 of file VFS_websocket_client.h.

◆ _socket

QWebSocket* VFS_websocket_client::_socket
protected

client socket

Definition at line 33 of file VFS_websocket_client.h.

◆ _wsurl

QString VFS_websocket_client::_wsurl
protected

For client connections, the WebSocket address to connect to.

Definition at line 42 of file VFS_websocket_client.h.


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