#include <string>
#include <map>
+#include "connection.hxx"
+#include "types.hxx"
+
namespace libt2n
{
+class server;
+
/**
Basic connection class
*/
-class connection
+class server_connection : public connection
{
private:
int timeout;
int last_action_time;
- bool closed;
- std::string buffer;
+ unsigned int connection_id;
protected:
- connection(int _timeout)
+ server_connection(int _timeout)
+ : connection()
{
set_timeout(_timeout);
reset_timeout();
- closed=false;
+ connection_id=0;
+ my_server=0;
}
- public:
- ~connection()
- { this->close(); }
+ server *my_server;
+ public:
void check_timeout();
void reset_timeout();
void set_timeout(int _timeout)
{ timeout=_timeout; }
- bool is_closed()
- { return closed; }
+ void set_server(server* _my_server)
+ { my_server=_my_server; }
- virtual void close()
- { closed=true; }
-
- virtual void fill_buffer(void)=0;
-
- bool get_packet(std::string& data, unsigned int& conn_id);
- virtual void write(const std::string& data)=0;
+ void set_id(unsigned int _connection_id)
+ { connection_id=_connection_id; }
+ unsigned int get_id()
+ { return connection_id; }
};
/**
*/
class server
{
- public:
- enum log_level_values { none=0, error=1, debug=2 };
-
private:
int default_timeout;
log_level_values log_level;
std::ostream *logstream;
unsigned int next_id;
- std::map<unsigned int, connection*> connections;
protected:
+ std::map<unsigned int, server_connection*> connections;
+
server()
{
set_default_timeout(30);
set_logging(NULL,none);
- next_id=0;
+ next_id=1;
}
+ int add_connection(server_connection* newconn);
+
public:
virtual ~server();
void set_default_timeout(int _default_timeout)
{ default_timeout=_default_timeout; }
+ int get_default_timeout(void)
+ { return default_timeout; }
void set_logging(std::ostream *_logstream, log_level_values _log_level)
{
logstream=_logstream;
}
- connection* get_connection(unsigned int conn_id);
+ server_connection* get_connection(unsigned int conn_id);
virtual void fill_buffer(long long usec_timeout=-1)=0;
- void check_timeout();
+ void cleanup();
+ bool get_packet(std::string& data)
+ { unsigned int x; return get_packet(data,x); }
bool get_packet(std::string& data, unsigned int& conn_id);
- void fill_connection_buffers(void);
+ virtual void fill_connection_buffers(void)=0;
- protected:
void log(log_level_values level, const std::string& message)
{ log(level,message.c_str()); }
void log(log_level_values level, const char* message);