TCPClient/datamanager.cpp

143 lines
4.5 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->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<QString> 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<QString>{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<QString>{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);
}