TCPClient/datamanager.cpp

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;
}