X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fserver.h;h=00f29cd837b19c9c21630c7fbbf0be835d942b04;hb=d52b943dbd966665962fb4af269688effa8fc81e;hp=454f69ca81e1266824c6cd7d5d3e58a0f36380b2;hpb=4fe35ea1372eda035618c6e961f421187d3ae837;p=m6w6%2Flibmemcached diff --git a/libtest/server.h b/libtest/server.h index 454f69ca..00f29cd8 100644 --- a/libtest/server.h +++ b/libtest/server.h @@ -9,32 +9,143 @@ #pragma once +#include +#include +#include +#include #include +#include -/* - Server startup and shutdown functions. -*/ -#ifdef __cplusplus -extern "C" { -#endif +#define SERVERS_TO_CREATE 5 -#include +struct server_st; -typedef struct server_startup_st server_startup_st; -#define SERVERS_TO_CREATE 5 +typedef pid_t (test_server_getpid)(server_st &); +typedef bool (test_server_ping)(server_st &); + +struct server_st { +private: + bool _used; + pid_t _pid; + in_port_t _port; + char pid_file[FILENAME_MAX]; // Did we start it, or was it just sitting there? + std::string _command; + test_server_getpid *__get_pid; + test_server_ping *__ping; + std::string _hostname; + +public: + server_st(in_port_t port_arg, test_server_getpid *, test_server_ping *); + + server_st(const std::string &socket_file, test_server_getpid *, test_server_ping *); + + void set_methods(test_server_getpid *get_pid_arg, test_server_ping *ping_arg) + { + __get_pid= get_pid_arg; + __ping= ping_arg; + } + + const char *hostname() const + { + if (_hostname.empty()) + return ""; + + return _hostname.c_str(); + } + + bool ping() + { + if (__ping) + return __ping(*this); + + return false; + } + + pid_t get_pid() + { + if (__get_pid) + return _pid= __get_pid(*this); + + return -1; + } + + void set_port(in_port_t arg) + { + _port= arg; + } + + in_port_t port() const + { + return _port; + } + + bool has_port() const + { + return (_port != 0); + } + + void set_command(const char *arg) + { + _command= arg; + } + + void set_used() + { + _used= true; + } + + pid_t pid(); + + bool is_used() const + { + return _used; + } + + ~server_st(); + + bool has_pid() + { + return (_pid > 1); + } + + bool is_socket() const + { + return _hostname[0] == '/'; + } + + bool kill(); + bool start(); + +private: + void reset_pid(); +}; + +std::ostream& operator<<(std::ostream& output, const server_st &arg); struct server_startup_st { - uint8_t count; + uint32_t count; uint8_t udp; - memcached_server_st *servers; - char *server_list; - char pid_file[SERVERS_TO_CREATE][FILENAME_MAX]; - in_port_t port[SERVERS_TO_CREATE]; - int pids[SERVERS_TO_CREATE]; + std::string server_list; + std::vector servers; + + server_startup_st() : + count(SERVERS_TO_CREATE), + udp(0) + { } + + void shutdown(); + void push_server(server_st *); + + ~server_startup_st(); }; -void server_startup(server_startup_st *construct); +#ifdef __cplusplus +extern "C" { +#endif + + +bool server_startup(server_startup_st *construct); void server_shutdown(server_startup_st *construct); #ifdef __cplusplus