UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
ControlPort Class Reference

#include <control_port.hpp>

Inheritance diagram for ControlPort:
Inheritance graph
Collaboration diagram for ControlPort:
Collaboration graph

Public Types

using LineCallback = std::function<void(std::string_view)>
 

Signals

void connected ()
 
void disconnected ()
 

Public Member Functions

 ControlPort ()
 
 ~ControlPort ()=default
 
void addLineCallback (LineCallback callback)
 
void connect (int local_port)
 
QAbstractSocket::SocketState getState () const
 
void parseLine (std::string_view line)
 
void writeLine (std::string_view line)
 

Private Slots

void readReady ()
 

Private Attributes

LineBuffer lineBuf
 
std::vector< LineCallback > lineCallbacks
 
QTcpSocket socket
 

Detailed Description

Definition at line 13 of file control_port.hpp.

Member Typedef Documentation

◆ LineCallback

using ControlPort::LineCallback = std::function<void(std::string_view)>

Definition at line 26 of file control_port.hpp.

Constructor & Destructor Documentation

◆ ControlPort()

ControlPort::ControlPort ( )

Definition at line 7 of file control_port.cpp.

7 {
8 QObject::connect(&socket, &QTcpSocket::readyRead, this, &ControlPort::readReady);
9
10 QObject::connect(&socket, &QTcpSocket::connected, this, &ControlPort::connected);
11 QObject::connect(&socket, &QTcpSocket::disconnected, this, &ControlPort::disconnected);
12}
void connected()
QTcpSocket socket
void disconnected()

References connected(), disconnected(), readReady(), and socket.

Here is the call graph for this function:

◆ ~ControlPort()

ControlPort::~ControlPort ( )
default

Member Function Documentation

◆ addLineCallback()

void ControlPort::addLineCallback ( LineCallback callback)
inline

Definition at line 27 of file control_port.hpp.

27{ lineCallbacks.push_back(callback); }
std::vector< LineCallback > lineCallbacks
Option::Callback::fcn_type callback
Definition settings.cpp:251

References callback, and lineCallbacks.

Referenced by UltragridWindow::UltragridWindow(), and VuMeterWidget::setControlPort().

◆ connect()

void ControlPort::connect ( int local_port)

Definition at line 14 of file control_port.cpp.

14 {
15 /* Prevents failure in case the socket is alredy connecting. This also
16 * discards pending data in the send buffer, but we don't care about
17 * that.*/
18 socket.abort();
19
20 socket.connectToHost(QHostAddress::LocalHost, local_port);
21}

References socket.

Referenced by parseLine().

◆ connected

void ControlPort::connected ( )
signal

◆ disconnected

void ControlPort::disconnected ( )
signal

Referenced by ControlPort().

◆ getState()

QAbstractSocket::SocketState ControlPort::getState ( ) const

Definition at line 35 of file control_port.cpp.

35 {
36 return socket.state();
37}

References socket.

Referenced by VuMeterWidget::updateVal().

◆ parseLine()

void ControlPort::parseLine ( std::string_view line)

Definition at line 23 of file control_port.cpp.

23 {
24 constexpr std::string_view prefix = "Control socket listening on port";
25 if(line.substr(0, prefix.length()) != prefix)
26 return;
27
28 auto tmp = std::string(line.substr(prefix.length()));
29 int port = 0;
30 sscanf(tmp.c_str(), " %d", &port);
31
32 connect(port);
33}
void connect(int local_port)

References connect().

Here is the call graph for this function:

◆ readReady

void ControlPort::readReady ( )
privateslot

Definition at line 52 of file control_port.cpp.

52 {
53 char buf[512];
54
55 while(true){
56 int ret = socket.read(buf, sizeof(buf));
57 if(ret == 0 || ret == -1)
58 break;
59
60 lineBuf.write(std::string_view(buf, ret));
61
62 while(lineBuf.hasLine()){
63 for(auto& c : lineCallbacks){
64 c(lineBuf.peek());
65 }
66 lineBuf.pop();
67 }
68 }
69}
LineBuffer lineBuf
bool hasLine() const
void write(std::string_view str)
std::string_view peek() const

References LineBuffer::hasLine(), lineBuf, lineCallbacks, LineBuffer::peek(), LineBuffer::pop(), socket, and LineBuffer::write().

Referenced by ControlPort().

Here is the call graph for this function:

◆ writeLine()

void ControlPort::writeLine ( std::string_view line)

Definition at line 39 of file control_port.cpp.

39 {
40 int toWrite = line.length();
41 const char *data = line.data();
42 while(toWrite > 0){
43 auto ret = socket.write(data, toWrite);
44 if(ret < 0){
45 break;
46 }
47 data += ret;
48 toWrite -= ret;
49 }
50}

References socket.

Referenced by VuMeterWidget::onControlPortConnect().

Member Data Documentation

◆ lineBuf

LineBuffer ControlPort::lineBuf
private

Definition at line 38 of file control_port.hpp.

Referenced by readReady().

◆ lineCallbacks

std::vector<LineCallback> ControlPort::lineCallbacks
private

Definition at line 39 of file control_port.hpp.

Referenced by addLineCallback(), and readReady().

◆ socket

QTcpSocket ControlPort::socket
private

Definition at line 37 of file control_port.hpp.

Referenced by ControlPort(), connect(), getState(), readReady(), and writeLine().


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