]> git.stg.codes - stg.git/blobdiff - projects/sgauthstress/proto.h
Fix some types and add UserCount method to PROTO
[stg.git] / projects / sgauthstress / proto.h
index f478c0e1eb4133dad60a6294a1300457938e10b9..05fe472266ef092f2d6f9539d83a516b4b316b09 100644 (file)
@@ -3,8 +3,10 @@
 
 #include <netinet/ip.h>
 #include <pthread.h>
+#include <poll.h>
 
 #include <string>
+#include <vector>
 #include <map>
 
 #include "stg/os_int.h"
@@ -14,7 +16,7 @@
 
 class PROTO;
 
-typedef bool (PROTO::*PacketProcessor)(char *);
+typedef bool (PROTO::*PacketProcessor)(const void *, USER *);
 
 class PROTO {
     public:
@@ -29,16 +31,20 @@ class PROTO {
 
         const std::string GetStrError() const { return errorStr; }
 
-        bool Connect(const std::string & login);
-        bool Disconnect(const std::string & login);
+        void AddUser(const USER & user);
+
+        bool Connect(uint32_t ip);
+        bool Disconnect(uint32_t ip);
+
+        size_t UserCount() const { return users.size(); }
     private:
-        int sock;
         BLOWFISH_CTX ctx;
         struct sockaddr_in localAddr;
         struct sockaddr_in serverAddr;
         int timeout;
 
-        std::map<std::string, USER> users;
+        std::vector<std::pair<uint32_t, USER> > users;
+        std::vector<struct pollfd> pollFds;
 
         bool running;
         bool stopped;
@@ -53,14 +59,21 @@ class PROTO {
 
         void Run();
         bool RecvPacket();
-        bool HandlePacket(char * buffer);
-
-        bool CONN_SYN_ACK_Proc(char * buffer);
-        bool ALIVE_SYN_Proc(char * buffer);
-        bool DISCONN_SYN_ACK_Proc(char * buffer);
-        bool FIN_Proc(char * buffer);
-        bool INFO_Proc(char * buffer);
-        bool ERR_Proc(char * buffer);
+        bool SendPacket(const void * buffer, size_t length, USER * user);
+        bool HandlePacket(const char * buffer, USER * user);
+
+        bool CONN_SYN_ACK_Proc(const void * buffer, USER * user);
+        bool ALIVE_SYN_Proc(const void * buffer, USER * user);
+        bool DISCONN_SYN_ACK_Proc(const void * buffer, USER * user);
+        bool FIN_Proc(const void * buffer, USER * user);
+        bool INFO_Proc(const void * buffer, USER * user);
+        bool ERR_Proc(const void * buffer, USER * user);
+
+        bool Send_CONN_SYN(USER * user);
+        bool Send_CONN_ACK(USER * user);
+        bool Send_DISCONN_SYN(USER * user);
+        bool Send_DISCONN_ACK(USER * user);
+        bool Send_ALIVE_ACK(USER * user);
 };
 
 #endif