summaryrefslogtreecommitdiffstats
path: root/src/Core/ConnectionManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Core/ConnectionManager.cpp')
-rw-r--r--src/Core/ConnectionManager.cpp39
1 files changed, 31 insertions, 8 deletions
diff --git a/src/Core/ConnectionManager.cpp b/src/Core/ConnectionManager.cpp
index 3b99875..fe9f639 100644
--- a/src/Core/ConnectionManager.cpp
+++ b/src/Core/ConnectionManager.cpp
@@ -29,21 +29,48 @@ namespace Mad {
namespace Core {
void ConnectionManager::refreshPollfds() {
+ // TODO: refreshPollfds()
+ pollfds.clear();
+
+ for(std::list<Net::Listener*>::iterator listener = listeners.begin(); listener != listeners.end(); ++listener) {
+ std::vector<struct pollfd> fds = (*listener)->getPollfds();
+ pollfds.insert(pollfds.end(), fds.begin(), fds.end());
+ }
+
+ for(std::list<Net::ServerConnection*>::iterator con = daemonConnections.begin(); con != daemonConnections.end(); ++con)
+ pollfds.push_back((*con)->getPollfd());
+
+ for(std::list<Net::ServerConnection*>::iterator con = clientConnections.begin(); con != clientConnections.end(); ++con)
+ pollfds.push_back((*con)->getPollfd());
}
-void ConnectionManager::daemonReceiveHandler(const Net::Connection*, const Net::Packet &packet) const {
+void ConnectionManager::daemonReceiveHandler(const Net::Connection *connection, const Net::Packet &packet) {
std::cout << "Received daemon packet:" << std::endl;
std::cout << " Type: " << packet.getType() << std::endl;
std::cout << " Request ID: 0x" << std::hex << std::uppercase << packet.getRequestId() << std::dec << std::endl;
std::cout << " Length: " << packet.getLength() << std::endl;
+
+ for(std::list<Net::ServerConnection*>::iterator con = daemonConnections.begin(); con != daemonConnections.end(); ++con) {
+ if(*con == connection) {
+ (*con)->disconnect();
+ break;
+ }
+ }
}
-void ConnectionManager::clientReceiveHandler(const Net::Connection*, const Net::Packet &packet) const {
+void ConnectionManager::clientReceiveHandler(const Net::Connection *connection, const Net::Packet &packet) {
std::cout << "Received client packet:" << std::endl;
std::cout << " Type: " << packet.getType() << std::endl;
std::cout << " Request ID: 0x" << std::hex << std::uppercase << packet.getRequestId() << std::dec << std::endl;
std::cout << " Length: " << packet.getLength() << std::endl;
+
+ for(std::list<Net::ServerConnection*>::iterator con = clientConnections.begin(); con != clientConnections.end(); ++con) {
+ if(*con == connection) {
+ (*con)->disconnect();
+ break;
+ }
+ }
}
ConnectionManager::ConnectionManager() {
@@ -64,12 +91,6 @@ ConnectionManager::~ConnectionManager() {
delete *con;
}
-void ConnectionManager::wait(int timeout) {
- // TODO: wait()
-
- usleep(timeout);
-}
-
void ConnectionManager::run() {
// TODO: Logging
@@ -109,6 +130,8 @@ void ConnectionManager::run() {
}
}
}
+
+ refreshPollfds();
}
}