Skip to content

Commit

Permalink
Add support for broadcasting data in sessions #36
Browse files Browse the repository at this point in the history
Signed-off-by: xiaoming <2014500726@smail.xtu.edu.cn>
  • Loading branch information
QQxiaoming committed May 26, 2024
1 parent ced4472 commit a289244
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 2 deletions.
31 changes: 29 additions & 2 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,6 @@ CentralWidget::CentralWidget(QString dir, StartupUIMode mode, QLocale lang, bool

setWindowTitle(QApplication::applicationName()+" - "+VERSION);



splitter = new QSplitter(Qt::Horizontal,this);
splitter->setHandleWidth(1);
ui->centralwidget->layout()->addWidget(splitter);
Expand Down Expand Up @@ -398,6 +396,24 @@ CentralWidget::CentralWidget(QString dir, StartupUIMode mode, QLocale lang, bool
});
}
#endif
QAction *addToBroadCastSessionListAction = new QAction(tr("Add to BroadCast List"),this);
addToBroadCastSessionListAction->setStatusTip(tr("Add current session to broadcast list"));
addToBroadCastSessionListAction->setCheckable(true);
addToBroadCastSessionListAction->setChecked(sessionsWindow->isInBroadCastList());
if(sessionsWindow->isInBroadCastList()) {
addToBroadCastSessionListAction->setText(tr("Remove from BroadCast List"));
}
menu->addAction(addToBroadCastSessionListAction);
connect(addToBroadCastSessionListAction,&QAction::triggered,this,[=](){
QWidget *widget = mainWidgetGroup->sessionTab->currentWidget();
SessionsWindow *sessionsWindow = widget->property("session").value<SessionsWindow *>();
sessionsWindow->setInBroadCastList(!sessionsWindow->isInBroadCastList());
if(sessionsWindow->isInBroadCastList()) {
broadCastSessionList.append(sessionsWindow);
} else {
broadCastSessionList.removeAll(sessionsWindow);
}
});
QAction *saveSessionAction = new QAction(tr("Save Session"),this);
saveSessionAction->setStatusTip(tr("Save current session to session manager"));
menu->addAction(saveSessionAction);
Expand Down Expand Up @@ -2017,6 +2033,10 @@ void CentralWidget::onPluginReadSettings(QString group, QString key, QVariant &v
value = settings.value("Plugin/"+iface->name()+"/"+group+"/"+key);
}

void CentralWidget::onBroadCastSendData(const QByteArray &data) {

}

void CentralWidget::setSessionClassActionEnable(bool enable)
{
reconnectAction->setEnabled(enable);
Expand Down Expand Up @@ -3000,6 +3020,13 @@ void CentralWidget::setGlobalOptions(SessionsWindow *window) {
window->setZmodemOnlie(!globalOptionsWindow->getDisableZmodemOnline());
window->setZmodemUploadPath(globalOptionsWindow->getModemUploadPath());
window->setZmodemDownloadPath(globalOptionsWindow->getModemDownloadPath());
connect(window,&SessionsWindow::broadCastSendData,this,[=](const QByteArray &data){
foreach(SessionsWindow *sessionsWindow, broadCastSessionList) {
if(sessionsWindow != window) {
sessionsWindow->reverseProxySendData(data);
}
}
});
}

void CentralWidget::restoreSessionToSessionManager(void)
Expand Down
2 changes: 2 additions & 0 deletions src/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ private slots:
void onPluginSendCommand(QString cmd);
void onPluginWriteSettings(QString group, QString key, QVariant value);
void onPluginReadSettings(QString group, QString key, QVariant &value);
void onBroadCastSendData(const QByteArray &data);

protected:
void closeEvent(QCloseEvent *event) override {
Expand Down Expand Up @@ -325,6 +326,7 @@ private slots:

KeyChainClass keyChainClass;
QList<SessionsWindow *> sessionList;
QList<SessionsWindow *> broadCastSessionList;
struct pluginState_t {
PluginInterface *iface;
bool state;
Expand Down
18 changes: 18 additions & 0 deletions src/sessionswindow/sessionswindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,9 @@ SessionsWindow::SessionsWindow(SessionType tp, QWidget *parent)
if(modemProxyChannel) {
return;
}
if(enableBroadCast) {
emit broadCastSendData(QByteArray(data, size));
}
if(telnet->isConnected()) {
telnet->sendData(data, size);
tx_total += size;
Expand Down Expand Up @@ -195,6 +198,9 @@ SessionsWindow::SessionsWindow(SessionType tp, QWidget *parent)
if(modemProxyChannel) {
return;
}
if(enableBroadCast) {
emit broadCastSendData(QByteArray(data, size));
}
if(serialPort->isOpen()) {
serialPort->write(data, size);
tx_total += size;
Expand Down Expand Up @@ -239,6 +245,9 @@ SessionsWindow::SessionsWindow(SessionType tp, QWidget *parent)
if(modemProxyChannel) {
return;
}
if(enableBroadCast) {
emit broadCastSendData(QByteArray(data, size));
}
if(rawSocket->state() == QAbstractSocket::ConnectedState) {
rawSocket->write(data, size);
tx_total += size;
Expand Down Expand Up @@ -287,6 +296,9 @@ SessionsWindow::SessionsWindow(SessionType tp, QWidget *parent)
if(modemProxyChannel) {
return;
}
if(enableBroadCast) {
emit broadCastSendData(QByteArray(data, size));
}
if(namePipe->state() == QLocalSocket::ConnectedState) {
namePipe->write(data, size);
}
Expand Down Expand Up @@ -346,6 +358,9 @@ SessionsWindow::SessionsWindow(SessionType tp, QWidget *parent)
if(modemProxyChannel) {
return;
}
if(enableBroadCast) {
emit broadCastSendData(QByteArray(data, size));
}
shell->sendData(data, size);
tx_total += size;
});
Expand Down Expand Up @@ -710,6 +725,9 @@ int SessionsWindow::startLocalShellSession(const QString &command, ShellType sTp
if(modemProxyChannel) {
return;
}
if(enableBroadCast) {
emit broadCastSendData(QByteArray(data, size));
}
localShell->write(QByteArray(data, size));
});
m_command = command;
Expand Down
5 changes: 5 additions & 0 deletions src/sessionswindow/sessionswindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ class SessionsWindow : public QObject
bool isLog(void) { return enableLog; }
int setRawLog(bool enable);
bool isRawLog(void) { return enableRawLog; }
void setInBroadCastList(bool enable) { enableBroadCast = enable; }
bool isInBroadCastList() { return enableBroadCast; }

int writeReceiveASCIIFile(const char *data, int size);
int startReceiveASCIIFile(const QString &fileName);
Expand Down Expand Up @@ -352,13 +354,15 @@ class SessionsWindow : public QObject
zmodemOnlie = enable;
}


signals:
void hexDataDup(const char *data, int size);
void stateChanged(SessionsState state);
void titleChanged(int title,const QString& newTitle);
void modemProxySendData(QByteArray data);
void modemProxyRecvData(const QByteArray &data);
void waitForStringFinished(const QString &str, int matchIndex);
void broadCastSendData(const QByteArray &data);

private:
int saveLog(const char *data, int size);
Expand Down Expand Up @@ -386,6 +390,7 @@ class SessionsWindow : public QObject
QVNCClientWidget *vncClient;
bool enableLog;
bool enableRawLog;
bool enableBroadCast;
QMutex log_file_mutex;
QMutex raw_log_file_mutex;
QFile *log_file = nullptr;
Expand Down

0 comments on commit a289244

Please sign in to comment.