/** * Given a NodeInfoMsg inserts the node into NetworkNode database. * @param session can be null * Returns true if new node inserted, false if already present * Delete the message */ bool NodeNetworkSystem::_addNetworkNode(Session* session, NodeInfoMsg* msg) { if (_DEBUG) cout << "NodeNetworkSystem::_addNetworkNode" << endl; bool retval = false; NetworkNode* connectedNode = NetworkNode::getNodeById(msg->getId()); if (connectedNode == NULL) { /* The connected node is unknown. Add it */ retval = true; if (_DEBUG) cout << "NodeNetworkSystem::_addNetworkNode: creating a new NetworkNode" << endl; switch (msg->getNodeType()) { case NODETYPE_CAMERA: connectedNode = NetworkNode::addCamera(msg->getId(), msg->getAmAddress(), msg->getIpAddress(), msg->getServerPort()); break; case NODETYPE_COOPERATOR: connectedNode = NetworkNode::addCooperator(msg->getId()); break; default: if (_DEBUG) cerr << "NodeNetworkSystem::_addNetworkNode: Error! Notification of a type " << msg->getNodeType() << " node!" << endl; return false; } if (_DEBUG) { cout << "NodeNetworkSystem::_addNetworkNode: Network Topology updated " << endl; NetworkNode::printNetwork(); } } if (session) { connectedNode->setSession(session); } if (connectedNode->getType() == NODETYPE_COOPERATOR) { switch (NetworkNode::getMyself()->getType()) { case NODETYPE_CAMERA: { _offloadingManager->addCooperator(connectedNode); CoopInfoMsg* infoMsg = new CoopInfoMsg(NetworkNode::getMyself(), NetworkNode::getSink(), LINKTYPE_TCP, _offloadingManager->getCooperatorsIds()); sendMessage(infoMsg); break; } default: break; } } delete msg; return retval; }
void NodeNetworkSystem::serverRemoveSessionHandler(Session* session) { switch (_nodeProcessingSystem->getNodeType()) { case NODETYPE_SINK: { NetworkNode* camera = NetworkNode::getCameraBySession(session); if (camera) { if (_DEBUG) cout << "NodeNetworkSystem::serverAddSessionHandler: Camera " << (unsigned short) camera->getId() << " disconnected " << endl; camera->setSession(NULL); } break; } case NODETYPE_CAMERA: { NetworkNode* cooperator = NetworkNode::getCooperatorBySession(session); if (cooperator) { if (_DEBUG) cout << "NodeNetworkSystem::serverAddSessionHandler: Cooperator " << (unsigned short) cooperator->getId() << " disconnected " << endl; cooperator->setSession(NULL); _offloadingManager->removeCooperator(cooperator); CoopInfoMsg* infoMsg = new CoopInfoMsg(NetworkNode::getMyself(), NetworkNode::getSink(), LINKTYPE_TCP, _offloadingManager->getCooperatorsIds()); sendMessage(infoMsg); } break; } default: { if (_DEBUG) cerr << "NodeNetworkSystem::serverAddSessionHandler: Node of type " << _nodeProcessingSystem->getNodeType() << " can't reach this point" << endl; } } }