You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
3.0 KiB
112 lines
3.0 KiB
#pragma once |
|
|
|
#include <QWidget> |
|
#include <QListView> |
|
#include <QTextEdit> |
|
#include <QLabel> |
|
#include <QTimer> |
|
#include <QMenu> |
|
#include <QVector> |
|
#include <QElapsedTimer> |
|
#include <stdint.h> |
|
|
|
class MemberListModel; |
|
class DbManager; |
|
|
|
struct DetailAddress { |
|
int family; |
|
int protocol; |
|
QByteArray addr; |
|
int port; |
|
int socket_id; |
|
int addr_type; |
|
QString ifname; |
|
}; |
|
|
|
struct MemberLinkSnap { |
|
bool isTcp; |
|
int linkState; |
|
int linkStatus; |
|
bool tcpReady; |
|
bool isServer; |
|
int localFamily; |
|
QByteArray localAddr; |
|
uint16_t localPort; |
|
int family; |
|
QByteArray addr; |
|
uint16_t port; |
|
char sockName[20]; |
|
bool isReality; |
|
}; |
|
|
|
struct MemberSockSnap { |
|
int sockId; |
|
uint16_t port; |
|
int linksUp; |
|
int linksDown; |
|
QString ifname; |
|
}; |
|
|
|
class AccountList : public QWidget { |
|
Q_OBJECT |
|
public: |
|
explicit AccountList(DbManager* db = nullptr, QWidget *parent = nullptr); |
|
~AccountList(); |
|
|
|
void setChannel(const QString& channelId); |
|
void refresh(); |
|
void onMemberDetailData(uint64_t nodeId, const uint8_t* data, int len); |
|
void onNodeinfoUpdate(const uint8_t* data, int len); |
|
|
|
/* Bridge callbacks (called from GUI thread) */ |
|
void onMemberList(const QString& chId, int count, const uint8_t* data, int dataLen); |
|
void onMemberUpdated(const QString& chId, const uint8_t* data); |
|
void onMemberRemoved(const QString& chId, uint64_t nodeId); |
|
|
|
MemberListModel* model() const { return m_model; } |
|
|
|
signals: |
|
void memberRenamed(); |
|
|
|
private slots: |
|
void onMemberClicked(const QModelIndex& index); |
|
void onMemberDoubleClicked(const QModelIndex& index); |
|
void onMemberContextMenu(const QPoint& pos); |
|
void onDetailTimerTick(); |
|
|
|
private: |
|
void showMemberDetail(quint64 nodeId); |
|
void updateDetailDisplay(); |
|
void requestMemberDetail(); |
|
static QString relativeTimeStr(qint64 timestamp); |
|
static QString addrStr(const void* addr, int family); |
|
|
|
QListView *m_listView; |
|
MemberListModel *m_model; |
|
DbManager *m_db; |
|
QLabel *m_header; |
|
QWidget *m_detailPanel; |
|
QLabel *m_detailHeader; |
|
QTextEdit *m_detailText; |
|
QTimer *m_detailTimer; |
|
QTimer *m_linkTimer; |
|
QString m_channelId; |
|
|
|
quint64 m_detailNodeId = 0; |
|
QString m_detailName; |
|
bool m_detailOnline = false; |
|
qint64 m_detailLastSeen = 0; |
|
qint64 m_detailCreated = 0; |
|
QVector<DetailAddress> m_detailAddrs; |
|
|
|
bool m_snapConnPresent = false; |
|
bool m_snapConnUp = false; |
|
bool m_snapConnInit = false; |
|
int m_snapOwnTcpActive = 0; |
|
uint16_t m_snapChainRtt = 0; |
|
uint8_t m_snapHopCount = 0; |
|
uint16_t m_snapBgpNodes = 0; |
|
QString m_bgpText; |
|
QVector<MemberLinkSnap> m_snapLinks; |
|
QVector<MemberSockSnap> m_snapSocks; |
|
};
|
|
|