diff --git a/config/config.json b/config/config.json index 5f1d888..74ad9c2 100644 --- a/config/config.json +++ b/config/config.json @@ -416,7 +416,7 @@ "base_station_color": "#1677ff", "aircraft_pixel_size": 50, "base_station_pixel_size": 100, - "aircraft_scale": 2.000000, + "aircraft_scale": 1.000000, "base_station_scale": 0.440000, "show_icao": true, "show_call_sign": false, diff --git a/module/Local_Server/Data_Source/Database.cpp b/module/Local_Server/Data_Source/Database.cpp index d135361..3bade17 100644 --- a/module/Local_Server/Data_Source/Database.cpp +++ b/module/Local_Server/Data_Source/Database.cpp @@ -50,6 +50,42 @@ Psc::JSON track_orientation_json_from_points(const SSR::Position_Info &first, ret.append({"roll", 0.0}); return ret; } +Psc::JSON empty_aircraft_track_json(std::string_view data_source_key, + std::string_view icao, + std::size_t last_size) { + auto ret = Psc::JSON::object(); + ret.append({"icao", icao}); + ret.append({"ds", data_source_key}); + ret.append({"sta_seq", last_size}); + ret.append({"end_seq", last_size}); + ret.append({"size", 0}); + ret.append({"list", Psc::JSON::array()}); + return ret; +} +Psc::JSON aircraft_track_json(DataBase *db, + std::string_view data_source_key, + std::string_view icao, + std::size_t last_size, + bool include_empty) { + auto aircraft = db->get_aircraft(icao); + if (aircraft == nullptr) { + return include_empty ? empty_aircraft_track_json(data_source_key, icao, + last_size) : + Psc::JSON(); + } + auto ret = aircraft->air_pos_track_list.get_last_array_json(last_size); + auto last_two = aircraft->air_pos_track_list.last_two(); + if (last_two.has_value()) { + ret.children.insert( + ret.children.begin(), + Psc::JSON("track_orientation", + track_orientation_json_from_points(last_two->first, + last_two->second))); + } + ret.children.insert(ret.children.begin(), Psc::JSON("ds", data_source_key)); + ret.children.insert(ret.children.begin(), Psc::JSON("icao", icao)); + return ret; +} } Aircraft::Aircraft(std::string_view icao) : Aircraft_Info(icao) { auto size = Global::instance()->mode_acs.max_track_point_size.load(); @@ -291,22 +327,28 @@ void database_server(Global *g) { CHECK_JSON_PARAM _init_db HTTP_REQUIRE_VALUE(icao, params.try_get_string("icao")) HTTP_REQUIRE_VALUE(last_size, params.try_get_number( - "last_size")) auto aircraft = - db->get_aircraft(icao); - JSON ret; - if (aircraft != nullptr) { - ret = aircraft->air_pos_track_list.get_last_array_json(last_size); - auto last_two = aircraft->air_pos_track_list.last_two(); - if (last_two.has_value()) { - ret.children.insert( - ret.children.begin(), - JSON("track_orientation", - track_orientation_json_from_points(last_two->first, - last_two->second))); - } - ret.children.insert(ret.children.begin(), JSON("ds", data_source_key)); - ret.children.insert(ret.children.begin(), JSON("icao", icao)); + "last_size")) auto ret = + aircraft_track_json(db.get(), data_source_key, icao, last_size, + false); + res->setBody(ret.to_json_string()); + }); + svr.Post(api + "get_aircraft_track_list_batch", [](HTTP_Param) { + CHECK_JSON_PARAM + _init_db HTTP_REQUIRE_PTR(items, params.get("items")) + HTTP_REQUIRE_TRUE(items->valueType == Psc::Array, "items") + auto ret = JSON::object(); + auto list = JSON::array(); + for (const auto &item : items->children) { + HTTP_REQUIRE_TRUE(item.valueType == Psc::Object, "items") + HTTP_REQUIRE_VALUE(icao, item.try_get_string("icao")) + HTTP_REQUIRE_VALUE(last_size, + item.try_get_number("last_size")) + list.children.push_back( + aircraft_track_json(db.get(), data_source_key, icao, last_size, + true)); } + ret.append({"ds", data_source_key}); + ret.append({"list", list}); res->setBody(ret.to_json_string()); }); svr.Post(api + "get_aircraft_list_after", [](HTTP_Param) { diff --git a/todolist.txt b/todolist.txt index d43dc8e..a0ed27b 100644 --- a/todolist.txt +++ b/todolist.txt @@ -1,3 +1,6 @@ -网页显示的开启服务时间 同时得知系统的开机时间 系统的内存占用 cpu占用 线程的信息 显示在网页上 -先调研前端有什么图标库做这个事情 + + +1. /aircraft_change_list 现在是全量列表,后面要改成基于版本号/时间戳的增量接口。 这个需求需要 cookie session机制 +实现需要前端返回 icao号状态 版本号吧 甚至可以实现 一个websoket 主动推送百脑汇 +