对接加入房间,节点枚举
parent
8dd4ce9f79
commit
062cd9efde
|
@ -3,19 +3,29 @@
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include "MyCapturer.h"
|
#include "MyCapturer.h"
|
||||||
|
#include <QThread>
|
||||||
|
#include <windows.h>
|
||||||
|
#include <Lmcons.h>
|
||||||
|
#include <QAction>
|
||||||
|
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
: QMainWindow(parent)
|
: QMainWindow(parent)
|
||||||
, ui(new Ui::MainWindow)
|
, ui(new Ui::MainWindow)
|
||||||
,mHandler(new rtc::RefCountedObject<WebrtcHanlder>())
|
,mHandler(new rtc::RefCountedObject<WebrtcHanlder>())
|
||||||
,mSignalClient(nullptr)
|
,mSignalClient(nullptr)
|
||||||
|
,mModel(nullptr)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
ui->openGLWidget->SetImgSize(640,480);
|
ui->openGLWidget->SetImgSize(640,480);
|
||||||
ui->openGLWidget->show();
|
ui->openGLWidget->show();
|
||||||
|
|
||||||
mHandler->InitWebrtc();
|
mHandler->InitWebrtc();
|
||||||
mSignalClient = new SignalClient(QUrl("ws://127.0.0.1:9555/ws"),true,this);
|
TCHAR username[UNLEN + 1];
|
||||||
|
DWORD size = UNLEN + 1;
|
||||||
|
GetUserName((TCHAR*)username, &size);
|
||||||
|
mModel = new QStandardItemModel(this);
|
||||||
|
ui->treeView->setModel(mModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
|
@ -237,3 +247,47 @@ void WebrtcHanlder::OnFailure(webrtc::RTCError error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::on_pushButton_clicked()
|
||||||
|
{
|
||||||
|
mSignalClient = new SignalClient(QUrl("ws://127.0.0.1:9555/ws"),true,this);
|
||||||
|
connect(this->mSignalClient,SIGNAL(connected()),this,SLOT(signal_conneted()));
|
||||||
|
connect(this->mSignalClient,SIGNAL(response(int ,QJsonObject)),
|
||||||
|
this,SLOT( signal_response(int,QJsonObject)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::signal_conneted()
|
||||||
|
{
|
||||||
|
ui->label_5->setText("信令服务器已连接");
|
||||||
|
this->mSignalClient->SendLogin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_pushButton_2_clicked()
|
||||||
|
{
|
||||||
|
if(ui->lineEdit->text() != ""){
|
||||||
|
if(mSignalClient->Connected()){
|
||||||
|
this->mSignalClient->SendInRoom(ui->lineEdit->text());
|
||||||
|
this->mSignalClient->SendListRoom(ui->lineEdit->text());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::signal_closed()
|
||||||
|
{
|
||||||
|
ui->label_5->setText("信令服务器已断开");
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::signal_response(int type,QJsonObject data)
|
||||||
|
{
|
||||||
|
qDebug()<<type<<data;
|
||||||
|
switch (type) {
|
||||||
|
case 2004:
|
||||||
|
for (auto itr = data.begin();itr != data.end();itr++){
|
||||||
|
auto item = new QStandardItem(itr.key());
|
||||||
|
item->setEditable(false);
|
||||||
|
mModel->appendRow(item);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include "api/video/i420_buffer.h"
|
#include "api/video/i420_buffer.h"
|
||||||
#include "signal_client.h"
|
#include "signal_client.h"
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui { class MainWindow; }
|
namespace Ui { class MainWindow; }
|
||||||
|
@ -85,9 +86,16 @@ public slots:
|
||||||
void OnUpdateFrame( rtc::scoped_refptr<webrtc::I420BufferInterface>& buffer);
|
void OnUpdateFrame( rtc::scoped_refptr<webrtc::I420BufferInterface>& buffer);
|
||||||
void OnUpdateFrame1( uint8_t *);
|
void OnUpdateFrame1( uint8_t *);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_pushButton_clicked();
|
||||||
|
void signal_conneted();
|
||||||
|
void on_pushButton_2_clicked();
|
||||||
|
void signal_closed();
|
||||||
|
void signal_response(int,QJsonObject);
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
rtc::scoped_refptr<WebrtcHanlder> mHandler;
|
rtc::scoped_refptr<WebrtcHanlder> mHandler;
|
||||||
SignalClient *mSignalClient;
|
SignalClient *mSignalClient;
|
||||||
|
QStandardItemModel *mModel;
|
||||||
};
|
};
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|
|
@ -14,46 +14,134 @@
|
||||||
<string>MainWindow</string>
|
<string>MainWindow</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="centralwidget">
|
<widget class="QWidget" name="centralwidget">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,12">
|
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,15,0">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,1,0,5">
|
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0,1,0,2,0,0,1,0">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>25</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>摄像头:</string>
|
<string>摄像头:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="comboBox"/>
|
<widget class="QComboBox" name="comboBox">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>25</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>25</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>麦克风:</string>
|
<string>麦克风:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="comboBox_2"/>
|
<widget class="QComboBox" name="comboBox_2">
|
||||||
</item>
|
<property name="minimumSize">
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
<size>
|
||||||
<width>40</width>
|
<width>0</width>
|
||||||
<height>20</height>
|
<height>25</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>服务器地址:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>ws://127.0.0.1:9555/ws</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>连接信令服务器</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>房间号:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEdit"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_2">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>25</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>加入房间</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="CPlayWidget" name="openGLWidget"/>
|
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="2,9">
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeView" name="treeView"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="CPlayWidget" name="openGLWidget">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>25</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>信令服务器未连接</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
|
@ -1,16 +1,79 @@
|
||||||
#include "signal_client.h"
|
#include "signal_client.h"
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <windows.h>
|
||||||
|
#include <Lmcons.h>
|
||||||
|
|
||||||
SignalClient::SignalClient(const QUrl &url, bool debug, QObject *parent):
|
SignalClient::SignalClient(const QUrl &url, bool debug, QObject *parent):
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
m_url(url),
|
m_url(url),
|
||||||
m_debug(debug)
|
m_debug(debug),
|
||||||
|
m_connected(false)
|
||||||
{
|
{
|
||||||
qDebug() << "WebSocket server:" << url;
|
qDebug() << "WebSocket server:" << url;
|
||||||
connect(&m_webSocket, &QWebSocket::connected, this, &SignalClient::onConnected);
|
connect(&m_webSocket, &QWebSocket::connected, this, &SignalClient::onConnected);
|
||||||
connect(&m_webSocket, &QWebSocket::disconnected, this, &SignalClient::onUnConnected);
|
connect(&m_webSocket, &QWebSocket::disconnected, this, &SignalClient::onUnConnected);
|
||||||
m_webSocket.open(QUrl(url));
|
m_webSocket.open(QUrl(url));
|
||||||
|
connect(&m_timer,SIGNAL(timeout()),this,SLOT(onReconenectTimeout()));
|
||||||
|
m_timer.stop();
|
||||||
|
m_timer.setSingleShot(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
SignalClient::~SignalClient()
|
||||||
|
{
|
||||||
|
m_timer.stop();
|
||||||
|
m_webSocket.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalClient::SendLogin()
|
||||||
|
{
|
||||||
|
TCHAR username[UNLEN + 1];
|
||||||
|
DWORD size = UNLEN + 1;
|
||||||
|
GetUserName((TCHAR*)username, &size);
|
||||||
|
|
||||||
|
QJsonObject obj;
|
||||||
|
QJsonObject data;
|
||||||
|
QJsonDocument doc;
|
||||||
|
|
||||||
|
obj.insert("type",1000);
|
||||||
|
data.insert("name",QString::fromWCharArray(username));
|
||||||
|
obj.insert("data",data);
|
||||||
|
m_peer_name = QString::fromWCharArray(username);
|
||||||
|
m_webSocket.sendTextMessage(QJsonDocument(obj).toJson());
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REQ_INROOM 1001
|
||||||
|
void SignalClient::SendInRoom(QString room)
|
||||||
|
{
|
||||||
|
QJsonObject obj;
|
||||||
|
QJsonObject data;
|
||||||
|
data.insert("name",m_peer_name);
|
||||||
|
data.insert("room_name",room);
|
||||||
|
|
||||||
|
obj.insert("type",REQ_INROOM);
|
||||||
|
obj.insert("data",data);
|
||||||
|
m_webSocket.sendTextMessage(QString(QJsonDocument(obj).toJson()));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REQ_INROOM 1004
|
||||||
|
void SignalClient::SendListRoom(QString room)
|
||||||
|
{
|
||||||
|
QJsonObject obj;
|
||||||
|
QJsonObject data;
|
||||||
|
data.insert("room_name",room);
|
||||||
|
|
||||||
|
obj.insert("type",REQ_INROOM);
|
||||||
|
obj.insert("data",data);
|
||||||
|
m_webSocket.sendTextMessage(QString(QJsonDocument(obj).toJson()));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SignalClient::Connected()
|
||||||
|
{
|
||||||
|
return m_connected;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalClient::SetURL(QString url)
|
||||||
|
{
|
||||||
|
m_url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignalClient::onConnected()
|
void SignalClient::onConnected()
|
||||||
|
@ -18,28 +81,34 @@ void SignalClient::onConnected()
|
||||||
qDebug() << "WebSocket connected";
|
qDebug() << "WebSocket connected";
|
||||||
connect(&m_webSocket, &QWebSocket::textMessageReceived,
|
connect(&m_webSocket, &QWebSocket::textMessageReceived,
|
||||||
this, &SignalClient::onTextMessageReceived);
|
this, &SignalClient::onTextMessageReceived);
|
||||||
QJsonObject addr;
|
m_connected = true;
|
||||||
QJsonObject dat;
|
m_timer.stop();
|
||||||
dat.insert("message","hello world");
|
connected();
|
||||||
addr.insert("type", 1001);
|
|
||||||
addr.insert("data", dat);
|
|
||||||
|
|
||||||
m_webSocket.sendTextMessage(QJsonDocument(addr).toJson());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignalClient::onUnConnected()
|
void SignalClient::onUnConnected()
|
||||||
{
|
{
|
||||||
qDebug() <<"unconnected";
|
qDebug() <<"unconnected";
|
||||||
|
m_timer.start(1000);
|
||||||
|
m_timer.setSingleShot(false);
|
||||||
|
m_webSocket.open(QUrl(m_url));
|
||||||
|
closed();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignalClient::onTextMessageReceived(QString message)
|
void SignalClient::onTextMessageReceived(QString message)
|
||||||
{
|
{
|
||||||
qDebug() << "Message received:" << message;
|
qDebug() << "Message received:" << message;
|
||||||
m_webSocket.close();
|
auto obj = QJsonDocument::fromJson(message.toUtf8()).object();
|
||||||
|
qDebug()<<obj["type"];
|
||||||
|
response(obj["type"].toInt(),obj["data"].toObject());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignalClient::onSocketError(QAbstractSocket::SocketError error)
|
void SignalClient::onSocketError(QAbstractSocket::SocketError error)
|
||||||
{
|
{
|
||||||
qDebug()<<error;
|
qDebug()<<error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SignalClient::onReconenectTimeout()
|
||||||
|
{
|
||||||
|
qDebug()<<"timeout";
|
||||||
|
}
|
||||||
|
|
|
@ -5,26 +5,42 @@
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
class SignalClient : public QObject
|
class SignalClient : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit SignalClient(const QUrl &url, bool debug = false, QObject *parent = Q_NULLPTR);
|
explicit SignalClient(const QUrl &url, bool debug = false,
|
||||||
|
QObject *parent = Q_NULLPTR);
|
||||||
|
~SignalClient();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void closed();
|
void closed();
|
||||||
|
void connected();
|
||||||
|
void response(int type,QJsonObject);
|
||||||
|
public:
|
||||||
|
void SendLogin();
|
||||||
|
void SendInRoom(QString );
|
||||||
|
void SendListRoom(QString);
|
||||||
|
bool Connected();
|
||||||
|
void SetURL(QString);
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void onConnected();
|
void onConnected();
|
||||||
void onUnConnected();
|
void onUnConnected();
|
||||||
|
|
||||||
void onTextMessageReceived(QString message);
|
void onTextMessageReceived(QString message);
|
||||||
void onSocketError(QAbstractSocket::SocketError error);
|
void onSocketError(QAbstractSocket::SocketError error);
|
||||||
|
void onReconenectTimeout();
|
||||||
private:
|
private:
|
||||||
|
QString m_room_name; // 所属房间名称
|
||||||
|
QString m_peer_name; // 节点名称
|
||||||
|
|
||||||
QWebSocket m_webSocket;
|
QWebSocket m_webSocket;
|
||||||
QUrl m_url;
|
QUrl m_url;
|
||||||
bool m_debug;
|
bool m_debug;
|
||||||
|
bool m_connected;
|
||||||
|
QTimer m_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // SIGNALCLIENT_H
|
#endif // SIGNALCLIENT_H
|
||||||
|
|
Loading…
Reference in New Issue