Browse Source

update

master
zhaohe 2 years ago
parent
commit
bf7197048b
  1. 3
      .vscode/settings.json
  2. 6
      CMakeLists.txt
  3. 2
      libxsync
  4. 33
      mainwindow.cpp
  5. 27
      mainwindow.h
  6. 5
      src/main.cpp
  7. 77
      src/xsync_udp_factory_impl.cpp
  8. 26
      src/xsync_udp_factory_impl.hpp
  9. 12
      src/zqthread.cpp
  10. 33
      src/zqthread.hpp

3
.vscode/settings.json

@ -80,7 +80,8 @@
"future": "cpp", "future": "cpp",
"qcoreapplication": "cpp", "qcoreapplication": "cpp",
"qcategoryaxis": "cpp", "qcategoryaxis": "cpp",
"qaction": "cpp"
"qaction": "cpp",
"qthread": "cpp"
}, },
"files.autoGuessEncoding": true, "files.autoGuessEncoding": true,
} }

6
CMakeLists.txt

@ -18,9 +18,13 @@ find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Charts REQUIRED)
set(PROJECT_SOURCES set(PROJECT_SOURCES
src/logger.cpp src/logger.cpp
src/main.cpp src/main.cpp
src/zqthread.cpp
mainwindow.cpp mainwindow.cpp
mainwindow.h mainwindow.h
mainwindow.ui mainwindow.ui
libxsync/xsync.cpp
libxsync/iflytop_xsync_protocol/iflytop_xsync_protocol.c
src/xsync_udp_factory_impl.cpp
) )
@ -28,7 +32,7 @@ add_executable(xsync
${PROJECT_SOURCES} ${PROJECT_SOURCES}
) )
target_link_libraries(xsync PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Charts )
target_link_libraries(xsync PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Charts wsock32)
set_target_properties(xsync PROPERTIES set_target_properties(xsync PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com

2
libxsync

@ -1 +1 @@
Subproject commit 362cd3a9013bfbee034a508bd7b36f819ce28ced
Subproject commit 5e99b7c334eae1657ea128754db0d5cd04849c7d

33
mainwindow.cpp

@ -1,6 +1,25 @@
#include "mainwindow.h" #include "mainwindow.h"
#include <QDateTime>
#include "./ui_mainwindow.h" #include "./ui_mainwindow.h"
#include "src/logger.hpp"
using namespace iflytop;
using namespace std;
static MainWindow *m_mainWindow;
#define TAG "MainWindow"
void MainWindow::log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
QString text;
text.append(msg);
m_mainWindow->append_log_signal(text);
}
void MainWindow::append_log_slot(QString text) {
ui->logbrowser->append(text);
}
void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag) { void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag) {
DispalyRegIterm *regitem = new DispalyRegIterm(); DispalyRegIterm *regitem = new DispalyRegIterm();
@ -80,7 +99,21 @@ void MainWindow::construct_reg_table() { //
// //
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this); ui->setupUi(this);
m_mainWindow = this;
construct_reg_table(); construct_reg_table();
connect(this, SIGNAL(append_log_signal(QString)), this, SLOT(append_log_slot(QString)));
qInstallMessageHandler(log_output);
m_thread.reset(new ZQThread("test", [this]() {
while (true) {
ZLOGI(TAG, "start1");
ZLOGI(TAG, "start2");
ZLOGI(TAG, "start3");
ZLOGI(TAG, "start4");
QThread::sleep(1);
}
}));
m_thread->start();
} }
MainWindow::~MainWindow() { delete ui; } MainWindow::~MainWindow() { delete ui; }

27
mainwindow.h

@ -15,7 +15,20 @@
#include <QtWidgets/QTextBrowser> #include <QtWidgets/QTextBrowser>
#include <QtWidgets/QTextEdit> #include <QtWidgets/QTextEdit>
#include <QtWidgets/QWidget> #include <QtWidgets/QWidget>
//
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map> #include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include "src/zqthread.hpp"
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace Ui { namespace Ui {
@ -37,14 +50,24 @@ class MainWindow : public QMainWindow {
private: private:
std::map<int32_t, DispalyRegIterm *> m_regdisplayer; std::map<int32_t, DispalyRegIterm *> m_regdisplayer;
std::unique_ptr<iflytop::ZQThread> m_thread;
public: public:
Ui::MainWindow *ui;
MainWindow(QWidget *parent = nullptr); MainWindow(QWidget *parent = nullptr);
~MainWindow(); ~MainWindow();
private: private:
Ui::MainWindow *ui;
void construct_reg_table(); void construct_reg_table();
void push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag); void push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag);
/*******************************************************************************
* *
*******************************************************************************/
static void log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg);
private slots:
void append_log_slot(QString );
signals:
void append_log_signal(QString str);
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

