forked from yydcaib/TCPClient
143 lines
4.5 KiB
C++
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);
|
|
}
|