-
Notifications
You must be signed in to change notification settings - Fork 0
/
Request.h
148 lines (113 loc) · 2.88 KB
/
Request.h
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
Class represents ever "request" or data that the
client sends to the websockets server.
*/
#ifndef REQUEST_H
#define REQUEST_H
#include <QRegExp>
#include <QStringList>
#include <Qt/qvector3d.h>
#include "Client.h"
class Request {
public:
enum Type {
UnitMovement,
AttackOrder,
PrivateChat,
AllianceChat,
Authentication
};
Request(Client *client, QString data) {
this->valid = false;
this->client = client;
this->deserialize(data);
}
//getters
Client* getClient() {
return this->client;
}
bool isValid() {
return this->valid;
}
int getType() {
return this->type;
}
QString getId() {
return this->id;
}
QVector3D *getDestination() {
return this->dest;
}
QString getAttackerId() {
return this->attackerId;
}
QString getTargetId() {
return this->targetId;
}
QString getRecipient() {
return this->recipient;
}
QString getMessage() {
return this->message;
}
QString getSessionId() {
return this->sessionId;
}
protected:
/*
Reques formats:
unit movment
type,unitId,dest_x,dest_y,dest_z
attack order
type,attacerShipId,targetShipId
private chat:
type,recipient,message message in doublequotes
alliance chat
type,message
authentication
type,sessionId
*/
void deserialize(QString data) {
QStringList strList = data.split(",");
int count = strList.count();
if (count == 1) {
this->valid = false;
return;
}
this->type = strList.at(0).toInt();
if (this->type == Request::UnitMovement && count == 5) {
this->id = strList.at(1);
this->dest = new QVector3D(strList.at(2).toFloat(),
strList.at(3).toFloat(), strList.at(4).toFloat());
} else if (this->type == Request::AttackOrder && count == 3) {
this->attackerId = strList.at(1);
this->targetId = strList.at(2);
} else if (this->type == Request::PrivateChat && count == 3) {
this->recipient = strList.at(1);
this->message = strList.at(2);
} else if (this->type == Request::AllianceChat && count == 2) {
this->message = strList.at(1);
} else if (this->type == Request::Authentication && count == 2) {
this->sessionId = strList.at(1);
} else {
this->valid = false;
return;
}
this->valid = true;
route();
}
void route() {
}
private:
Client *client;
bool valid;
int type;
QString id;
QVector3D *dest;
QString attackerId;
QString targetId;
QString recipient;
QString message;
QString sessionId;
};
#endif // REQUEST_H