Skip to content

Commit a9349ad

Browse files
committed
Update libraries
Fix compile on MinGW64
1 parent 78aca4b commit a9349ad

File tree

13 files changed

+161
-107
lines changed

13 files changed

+161
-107
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
database
22
out
3+
out.exe

.gitmodules

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
[submodule "json"]
2-
path = json
3-
url = https://github.com/nlohmann/json
41
[submodule "uWebSockets"]
5-
path = uWebSockets
2+
path = lib/uWebSockets
63
url = https://github.com/uWebSockets/uWebSockets
4+
[submodule "json"]
5+
path = lib/json
6+
url = https://github.com/nlohmann/json

Makefile

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
1-
OBJS = server.cpp msg.cpp limiter.cpp database.cpp
2-
UWS = uWebSockets/src/Extensions.cpp uWebSockets/src/Group.cpp uWebSockets/src/WebSocketImpl.cpp uWebSockets/src/Networking.cpp uWebSockets/src/Hub.cpp uWebSockets/src/Node.cpp uWebSockets/src/WebSocket.cpp uWebSockets/src/HTTPSocket.cpp uWebSockets/src/Socket.cpp
1+
OBJS = $(wildcard *.cpp)
32

4-
CC = g++
3+
ALLOBJS = $(OBJS)
54

6-
COMPILER_FLAGS = -Wall -std=gnu++0x -O2
5+
COMPILER_FLAGS = -Wall -std=c++17 -O2
76

8-
LIBS = -I ./uWebSockets/src -I ./json/src -luv -lcrypto -lssl -lz
7+
LIBS = -I ./ -I ./lib/json/include/ -I ./lib/uWebSockets/src/ -L ./lib/uWebSockets/ -s -static -luWS -lssl -lz -lcrypto
98

10-
OBJ_NAME = out
9+
ifeq ($(OS),Windows_NT)
10+
LIBS += -luv -lstdc++ -Wl,--whole-archive -lpthread -Wl,-Bdynamic,--no-whole-archive -lWs2_32 -lwsock32 -lGdi32 -lpsapi -liphlpapi -luserenv
11+
endif
1112

12-
all : $(OBJS)
13-
$(CC) $(OBJS) $(UWS) $(COMPILER_FLAGS) $(LIBS) -o $(OBJ_NAME)
13+
TARGET = out
1414

15-
vanilla : $(OBJS)
16-
$(CC) $(OBJS) $(UWS) $(COMPILER_FLAGS) -DVANILLA_SERVER $(LIBS) -o $(OBJ_NAME)
15+
all: uWS $(ALLOBJS)
16+
$(CXX) $(ALLOBJS) $(COMPILER_FLAGS) $(LIBS) -o $(TARGET)
17+
18+
vanilla: uWS $(ALLOBJS)
19+
$(CXX) $(ALLOBJS) $(COMPILER_FLAGS) -DVANILLA_SERVER $(LIBS) -o $(TARGET)
20+
21+
g: uWS $(ALLOBJS)
22+
$(CXX) $(ALLOBJS) -Wall -std=gnu++0x -Og -g $(LIBS) -o $(TARGET)
23+
24+
uWS:
25+
$(MAKE) -C lib/uWebSockets -f ../uWebSockets.mk

database.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "server.hpp"
2+
#include <iostream>
23

