|
|
|
@ -706,9 +706,24 @@ void MyMesh::formatNeighborsReply(char *reply) { |
|
|
|
char *dp = reply; |
|
|
|
|
|
|
|
#if MAX_NEIGHBOURS |
|
|
|
for (int i = 0; i < MAX_NEIGHBOURS && dp - reply < 134; i++) { |
|
|
|
NeighbourInfo *neighbour = &neighbours[i]; |
|
|
|
if (neighbour->heard_timestamp == 0) continue; // skip empty slots
|
|
|
|
// create copy of neighbours list, skipping empty entries so we can sort it separately from main list
|
|
|
|
int16_t neighbours_count = 0; |
|
|
|
NeighbourInfo* sorted_neighbours[MAX_NEIGHBOURS]; |
|
|
|
for (int i = 0; i < MAX_NEIGHBOURS; i++) { |
|
|
|
auto neighbour = &neighbours[i]; |
|
|
|
if (neighbour->heard_timestamp > 0) { |
|
|
|
sorted_neighbours[neighbours_count] = neighbour; |
|
|
|
neighbours_count++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// sort neighbours newest to oldest
|
|
|
|
std::sort(sorted_neighbours, sorted_neighbours + neighbours_count, [](const NeighbourInfo* a, const NeighbourInfo* b) { |
|
|
|
return a->heard_timestamp > b->heard_timestamp; // desc
|
|
|
|
}); |
|
|
|
|
|
|
|
for (int i = 0; i < neighbours_count && dp - reply < 134; i++) { |
|
|
|
NeighbourInfo *neighbour = sorted_neighbours[i]; |
|
|
|
|
|
|
|
// add new line if not first item
|
|
|
|
if (i > 0) *dp++ = '\n'; |
|
|
|
|