#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->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); QJsonDocument json_data = QJsonDocument::fromJson(data_decrypt); if (json_data["type"] == "message") { QString data,sendname; sendname = json_data["sendname"].toString(); data = json_data["data"].toString(); emit update_text(sendname,data); } 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(); emit update_file(sendname,filename,file_data); } 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); } else if (json_data["type"] == "response") { if(json_data["action"] == "register") { bool register_flag; register_flag = json_data["content"].toBool(); emit signup_response(register_flag); } else if(json_data["action"] == "signin") { bool signin_flag; signin_flag = json_data["content"].toBool(); emit signin_response(signin_flag); } } else { return; } } void DataManager::Register(QString username,QString password) { QByteArray data,data_encrypt; data = protocol->data_maker(Protocol::REQUEST,QString("register"),QList{username,password}); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); } void DataManager::signin_request(QString username,QString password) { QByteArray data,data_encrypt; data = protocol->data_maker(Protocol::REQUEST,QString("signin"),QList{username,password}); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); } 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); } 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); } void DataManager::send_file_to_all(QString sendname,QString filename,QByteArray file) { QByteArray data,data_encrypt; data = protocol->data_maker(Protocol::FILE,sendname,filename,file); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); } 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,file); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); } void DataManager::account_cancellation(QString username) { QByteArray data,data_encrypt; data = protocol->data_maker(Protocol::REQUEST,QString("cancellation"),username); data_encrypt = protocol->data_encrypt(data); tcpclient->sendToserver(data_encrypt); }