AISModel receive packets from baseband, notifies AISView.

Use Signal class to distribute packets to multiple listeners.
This commit is contained in:
Jared Boone 2016-01-13 16:32:56 -08:00
parent 9cab3c9978
commit f8a063312c
2 changed files with 30 additions and 23 deletions

View file

@ -89,6 +89,18 @@ AISModel::AISModel() {
receiver_model.set_baseband_bandwidth(1750000);
log_file.open_for_append("ais.txt");
EventDispatcher::message_map().register_handler(Message::ID::AISPacket,
[this](Message* const p) {
const auto message = static_cast<const AISPacketMessage*>(p);
const ais::Packet packet { message->packet };
this->on_packet(packet);
}
);
}
AISModel::~AISModel() {
EventDispatcher::message_map().unregister_handler(Message::ID::AISPacket);
}
bool AISModel::on_packet(const ais::Packet& packet) {
@ -110,31 +122,13 @@ bool AISModel::on_packet(const ais::Packet& packet) {
log_file.write_entry(packet.received_at(), entry);
}
packet_signal.emit(packet);
return true;
}
namespace ui {
void AISView::on_show() {
View::on_show();
EventDispatcher::message_map().register_handler(Message::ID::AISPacket,
[this](Message* const p) {
const auto message = static_cast<const AISPacketMessage*>(p);
const ais::Packet packet { message->packet };
if( this->model.on_packet(packet) ) {
this->on_packet(packet);
}
}
);
}
void AISView::on_hide() {
EventDispatcher::message_map().unregister_handler(Message::ID::AISPacket);
View::on_hide();
}
void AISView::truncate_entries() {
while(recent.size() > 64) {
recent.pop_back();