int main() { quickstartMode = (strcmp(org, "quickstart") == 0); lcd.set_font((unsigned char*) Arial12x12); // Set a nice font for the LCD screen led2 = LED2_OFF; // K64F: turn off the main board LED displayMessage("Connecting"); Thread yellow_thread(flashing_yellow); Thread menu_thread(menu_loop); LOG("***** IBM IoT Client Ethernet Example *****\n"); MQTTEthernet ipstack; ethernetInitialising = false; MQTT::Client<MQTTEthernet, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack); LOG("Ethernet Initialized\n"); if (quickstartMode) getMac(ipstack.getEth(), id, sizeof(id)); attemptConnect(&client, &ipstack); if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) { red(); while (true) wait(1.0); // Permanent failures - don't retry } if (!quickstartMode) { int rc = 0; if ((rc = client.subscribe("iot-2/cmd/+/fmt/json", MQTT::QOS1, messageArrived)) != 0) WARN("rc from MQTT subscribe is %d\n", rc); } blink_interval = 0; int count = 0; while (true) { if (++count == 100) { // Publish a message every second if (publish(&client, &ipstack) != 0) attemptConnect(&client, &ipstack); // if we have lost the connection count = 0; } if (blink_interval == 0) led2 = LED2_OFF; else if (count % blink_interval == 0) led2 = !led2; client.yield(10); // allow the MQTT client to receive messages } }
static void testNSConnect(void) { int portNum = 7211; struct NSCounter basic = { 0, 0, 0 }; struct NSCounter cur; struct NSNetConnectionHandler nsch; struct NSNetBindHandler nsbh; struct NSNet *ns; nsrh.bytesRead = NSRHBytesRead; nsrh.closed = NSRHClosed; nsch.success = NSCHSuccess; nsch.timedOut = NSCHTimedOut; nsch.refused = NSCHRefused; nsch.unknownHost = NSCHUnknownHost; nsbh.success = NSBHBindSuccess; nsbh.error = NSBHBindError; cur = basic; ns = newNSNet(); attemptConnect(ns, &nsch, "notAValidHostName", 5555, &cur); rassert(cur.success == 0 && cur.unknownHost == 1 && cur.refused == 0 && cur.timedOut == 0); cur = basic; rassert(0 == attemptConnect(ns, &nsch, "localhost", 5555, &cur)); waitForNetEvent(ns, 2000); rassert(cur.success == 0 && cur.unknownHost == 0 && cur.refused == 1 && cur.timedOut == 0); cur = basic; rassert(0 == attemptBind(ns, &nsbh, 1, portNum, &cur)); rassert(cur.bindSuccess == 0 && cur.bindError == 0); rassert(0 == attemptConnect(ns, &nsch, "localhost", portNum, &cur)); waitForNetEvent(ns, 1000); rassert(cur.success == 1 && cur.unknownHost == 0 && cur.refused == 0 && cur.timedOut == 0); rassert(cur.bindSuccess == 1 && cur.bindError == 0); cur = basic; rassert(0 == attemptBind(ns, &nsbh, 0, portNum+1, &cur)); rassert(cur.bindSuccess == 0 && cur.bindError == 0); rassert(0 == attemptConnect(ns, &nsch, "localhost", portNum+1, &cur)); waitForNetEvent(ns, 1000); rassert(cur.bindSuccess == 1 && cur.bindError == 0); rassert(connectNSCC != NULL); rassert(bindNSCC != NULL); clearReadBuffer(); { char *msg = "msgtoserver"; writeNSBytes(connectNSCC, msg, strlen(msg)); } waitForNetEvent(ns, 1000); readBufferMustMatch("msgtoserver"); clearReadBuffer(); { char *msg = "msgtoclient!"; while (*msg) { writeNSBytes(bindNSCC, msg, 1); waitForNetEvent(ns, 1000); msg += 1; } } readBufferMustMatch("msgtoclient!"); }
bool AbstractNetworkManager::attemptPendingNodes() { bool ret_val = false; for (std::vector<Node*>::iterator i = mNodes.begin(); i != mNodes.end() ; i++) { if ( Node::PENDING == (*i)->getStatus() ) { if ( attemptConnect(*i) ) { // If any of the nodes were successful connecting // then we should return true ret_val = true; } } } return ret_val; }
void PatchRoadGenerator::generateRoadNetwork() { srand(12345); // mark all the existing vertices as fixed { RoadVertexIter vi, vend; for (boost::tie(vi, vend) = boost::vertices(roads.graph); vi != vend; ++vi) { roads.graph[*vi]->fixed = true; } } // remove all the local streets temporalily QMap<RoadEdgeDesc, bool> originalLocalStreets; { RoadEdgeIter ei, eend; for (boost::tie(ei, eend) = boost::edges(roads.graph); ei != eend; ++ei) { if (!roads.graph[*ei]->valid) continue; if (roads.graph[*ei]->type == RoadEdge::TYPE_STREET) { originalLocalStreets[*ei] = true; roads.graph[*ei]->valid = false; } } } std::list<RoadVertexDesc> seeds; // Avenueのシードを生成 generateAvenueSeeds(seeds); // Avenueを生成 std::cout << "Avenue generation started." << std::endl; { // detect interesting shapes std::vector<std::vector<RoadEdgeDescs> > shapes; std::vector<std::vector<Patch> > patches; { shapes.resize(features.size()); patches.resize(features.size()); for (int i = 0; i < features.size(); ++i) { shapes[i] = features[i].shapes(RoadEdge::TYPE_AVENUE, G::getFloat("houghScale"), G::getFloat("avenuePatchDistance")); patches[i] = RoadGeneratorHelper::convertToPatch(RoadEdge::TYPE_AVENUE, features[i].roads(RoadEdge::TYPE_AVENUE), features[i].roads(RoadEdge::TYPE_AVENUE), shapes[i]); } } int iter; for (iter = 0; !seeds.empty() && iter < G::getInt("numAvenueIterations"); ) { RoadVertexDesc desc = seeds.front(); seeds.pop_front(); // 既に3つ以上エッジがある場合は、スキップする if (GraphUtil::getDegree(roads, desc) >= 3) { continue; } // エリアの外なら、スキップする if (!targetArea.contains(roads.graph[desc]->pt)) { printf("ERROR: this check should have been done before.\n"); continue; } // 水中なら、スキップする float z = vboRenderManager->getTerrainHeight(roads.graph[desc]->pt.x(), roads.graph[desc]->pt.y(), true); if (z < G::getFloat("seaLevelForAvenue")) { std::cout << "attemptExpansion (avenue): " << iter << " (skipped because it is under the sea)" << std::endl; continue; } std::cout << "attemptExpansion (avenue): " << iter << " (Seed: " << desc << ")" << std::endl; //int ex_id = roads.graph[desc]->properties["ex_id"].toInt(); int ex_id = defineExId(roads.graph[desc]->pt); if (!attemptConnect(RoadEdge::TYPE_AVENUE, desc, ex_id, features, seeds)) { if (!attemptExpansion(RoadEdge::TYPE_AVENUE, desc, ex_id, features[ex_id], patches[ex_id], seeds)) { attemptExpansion2(RoadEdge::TYPE_AVENUE, desc, features[ex_id], seeds); } } char filename[255]; sprintf(filename, "road_images/avenues_%d.jpg", iter); RoadGeneratorHelper::saveRoadImage(roads, seeds, filename); iter++; } } std::cout << "Avenue generation completed." << std::endl; seeds.clear(); // Avenueをクリーンナップ if (G::getBool("cleanAvenues")) { removeDeadend(roads); } if (G::getBool("removeSmallBlocks")) { SmallBlockRemover::remove(roads, G::getFloat("minBlockSize")); } // recover the temporarily removed local streets if they are not intersected with other edges { for (QMap<RoadEdgeDesc, bool>::iterator it = originalLocalStreets.begin(); it != originalLocalStreets.end(); ++it) { if (!GraphUtil::isIntersect(roads, roads.graph[it.key()]->polyline)) { roads.graph[it.key()]->valid = true; } } } // Local streetを生成 if (G::getBool("generateLocalStreets")) { generateStreetSeeds(seeds); // detect interesting shapes std::vector<std::vector<RoadEdgeDescs> > shapes; std::vector<std::vector<Patch> > patches; { shapes.resize(features.size()); patches.resize(features.size()); for (int i = 0; i < features.size(); ++i) { shapes[i] = features[i].shapes(RoadEdge::TYPE_STREET, G::getFloat("houghScale") * 0.2f, G::getFloat("streetPatchDistance")); patches[i] = RoadGeneratorHelper::convertToPatch(RoadEdge::TYPE_STREET, features[i].roads(RoadEdge::TYPE_STREET), features[i].roads(RoadEdge::TYPE_AVENUE), shapes[i]); } } std::cout << "Local street generation started." << std::endl; int iter; for (iter = 0; !seeds.empty() && iter < G::getInt("numStreetIterations");) { RoadVertexDesc desc = seeds.front(); seeds.pop_front(); // 既に3つ以上エッジがある場合は、スキップする if (GraphUtil::getDegree(roads, desc) >= 3) { continue; } // エリアの外なら、スキップする if (!targetArea.contains(roads.graph[desc]->pt)) { printf("ERROR: this check should have been done before.\n"); continue; } float z = vboRenderManager->getTerrainHeight(roads.graph[desc]->pt.x(), roads.graph[desc]->pt.y(), true); if (z < G::getFloat("seaLevelForStreet")) { std::cout << "attemptExpansion (street): " << iter << " (skipped because it is under the sea or on the mountains)" << std::endl; continue; } std::cout << "attemptExpansion (street): " << iter << " (Seed: " << desc << ")" << std::endl; int ex_id = roads.graph[desc]->properties["ex_id"].toInt(); //if (!attemptConnect(RoadEdge::TYPE_STREET, desc, features[ex_id], seeds)) { if (!attemptExpansion(RoadEdge::TYPE_STREET, desc, ex_id, features[ex_id], patches[ex_id], seeds)) { attemptExpansion2(RoadEdge::TYPE_STREET, desc, features[ex_id], seeds); } //} char filename[255]; sprintf(filename, "road_images/streets_%d.jpg", iter); RoadGeneratorHelper::saveRoadImage(roads, seeds, filename); iter++; } std::cout << "Local street generation completed." << std::endl; } // 指定されたエリアでCropping if (G::getBool("cropping")) { GraphUtil::extractRoads2(roads, targetArea); } if (G::getBool("cleanStreets")) { RoadGeneratorHelper::removeDeadend(roads); } GraphUtil::cleanEdges(roads); }