/* * ServerSocket.h * */ #ifndef NETWORKING_SERVERSOCKET_H_ #define NETWORKING_SERVERSOCKET_H_ #include #include #include #include using namespace std; #include #include #include "Tools/WaitQueue.h" #include "Tools/Signal.h" class ServerJob; class ServerSocket { protected: int main_socket, portnum; map clients; std::set used; Signal data_signal; pthread_t thread; vector jobs; // disable copying ServerSocket(const ServerSocket& other); void process_connection(int socket, const string& client_id); virtual void process_client(const string&) {} public: ServerSocket(int Portnum); virtual ~ServerSocket(); virtual void init(); virtual void accept_clients(); void wait_for_client_id(int socket, struct sockaddr dest); // This depends on clients sending their id. // Has to be thread-safe. int get_connection_socket(const string& id); }; /* * ServerSocket where clients do not send any identifiers upon connecting. */ class AnonymousServerSocket : public ServerSocket { private: // No. of accepted connections in this instance queue client_connection_queue; void process_client(const string& client_id); public: AnonymousServerSocket(int Portnum) : ServerSocket(Portnum) { }; void init(); // Get socket and id for the last client who connected int get_connection_socket(string& client_id); void remove_client(const string& client_id); }; #endif /* NETWORKING_SERVERSOCKET_H_ */