void Controller::runMysql() { Db db = Db::getInstance(); //wczytanie konfiguracji this->debug = (db.getConfig("debug")=="1"?true:false); this->maxSailDeviantion = stoi(db.getConfig("maxSailDeviation")); this->rotationPenalty = stof(db.getConfig("rotationPenalty")); //reset data db.updateLngLat(LngLat(0., 0.)); db.setPathStatus(PATH_SEARCHING); db.setMapStatus(MAP_NOTLOADED); //mapa niewczytana // dodaj zadanie wczytania mapy do kolejki wątku 'worker' this->workerTaskParams.push(db.getMapName()); this->workerTask.push(TASK_LOADMAP); bool positionInBounds = this->positionInBounds; // czy pozycja znajduje się w obrębie mapy? string mapName; // nazwa wczytanej mapy pobierana z db LngLat newGoal; // cel pobierany z db while(!endThreads) { db.updateLngLat(this->lngLatCurrent); // zmiana celu newGoal = db.getLngLatGoal(); // pobierz cel z bazy danych if(newGoal != this->lngLatGoal && abs(newGoal.lat)>0. && abs(newGoal.lng)>0.) { // zmieniono cel this->lngLatGoal = newGoal; dlog << "nowy cel: " << newGoal.toString(); db.setPathStatus(PATH_SEARCHING); this->workerTask.push(TASK_FINDPATH); } // uaktualnij pole positionInBounds w bazie danych if(positionInBounds != this->positionInBounds) { //zapisz zmianę do db positionInBounds = this->positionInBounds; db.updateDataParam("positionInBounds", to_string(positionInBounds)); } // zmiana mapy if(this->map && !this->mapLoading) { mapName = db.getMapName(); if(mapName != this->map->getMapName()) { // dodaj zadanie wczytania mapy do kolejki wątku 'worker' this->workerTaskParams.push(mapName); this->workerTask.push(TASK_LOADMAP); this->mapLoading = true; // dodaj zadanie wyznaczenia trajektori do kolejki wątku 'worker' db.setPathStatus(PATH_SEARCHING); this->workerTask.push(TASK_FINDPATH); } } db.setTwiStatus(this->twiStatus); // uaktualnij status TWI // todo: usunąć po podpięciu czujnika wiatru do uart this->windDirection = stoi(db.getDataParam("windDirection")); // pobierz informację o kierunku wiatru z bazy danych // opóźnienie pętli std::chrono::milliseconds sleepDuration(5000); std::this_thread::sleep_for(sleepDuration); } dlog << "koniec threadMysql"; }