#include "datamanager.h" // DataManager* DataManager::p_this; DataManager::DataManager(QObject *parent) : QObject{parent} { qDebug() << "进入DataManager的构造函数"; tcpclient = TCPClient::getInstance(); connect(tcpclient, &TCPClient::TCPClientConnected, this, &DataManager::TCPClientConnected); connect(tcpclient, &TCPClient::TCPClientDisconnected, this, &DataManager::TCPClientDisconnected); connect(tcpclient, &TCPClient::recv_data, this, &DataManager::recv_from_server); //tcpclient->setServer("192.168.126.129",7890); tcpclient->configAndrun(); // tcpclient->setCallBack(recv_from_server); protocol = Protocol::getInstance(); // p_this = this; } DataManager *DataManager::getInstance() { static DataManager datamanager_instance; return &datamanager_instance; } void DataManager::TCPClientConnected() { connect_flag = true; qDebug() << "emit connect_to_server successfully"; emit connect_to_server(); } void DataManager::TCPClientDisconnected() { connect_flag = false; qDebug() << "emit disconnect_from_server successfully"; // emit p_this->disconnect_from_server(); emit disconnect_from_server(); } void DataManager::recv_from_server(QByteArray data) { QByteArray data_decrypt; data_decrypt = protocol->data_decrypt(data); QList list = data_decrypt.split('\n'); for (int i = 0; i < list.count(); i++) { QJsonDocument json_data = QJsonDocument::fromJson(list[i]); if (json_data["type"] == "message") { QString data, sendname; sendname = json_data["sendname"].toString(); data = json_data["data"].toString(); emit update_text(sendname, data); qDebug() << "收到message类型的信息" << sendname; } else if (json_data["type"] == "file") { QString filename, file_data, sendname; sendname = json_data["sendname"].toString(); filename = json_data["name"].toString(); file_data = json_data["data"].toString(); if (json_data["to_user"].toString().isEmpty()) { emit update_file(sendname, filename, file_data); qDebug() << "收到群发的文件" << sendname; } else { emit update_file_private(sendname, filename, file_data); qDebug() << "收到私发的文件" << sendname; } } else if (json_data["type"] == "online_users") { int count; QList online_users; count = json_data["count"].toInt(); online_users = json_data["users"].toVariant().toStringList(); emit update_users(count, online_users); qDebug() << "收到更新在线用户列表的信息" << online_users; } else if (json_data["type"] == "response") { if (json_data["action"] == "register") { bool register_flag; QJsonObject json = json_data["content"].toObject(); QString result = json["result"].toString(); if(result == "true") { register_flag = true; } else { register_flag = false; } emit signup_response(register_flag); qDebug() << "收到服务器响应的注册信息" << register_flag; } else if (json_data["action"] == "signin") { bool signin_flag; QJsonObject json = json_data["content"].toObject(); QString result = json["result"].toString(); if(result == "true") { signin_flag = true; } else { signin_flag = false; } emit signin_response(signin_flag); qDebug() << "收到服务器响应的登录信息" << signin_flag; } } else { qDebug() << "收到未知类型的数据" << list[i]; return; } } } void DataManager::Register(QString username, QString password) { QByteArray data, data_encrypt; data = protocol->data_maker(Protocol::REQUEST, QString("register"), QList{"user", username, "password", password}); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); qDebug() << "发送注册信息" << data; } void DataManager::signin_request(QString username, QString password) { QByteArray data, data_encrypt; data = protocol->data_maker(Protocol::REQUEST, QString("signin"), QList{"user", username, "password", password}); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); qDebug() << "发送登录信息" << data; } void DataManager::send_text(QString sendname, QString text) { QByteArray data, data_encrypt; data = protocol->data_maker(Protocol::MESSAGE, sendname, text); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); qDebug() << "群发文本信息" << data; } void DataManager::send_to_user(QString sendname, QString to_user, QString text) { QByteArray data, data_encrypt; data = protocol->data_maker(Protocol::MESSAGE, sendname, to_user, text); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); qDebug() << "私发文本信息" << data; } void DataManager::send_file_to_all(QString sendname, QString filename, QByteArray file) { QByteArray data, data_encrypt; data = protocol->data_maker(Protocol::FILE, sendname, filename, QString(file.toHex())); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); qDebug() << "群发文件"; } void DataManager::send_file_private(QString sendname, QString filename, QByteArray file, QString name) { QByteArray data, data_encrypt; data = protocol->data_maker(Protocol::FILE, name, sendname, filename, QString(file.toHex())); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); qDebug() << "私发文件"; } void DataManager::account_cancellation(QString username) { QByteArray data, data_encrypt; data = protocol->data_maker(Protocol::REQUEST, QString("cancellation"), QList{"name",username}); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); qDebug() << "发送注销信息" << data; } void DataManager::update_namelist(QString username) { QByteArray data, data_encrypt; data = protocol->data_maker(Protocol::REQUEST, QString("update_namelist"),QList{"name",username}); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); qDebug() << "发送更新在线用户列表信息" << data; }