34
server::Database::pinfo_t server::Database::get_usrinfo(uint32_t hash){
45
server::Database::pinfo_t ret = {false, 0, {}};

json

Lines changed: 0 additions & 1 deletion
This file was deleted.

lib/json

Submodule json added at d2dd27d

lib/uWebSockets

Submodule uWebSockets added at 6d80b42
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
diff --git a/src/Networking.h b/src/Networking.h
2+
index e26888c..0b87e8e 100644
3+
--- a/src/Networking.h
4+
+++ b/src/Networking.h
5+
@@ -29,6 +29,10 @@
6+
#pragma comment(lib, "ws2_32.lib")
7+
#define SHUT_WR SD_SEND
8+
#ifdef __MINGW32__
9+
+extern "C" {
10+
+ WINSOCK_API_LINKAGE INT WSAAPI inet_pton( INT Family, PCSTR pszAddrString, PVOID pAddrBuf);
11+
+ WINSOCK_API_LINKAGE PCSTR WSAAPI inet_ntop(INT Family, PVOID pAddr, PSTR pStringBuf, size_t StringBufSize);
12+
+}
13+
// Windows has always been tied to LE
14+
#define htobe64(x) __builtin_bswap64(x)
15+
#define be64toh(x) __builtin_bswap64(x)

lib/uWebSockets.mk

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
CPPFILES = $(wildcard src/*.cpp)
2+
OBJFILES = $(CPPFILES:src/%.cpp=%.o)
3+
INCLUDES = -I src -lssl -lz -lcrypto
4+
5+
ifeq ($(OS),Windows_NT)
6+
INCLUDES += -luv -lWs2_32 -lwsock32 -lGdi32 -lpsapi -liphlpapi -luserenv
7+
endif
8+
9+
LIB = libuWS.a
10+
11+
CPP_STATIC := -std=c++11 -O3 $(INCLUDES) -c $(CPPFILES)
12+
13+
$(LIB):
14+
$(CXX) $(CPPFLAGS) $(CFLAGS) $(CPP_STATIC) -s
15+
ar rcs $(LIB) $(OBJFILES)
16+
rm -f $(OBJFILES)
17+
18+
clean:
19+
rm -f $(LIB)
20+
rm -f $(OBJFILES)

msg.cpp

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "server.hpp"
22
#include <math.h>
3+
#include <iostream>
34

45
using nlohmann::json;
56

@@ -8,13 +9,13 @@ std::string roundfloat(const float, int);
89
size_t getUTF8strlen(const std::string&);
910

1011
#ifndef VANILLA_SERVER
11-
void server::msg::bin_n(server* sv, const char* msg, size_t len, uWS::WebSocket<uWS::SERVER> s){
12+
void server::msg::bin_n(server* sv, const char* msg, size_t len, uWS::WebSocket<uWS::SERVER> * s){
1213
if(len < 12) return;
1314
/* very simple filter */
1415
for(size_t x = 9; x < len; x += 3)
1516
if((uint8_t)msg[x] > 87)
1617
return;
17-
auto search = sv->clients.find(*(std::string *) s.getUserData());
18+
auto search = sv->clients.find(*(std::string *) s->getUserData());
1819
if(search != sv->clients.end()){
1920
auto ssearch = sv->rooms.find(search->second.sockets.at(s));
2021
if(ssearch != sv->rooms.end() && (!ssearch->second->is_crownsolo()
@@ -38,10 +39,10 @@ void server::msg::bin_n(server* sv, const char* msg, size_t len, uWS::WebSocket<
3839
}
3940
#endif
4041

41-
void server::msg::n(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
42+
void server::msg::n(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
4243
/* TODO: validate note data before sending */
4344
if(j["n"].is_array() && j["t"].is_number()){
44-
auto search = sv->clients.find(*(std::string *) s.getUserData());
45+
auto search = sv->clients.find(*(std::string *) s->getUserData());
4546
if(search != sv->clients.end()){
4647
auto ssearch = sv->rooms.find(search->second.sockets.at(s));
4748
if(ssearch != sv->rooms.end() && (!ssearch->second->is_crownsolo()
@@ -58,8 +59,8 @@ void server::msg::n(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
5859
}
5960
}
6061

61-
void server::msg::a(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
62-
auto search = sv->clients.find(*(std::string *) s.getUserData());
62+
void server::msg::a(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
63+
auto search = sv->clients.find(*(std::string *) s->getUserData());
6364
if(search != sv->clients.end() &&
6465
j["message"].is_string() &&
6566
getUTF8strlen(j["message"].get<std::string>()) <= 512){
@@ -77,13 +78,13 @@ void server::msg::a(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
7778
res[0]["p"]["id"] = usr->id;
7879
ssearch->second->push_chat(res[0]);
7980
ssearch->second->broadcast(res, s);
80-
s.send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
81+
s->send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
8182
}
8283
}
8384
}
8485
}
8586

86-
void server::msg::m(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
87+
void server::msg::m(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
8788
auto res = json::array();
8889
float x = 0;
8990
float y = 0;
@@ -96,7 +97,7 @@ void server::msg::m(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
9697
x = j["x"].get<float>();
9798
y = j["y"].get<float>();
9899
} else { return; }
99-
auto search = sv->clients.find(*(std::string *) s.getUserData());
100+
auto search = sv->clients.find(*(std::string *) s->getUserData());
100101
if(search != sv->clients.end()){
101102
auto ssearch = sv->rooms.find(search->second.sockets.at(s));
102103
if(ssearch != sv->rooms.end()){
@@ -116,20 +117,20 @@ void server::msg::m(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
116117
}
117118
}
118119

119-
void server::msg::t(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
120+
void server::msg::t(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
120121
auto res = json::array();
121122
if(j["e"].is_number()){
122123
res[0] = {
123124
{"m", "t"},
124125
{"t", js_date_now()},
125126
{"e", j["e"].get<long int>()}
126127
};
127-
s.send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
128+
s->send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
128129
}
129130
}
130-
void server::msg::ch(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
131+
void server::msg::ch(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
131132
auto res = json::array();
132-
auto search = sv->clients.find(*(std::string *) s.getUserData());
133+
auto search = sv->clients.find(*(std::string *) s->getUserData());
133134
if(j["_id"].is_string() && search != sv->clients.end() && search->second.user->quota.room.can_spend()){
134135
std::string nr = j["_id"].get<std::string>();
135136
json set = {};
@@ -155,29 +156,29 @@ void server::msg::ch(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
155156
{"m", "c"},
156157
{"c", room->get_chatlog_json()}
157158
};
158-
s.send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
159+
s->send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
159160
}
160161
}
161162

162163

163164

164-
void server::msg::hi(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
165+
void server::msg::hi(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
165166
auto res = json::array();
166-
auto search = sv->clients.find(*(std::string *) s.getUserData());
167+
auto search = sv->clients.find(*(std::string *) s->getUserData());
167168
if(search == sv->clients.end() || search->second.sockets.find(s) == search->second.sockets.end()){
168169
res[0] = json::object({
169170
{"m", "hi"},
170171
{"u", sv->genusr(s)},
171172
{"t", js_date_now()}
172173
});
173-
s.send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
174+
s->send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
174175
}
175176
}
176177

177178

178179

179-
void server::msg::chown(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
180-
auto search = sv->clients.find(*(std::string *) s.getUserData());
180+
void server::msg::chown(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
181+
auto search = sv->clients.find(*(std::string *) s->getUserData());
181182
if(search == sv->clients.end()) return;
182183
auto ssearch = sv->rooms.find(search->second.sockets.at(s));
183184
if(ssearch == sv->rooms.end()) return;
@@ -192,13 +193,12 @@ void server::msg::chown(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
192193
ssearch->second->set_owner(newowner);
193194
json res = json::array();
194195
res[0] = ssearch->second->get_json(ssearch->first, true);
195-
uWS::WebSocket<uWS::SERVER> a;
196-
ssearch->second->broadcast(res, a);
196+
ssearch->second->broadcast(res, nullptr);
197197
}
198198
}
199199

200-
void server::msg::chset(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
201-
auto search = sv->clients.find(*(std::string *) s.getUserData());
200+
void server::msg::chset(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
201+
auto search = sv->clients.find(*(std::string *) s->getUserData());
202202
if(search == sv->clients.end()) return;
203203
if(!search->second.user->quota.room.can_spend()) return; /* ! */
204204
auto ssearch = sv->rooms.find(search->second.sockets.at(s));
@@ -209,9 +209,9 @@ void server::msg::chset(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
209209
}
210210
}
211211

212-
void server::msg::userset(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
212+
void server::msg::userset(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
213213
if(j["set"].is_object() && j["set"]["name"].is_string()){
214-
std::string ip = *(std::string *) s.getUserData();
214+
std::string ip = *(std::string *) s->getUserData();
215215
auto search = sv->clients.find(ip);
216216
if(search != sv->clients.end() && search->second.user->quota.name.can_spend()){
217217
std::string newn = j["set"]["name"].get<std::string>();
@@ -223,9 +223,9 @@ void server::msg::userset(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
223223
}
224224
}
225225

226-
void server::msg::adminmsg(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
226+
void server::msg::adminmsg(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
227227
if(j["password"].is_string() && sv->is_adminpw(j["password"].get<std::string>()) && j["message"].is_object()){
228-
std::string ip(*(std::string *) s.getUserData());
228+
std::string ip(*(std::string *) s->getUserData());
229229
auto search = sv->clients.find(ip);
230230
if(search == sv->clients.end()) return;
231231
auto ssearch = sv->rooms.find(search->second.sockets.at(s));
@@ -256,18 +256,18 @@ void server::msg::adminmsg(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
256256
}
257257
}
258258

259-
void server::msg::kickban(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
259+
void server::msg::kickban(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
260260
return;
261261
}
262262

263263

264264

265-
void server::msg::lsl(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
265+
void server::msg::lsl(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
266266
sv->roomlist_watchers.erase(s);
267267
}
268268

269-
void server::msg::lsp(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
270-
auto search = sv->clients.find(*(std::string *) s.getUserData());
269+
void server::msg::lsp(server* sv, json& j, uWS::WebSocket<uWS::SERVER> * s){
270+
auto search = sv->clients.find(*(std::string *) s->getUserData());
271271
if(search == sv->clients.end()) return;
272272
if(!search->second.user->quota.rmls.can_spend()) return;
273273
json res = json::array();
@@ -277,5 +277,5 @@ void server::msg::lsp(server* sv, json& j, uWS::WebSocket<uWS::SERVER> s){
277277
{"u", sv->get_roomlist()}
278278
};
279279
sv->roomlist_watchers.emplace(s);
280-
s.send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
280+
s->send((char *)res.dump().c_str(), res.dump().size(), uWS::TEXT);
281281
}

0 commit comments

Comments
 (0)