aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorauth <[email protected]>2020-07-05 12:00:04 +0200
committerauth <[email protected]>2020-07-05 12:00:04 +0200
commit6a33a72c7b423afb143a67a3e88d27e4bcafd116 (patch)
tree93766d360a2eb76ec35362bb2645910f7297a742 /server
parentMerge branch 'master' of github.com:auth12/loader (diff)
downloadloader-6a33a72c7b423afb143a67a3e88d27e4bcafd116.tar.xz
loader-6a33a72c7b423afb143a67a3e88d27e4bcafd116.zip
More assembler implementations.
Small changes to client on server.
Diffstat (limited to 'server')
-rw-r--r--server/src/client/client.h15
-rw-r--r--server/src/main.cpp7
-rw-r--r--server/src/server/server.cpp11
3 files changed, 17 insertions, 16 deletions
diff --git a/server/src/client/client.h b/server/src/client/client.h
index 4dad02e..141ac67 100644
--- a/server/src/client/client.h
+++ b/server/src/client/client.h
@@ -15,7 +15,6 @@ class client {
public:
std::string hwid;
-
client() : m_socket{-1} {};
client(const int& socket, const std::string_view ip)
: m_socket{std::move(socket)}, m_ip{ip}, m_ssl{nullptr} {}
@@ -27,6 +26,8 @@ class client {
close(m_socket);
SSL_shutdown(m_ssl);
SSL_free(m_ssl);
+
+ m_socket = -1;
}
void reset() { std::time(&m_time); }
@@ -46,12 +47,12 @@ class client {
int stream(std::vector<char>& data, float* dur = nullptr);
int read_stream(std::vector<char>& out);
- int stream(std::string &str) {
+ int stream(std::string& str) {
std::vector<char> vec(str.begin(), str.end());
return stream(vec);
}
- int read_stream(std::string &str) {
+ int read_stream(std::string& str) {
std::vector<char> out;
int ret = read_stream(out);
str.assign(out.begin(), out.end());
@@ -60,8 +61,10 @@ class client {
void gen_session();
- int &get_socket() { return m_socket; }
- auto &get_ip() { return m_ip; }
- auto &get_session() { return m_session_id; }
+ int& get_socket() { return m_socket; }
+ auto& get_ip() { return m_ip; }
+ auto& get_session() { return m_session_id; }
+
+ operator bool() const { return m_ssl && m_socket > 0; }
};
}; // namespace tcp \ No newline at end of file
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 77269a9..e7e0253 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -26,12 +26,6 @@ int main(int argc, char* argv[]) {
});
client_server.disconnect_event.add([&](tcp::client& client) {
- auto it = std::find_if(client_server().begin(),
- client_server().end(), [&](tcp::client& c) {
- return client.get_socket() == c.get_socket();
- });
-
- client_server().erase(it);
client.cleanup();
io::logger->info("{} disconnected", client.get_ip());
@@ -67,6 +61,7 @@ int main(int argc, char* argv[]) {
});
client_server.timeout_event.add([&](tcp::client& client) {
+ client.cleanup();
io::logger->info("{} timed out.", client.get_ip());
});
diff --git a/server/src/server/server.cpp b/server/src/server/server.cpp
index 5996eb3..b7f7606 100644
--- a/server/src/server/server.cpp
+++ b/server/src/server/server.cpp
@@ -57,7 +57,13 @@ tcp::select_status tcp::server::peek() {
int maxfd = m_socket;
- for (auto& c : client_stack) {
+ for (int i = 0; i < client_stack.size(); i++) {
+ auto c = client_stack[i];
+ if(!c) {
+ client_stack.erase(client_stack.begin() + i);
+ continue;
+ }
+
const int s = c.get_socket();
FD_SET(s, &m_server_set);
@@ -144,9 +150,6 @@ void tcp::server::check_timeout() {
if (it != client_stack.end()) {
timeout_event.call(*it);
-
- it->cleanup();
- client_stack.erase(it);
}
}