/** * 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; }
/** * A client component has connected. Notify the server this node */ void NodeNetworkSystem::clientConnectHandler(Session* session) { if (_DEBUG) cout << "NodeNetworkSystem::clientConnectHandler" << endl; NetworkNode* serverNode = NetworkNode::getNodeBySession(session); NetworkNode* myself = NetworkNode::getMyself(); NodeInfoMsg* msg = new NodeInfoMsg(myself, serverNode, LINKTYPE_TCP, myself->getId(), myself->getAmAddr(), session->getSocket()->local_endpoint().address().to_string(), session->getSocket()->local_endpoint().port(), myself->getType()); session->writeMessage(msg); if (myself->getType() == NODETYPE_CAMERA) { CoopInfoMsg* infoMsg = new CoopInfoMsg(NetworkNode::getMyself(), NetworkNode::getSink(), LINKTYPE_TCP, _offloadingManager->getCooperatorsIds()); sendMessage(infoMsg); } }