5
src/main.cpp

@ -24,10 +24,11 @@
#define TAG "Main" #define TAG "Main"
using namespace std; using namespace std;
QT_CHARTS_USE_NAMESPACE QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
QApplication a(argc, argv); QApplication a(argc, argv);
ZLOGI(TAG, "hello world");
MainWindow w;
MainWindow w;
w.show(); w.show();
ZLOGI(TAG, "start");
return a.exec(); return a.exec();
} }

77
src/xsync_udp_factory_impl.cpp

@ -0,0 +1,77 @@
#include "xsync_udp_factory_impl.hpp"
#include <winsock2.h>
//
#include <Windows.h>
#pragma comment(lib, "ws2_32")
using namespace iflytop;
class XSUDP : public I_XSUDP {
uint32_t m_ip;
int m_localport;
struct sockaddr_in localadd = {};
int m_sock_fd = 0;
public:
virtual xs_error_code_t initialize(string ip, int localport) override;
virtual xs_error_code_t sendto(const XsyncNetAdd& to, const char* data, int32_t length) override;
virtual xs_error_code_t receive(const char* data, int32_t length, XsyncNetAdd& from, int overtimems) override;
};
xs_error_code_t XSUDP::initialize(string ip, int localport) {
localadd.sin_family = AF_INET;
localadd.sin_addr.s_addr = inet_addr(ip.c_str());
localadd.sin_port = htons(localport);
// 创建客户端用于通信的Socket
m_sock_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (m_sock_fd < 0) return kxs_ec_socket_fail;
int ret = bind(m_sock_fd, (struct sockaddr*)&localadd, sizeof(localadd));
if (ret < 0) return kxs_ec_bind_fail;
return kxs_ec_success;
}
xs_error_code_t XSUDP::sendto(const XsyncNetAdd& to, const char* data, int32_t length) {
struct sockaddr_in sockaddr;
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = htonl(to.ip);
sockaddr.sin_port = htons(to.port);
int ret = ::sendto(m_sock_fd, data, length, 0, (struct sockaddr*)&sockaddr, sizeof(sockaddr));
if (ret != length) return kxs_ec_send_fail;
return kxs_ec_success;
}
xs_error_code_t XSUDP::receive(const char* data, int32_t length, XsyncNetAdd& from, int overtimems) {
struct sockaddr_in sockaddr;
timeval timeout;
timeout.tv_sec = overtimems;
timeout.tv_usec = 0;
if (setsockopt(m_sock_fd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)) == -1) {
return kxs_ec_setsockopt_rx_timeout_fail;
}
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = htonl(from.ip);
sockaddr.sin_port = htons(from.port);
int senderAddressLen = sizeof(sockaddr);
int ret = ::recvfrom(m_sock_fd, (char*)data, length, 0, (struct sockaddr*)&sockaddr, &senderAddressLen);
if (ret != length) return kxs_ec_receive_fail;
return kxs_ec_success;
}
/*******************************************************************************
* xSyncUdpFactoryImpl *
*******************************************************************************/
void XSyncUdpFactoryImpl::initialize() {
static bool isInit = false;
if (!isInit) {
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
isInit = true;
}
}
shared_ptr<I_XSUDPListener> XSyncUdpFactoryImpl::createXSUDPListener() { return nullptr; }
shared_ptr<I_XSUDP> XSyncUdpFactoryImpl::createXSUDP() { return make_shared<XSUDP>(); }

26
src/xsync_udp_factory_impl.hpp

@ -0,0 +1,26 @@
#pragma once
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include "libxsync\xsync.hpp"
namespace iflytop {
using namespace std;
class XSyncUdpFactoryImpl : public I_XSyncUDPFactory {
private:
/* data */
public:
void initialize();
virtual shared_ptr<I_XSUDPListener> createXSUDPListener() override;
virtual shared_ptr<I_XSUDP> createXSUDP() override;
};
} // namespace iflytop

12
src/zqthread.cpp

@ -0,0 +1,12 @@
#include "zqthread.hpp"
using namespace iflytop;
using namespace std;
ZQThread::ZQThread(const char* name, function<void()> cb) {
name_ = QString(name);
cb_ = cb;
}
void ZQThread::run() {
if (cb_) cb_();
}

33
src/zqthread.hpp

@ -0,0 +1,33 @@
#pragma once
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
//
#include <QString>
#include <QThread>
namespace iflytop {
using namespace std;
class ZQThread : public QThread {
Q_OBJECT
private:
QString name_;
function<void()> cb_;
public:
ZQThread(const char* name, function<void()> cb);
protected:
virtual void run() override;
};
} // namespace iflytop
Loading…
Cancel
Save