X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/34ef822e81b9f236b2f5edf52d351a0f82d59a0c..5caab82b72b4eb02e73b0c3bf98cdfb70e91dc62:/projects/sgauthstress/proto.h

diff --git a/projects/sgauthstress/proto.h b/projects/sgauthstress/proto.h
index 879e7a35..543ae9e7 100644
--- a/projects/sgauthstress/proto.h
+++ b/projects/sgauthstress/proto.h
@@ -6,6 +6,8 @@
 #include <poll.h>
 
 #include <string>
+#include <list>
+#include <vector>
 #include <map>
 
 #include "stg/os_int.h"
@@ -30,23 +32,26 @@ class PROTO {
 
         const std::string GetStrError() const { return errorStr; }
 
-        void AddUser(const USER & user);
+        void AddUser(const USER & user, bool connect = false);
 
         bool Connect(uint32_t ip);
         bool Disconnect(uint32_t ip);
+
+        size_t UserCount() const { return users.size(); }
     private:
         BLOWFISH_CTX ctx;
         struct sockaddr_in localAddr;
         struct sockaddr_in serverAddr;
         int timeout;
 
-        std::map<uint32_t, USER> users;
+        std::list<std::pair<uint32_t, USER> > users;
         std::vector<struct pollfd> pollFds;
 
         bool running;
         bool stopped;
 
         pthread_t tid;
+        pthread_mutex_t mutex;
 
         std::string errorStr;
 
@@ -55,9 +60,10 @@ class PROTO {
         static void * Runner(void * data);
 
         void Run();
+        void CheckTimeouts();
         bool RecvPacket();
         bool SendPacket(const void * buffer, size_t length, USER * user);
-        bool HandlePacket(const char * buffer, USER * user);
+        bool HandlePacket(const char * buffer, size_t length, USER * user);
 
         bool CONN_SYN_ACK_Proc(const void * buffer, USER * user);
         bool ALIVE_SYN_Proc(const void * buffer, USER * user);
@@ -71,6 +77,9 @@ class PROTO {
         bool Send_DISCONN_SYN(USER * user);
         bool Send_DISCONN_ACK(USER * user);
         bool Send_ALIVE_ACK(USER * user);
+
+        bool RealConnect(USER * user);
+        bool RealDisconnect(USER * user);
 };
 
 #endif