195 lines
6.9 KiB
C++
195 lines
6.9 KiB
C++
#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<QByteArray> 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<QString> 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<QString>{"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<QString>{"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<QString>{"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<QString>{"name",username});
|
|
data_encrypt = protocol->data_encrypt(data);
|
|
tcpclient->sendToserver(data_encrypt);
|
|
qDebug() << "发送更新在线用户列表信息" << data;
|
|
}
|