-
Notifications
You must be signed in to change notification settings - Fork 0
/
connection.cpp
98 lines (79 loc) · 3.17 KB
/
connection.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include "connection.h"
#include <QDebug>
Connection::Connection(qintptr handle, QObject *parent) : QObject(parent){
socket = new QTcpSocket(this);
socket->setSocketDescriptor(handle);
connect(socket, SIGNAL(readyRead()), SLOT(controller()));
connect(socket, SIGNAL(disconnected()), SLOT(disconnecting()));
}
void Connection::send(QByteArray request){
socket->write(request);
}
QString Connection::getExtension() const{
return extension;
}
void Connection::setFilePath(QString filePath){
canPost = true;
this->filePath = filePath;
}
void Connection::serverTryPost(QJsonObject request){
extension = request.value("Extension").toString();
sizeOfAttachment = request.value("Size").toInt();
request.erase(request.find("Extension"));
request.erase(request.find("Size"));
request.insert("Socket handle", socket->socketDescriptor());
emit sendToServer(QJsonDocument(request).toJson());
}
void Connection::controller(){
QByteArray receivedObject = socket->readAll();
QJsonParseError error;
QJsonObject response;
QJsonObject request = QJsonDocument::fromJson(receivedObject, &error).object();
if(error.error == QJsonParseError::NoError){
if(request.value("Target").toString() == "Post"){
if(request.contains("Size") && request.value("Size").toInt() <= MAX_AFFIX_SIZE)
return serverTryPost(request);
response.insert("Target", "Post");
response.insert("Value", "Deny");
socket->write(QJsonDocument(response).toJson());
}
else if(request.value("Target").toString() == "Get"){
request.insert("Socket handle", socket->socketDescriptor());
emit sendToServer(QJsonDocument(request).toJson());
response.insert("Target", "Get");
response.insert("SizeOfAttachment", QFileInfo(request.value("Reference").toString()).size());
socket->write(QJsonDocument(response).toJson());
}
}
else if(canPost){
QStringList list = filePath.split('/');
list.removeLast();
QString dirPath = "";
for(QString a : list)
dirPath += a + '/';
QDir().mkpath(dirPath);
QFile file(filePath);
file.open(QIODevice::Append);
file.write(receivedObject);
file.close();
response.insert("Target", "Loading");
if(file.size() >= sizeOfAttachment){
sizeOfAttachment = canPost = 0;
response.insert("Reference", filePath);
response.insert("Value", 100);
if(filePath.indexOf("Avatars/") != -1){
response.insert("Target", "AvatarChanged");
QJsonObject serverResponse;
serverResponse.insert("Target", "AvatarChanged");
serverResponse.insert("ID", filePath.split("/").at(1).toInt());
serverResponse.insert("Reference", filePath);
emit sendToServer(QJsonDocument(serverResponse).toJson());
}
extension = filePath = "";
socket->write(QJsonDocument(response).toJson());
}
}
}
void Connection::disconnecting(){
emit disconnected(socket->socketDescriptor());
}