X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/6ce56fd8481f4fc5ae2cf9383e6b6ecbff42b41d..70c7a7e4463c27aa6592225fd3ea5e2bc49f048c:/projects/sgauthstress/proto.h diff --git a/projects/sgauthstress/proto.h b/projects/sgauthstress/proto.h index f478c0e1..746622b7 100644 --- a/projects/sgauthstress/proto.h +++ b/projects/sgauthstress/proto.h @@ -1,10 +1,16 @@ #ifndef __PROTO_H__ #define __PROTO_H__ +#ifndef LINUX +#include +#endif #include #include +#include #include +#include +#include #include #include "stg/os_int.h" @@ -14,7 +20,7 @@ class PROTO; -typedef bool (PROTO::*PacketProcessor)(char *); +typedef bool (PROTO::*PacketProcessor)(const void *, USER *); class PROTO { public: @@ -29,21 +35,26 @@ 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 = false); + + 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 users; + std::list > users; + std::vector pollFds; bool running; bool stopped; pthread_t tid; + pthread_mutex_t mutex; std::string errorStr; @@ -52,15 +63,26 @@ class PROTO { static void * Runner(void * data); void Run(); + void CheckTimeouts(); 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, size_t length, 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); + + bool RealConnect(USER * user); + bool RealDisconnect(USER * user); }; #endif