Removed most message client networkmessage serialization
This commit is contained in:
		
							parent
							
								
									80ed587514
								
							
						
					
					
						commit
						10d706e9fa
					
				| @ -12,8 +12,6 @@ | |||||||
| #include <QHostAddress> | #include <QHostAddress> | ||||||
| #include <QColor> | #include <QColor> | ||||||
| 
 | 
 | ||||||
| #include "NetworkMessage.hpp" |  | ||||||
| 
 |  | ||||||
| #include "pimpl_impl.hpp" | #include "pimpl_impl.hpp" | ||||||
| 
 | 
 | ||||||
| #include "moc_MessageClient.cpp" | #include "moc_MessageClient.cpp" | ||||||
| @ -37,7 +35,7 @@ public: | |||||||
|     connect (heartbeat_timer_, &QTimer::timeout, this, &impl::heartbeat); |     connect (heartbeat_timer_, &QTimer::timeout, this, &impl::heartbeat); | ||||||
|     connect (this, &QIODevice::readyRead, this, &impl::pending_datagrams); |     connect (this, &QIODevice::readyRead, this, &impl::pending_datagrams); | ||||||
| 
 | 
 | ||||||
|     heartbeat_timer_->start (NetworkMessage::pulse * 1000); |     heartbeat_timer_->start (15 * 1000); | ||||||
| 
 | 
 | ||||||
|     // bind to an ephemeral port
 |     // bind to an ephemeral port
 | ||||||
|     bind (); |     bind (); | ||||||
| @ -139,129 +137,6 @@ void MessageClient::impl::parse_message (QByteArray const& msg) | |||||||
|   try |   try | ||||||
|     { |     { | ||||||
|         qDebug() << "incoming udp message" << msg; |         qDebug() << "incoming udp message" << msg; | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #if 0 |  | ||||||
|       // 
 |  | ||||||
|       // message format is described in NetworkMessage.hpp
 |  | ||||||
|       // 
 |  | ||||||
|       NetworkMessage::Reader in {msg}; |  | ||||||
|       if (OK == check_status (in) && id_ == in.id ()) // OK and for us
 |  | ||||||
|         { |  | ||||||
|           if (schema_ < in.schema ()) // one time record of server's
 |  | ||||||
|                                       // negotiated schema
 |  | ||||||
|             { |  | ||||||
|               schema_ = in.schema (); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|           //
 |  | ||||||
|           // message format is described in NetworkMessage.hpp
 |  | ||||||
|           //
 |  | ||||||
|           switch (in.type ()) |  | ||||||
|             { |  | ||||||
|             case NetworkMessage::Reply: |  | ||||||
|               { |  | ||||||
| #if 0 |  | ||||||
|                 // unpack message
 |  | ||||||
|                 QTime time; |  | ||||||
|                 qint32 snr; |  | ||||||
|                 float delta_time; |  | ||||||
|                 quint32 delta_frequency; |  | ||||||
|                 QByteArray mode; |  | ||||||
|                 QByteArray message; |  | ||||||
|                 bool low_confidence {false}; |  | ||||||
|                 quint8 modifiers {0}; |  | ||||||
|                 in >> time >> snr >> delta_time >> delta_frequency >> mode >> message |  | ||||||
|                    >> low_confidence >> modifiers; |  | ||||||
|                 if (check_status (in) != Fail) |  | ||||||
|                   { |  | ||||||
|                     Q_EMIT self_->reply (time, snr, delta_time, delta_frequency |  | ||||||
|                                          , QString::fromUtf8 (mode), QString::fromUtf8 (message) |  | ||||||
|                                          , low_confidence, modifiers); |  | ||||||
|                   } |  | ||||||
| #endif |  | ||||||
|               } |  | ||||||
|               break; |  | ||||||
| 
 |  | ||||||
|             case NetworkMessage::Replay: |  | ||||||
|               { |  | ||||||
| #if 0 |  | ||||||
|               if (check_status (in) != Fail) |  | ||||||
|                 { |  | ||||||
|                   last_message_.clear (); |  | ||||||
|                   Q_EMIT self_->replay (); |  | ||||||
|                 } |  | ||||||
| #endif |  | ||||||
|               } |  | ||||||
|               break; |  | ||||||
| 
 |  | ||||||
|             case NetworkMessage::HaltTx: |  | ||||||
|               { |  | ||||||
| #if 0 |  | ||||||
|                 bool auto_only {false}; |  | ||||||
|                 in >> auto_only; |  | ||||||
|                 if (check_status (in) != Fail) |  | ||||||
|                   { |  | ||||||
|                     Q_EMIT self_->halt_tx (auto_only); |  | ||||||
|                   } |  | ||||||
| #endif |  | ||||||
|               } |  | ||||||
|               break; |  | ||||||
| 
 |  | ||||||
|             case NetworkMessage::FreeText: |  | ||||||
|               { |  | ||||||
| #if 0 |  | ||||||
|                 QByteArray message; |  | ||||||
|                 bool send {true}; |  | ||||||
|                 in >> message >> send; |  | ||||||
|                 if (check_status (in) != Fail) |  | ||||||
|                   { |  | ||||||
|                     Q_EMIT self_->free_text (QString::fromUtf8 (message), send); |  | ||||||
|                   } |  | ||||||
| #endif |  | ||||||
|               } |  | ||||||
|               break; |  | ||||||
| 
 |  | ||||||
|             case NetworkMessage::Location: |  | ||||||
|               { |  | ||||||
| #if 0 |  | ||||||
|                 QByteArray location; |  | ||||||
|                 in >> location; |  | ||||||
|                 if (check_status (in) != Fail) |  | ||||||
|                 { |  | ||||||
|                     Q_EMIT self_->location (QString::fromUtf8 (location)); |  | ||||||
|                 } |  | ||||||
| #endif |  | ||||||
|               } |  | ||||||
|               break; |  | ||||||
| 
 |  | ||||||
|             case NetworkMessage::HighlightCallsign: |  | ||||||
|               { |  | ||||||
| #if 0 |  | ||||||
|                 QByteArray call; |  | ||||||
|                 QColor bg;      // default invalid color
 |  | ||||||
|                 QColor fg;      // default invalid color
 |  | ||||||
|                 bool last_only {false}; |  | ||||||
|                 in >> call >> bg >> fg >> last_only; |  | ||||||
|                 if (check_status (in) != Fail && call.size ()) |  | ||||||
|                   { |  | ||||||
|                     Q_EMIT self_->highlight_callsign (QString::fromUtf8 (call), bg, fg, last_only); |  | ||||||
|                   } |  | ||||||
| #endif |  | ||||||
|               } |  | ||||||
|               break; |  | ||||||
| 
 |  | ||||||
|             default: |  | ||||||
|               // Ignore
 |  | ||||||
|               //
 |  | ||||||
|               // Note that although server  heartbeat messages are not
 |  | ||||||
|               // parsed here  they are  still partially parsed  in the
 |  | ||||||
|               // message reader class to  negotiate the maximum schema
 |  | ||||||
|               // number being used on the network.
 |  | ||||||
|               break; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| #endif |  | ||||||
|     } |     } | ||||||
|   catch (std::exception const& e) |   catch (std::exception const& e) | ||||||
|     { |     { | ||||||
| @ -278,14 +153,8 @@ void MessageClient::impl::heartbeat () | |||||||
|    if (server_port_ && !server_.isNull ()) |    if (server_port_ && !server_.isNull ()) | ||||||
|     { |     { | ||||||
|       QByteArray message; |       QByteArray message; | ||||||
|       NetworkMessage::Builder hb {&message, NetworkMessage::Heartbeat, id_, schema_}; |       qDebug() << "outgoing udp heartbeat message" << message; | ||||||
|       hb << NetworkMessage::Builder::schema_number // maximum schema number accepted
 |       writeDatagram (message, server_, server_port_); | ||||||
|          << version_.toUtf8 () << revision_.toUtf8 (); |  | ||||||
|       if (OK == check_status (hb)) |  | ||||||
|         { |  | ||||||
|           qDebug() << "outgoing udp heartbeat message" << message; |  | ||||||
|           writeDatagram (message, server_, server_port_); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -294,12 +163,8 @@ void MessageClient::impl::closedown () | |||||||
|    if (server_port_ && !server_.isNull ()) |    if (server_port_ && !server_.isNull ()) | ||||||
|     { |     { | ||||||
|       QByteArray message; |       QByteArray message; | ||||||
|       NetworkMessage::Builder out {&message, NetworkMessage::Close, id_, schema_}; |       qDebug() << "outgoing udp closedown message" << message; | ||||||
|       if (OK == check_status (out)) |       writeDatagram (message, server_, server_port_); | ||||||
|         { |  | ||||||
|           qDebug() << "outgoing udp closedown message" << message; |  | ||||||
|           writeDatagram (message, server_, server_port_); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -419,93 +284,3 @@ void MessageClient::add_blocked_destination (QHostAddress const& a) | |||||||
|       m_->pending_messages_.clear (); // discard
 |       m_->pending_messages_.clear (); // discard
 | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 |  | ||||||
| #if 0 |  | ||||||
| void MessageClient::status_update (Frequency f, QString const& mode, QString const& dx_call |  | ||||||
|                                    , QString const& report, QString const& tx_mode |  | ||||||
|                                    , bool tx_enabled, bool transmitting, bool decoding |  | ||||||
|                                    , qint32 rx_df, qint32 tx_df, QString const& de_call |  | ||||||
|                                    , QString const& de_grid, QString const& dx_grid |  | ||||||
|                                    , bool watchdog_timeout, QString const& sub_mode |  | ||||||
|                                    , bool fast_mode) |  | ||||||
| { |  | ||||||
|   if (m_->server_port_ && !m_->server_string_.isEmpty ()) |  | ||||||
|     { |  | ||||||
|       QByteArray message; |  | ||||||
|       NetworkMessage::Builder out {&message, NetworkMessage::Status, m_->id_, m_->schema_}; |  | ||||||
|       out << f << mode.toUtf8 () << dx_call.toUtf8 () << report.toUtf8 () << tx_mode.toUtf8 () |  | ||||||
|           << tx_enabled << transmitting << decoding << rx_df << tx_df << de_call.toUtf8 () |  | ||||||
|           << de_grid.toUtf8 () << dx_grid.toUtf8 () << watchdog_timeout << sub_mode.toUtf8 () |  | ||||||
|           << fast_mode; |  | ||||||
|       m_->send_message (out, message); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void MessageClient::decode (bool is_new, QTime time, qint32 snr, float delta_time, quint32 delta_frequency |  | ||||||
|                             , QString const& mode, QString const& message_text, bool low_confidence |  | ||||||
|                             , bool off_air) |  | ||||||
| { |  | ||||||
|    if (m_->server_port_ && !m_->server_string_.isEmpty ()) |  | ||||||
|     { |  | ||||||
|       QByteArray message; |  | ||||||
|       NetworkMessage::Builder out {&message, NetworkMessage::Decode, m_->id_, m_->schema_}; |  | ||||||
|       out << is_new << time << snr << delta_time << delta_frequency << mode.toUtf8 () |  | ||||||
|           << message_text.toUtf8 () << low_confidence << off_air; |  | ||||||
|       m_->send_message (out, message); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void MessageClient::WSPR_decode (bool is_new, QTime time, qint32 snr, float delta_time, Frequency frequency |  | ||||||
|                                  , qint32 drift, QString const& callsign, QString const& grid, qint32 power |  | ||||||
|                                  , bool off_air) |  | ||||||
| { |  | ||||||
|    if (m_->server_port_ && !m_->server_string_.isEmpty ()) |  | ||||||
|     { |  | ||||||
|       QByteArray message; |  | ||||||
|       NetworkMessage::Builder out {&message, NetworkMessage::WSPRDecode, m_->id_, m_->schema_}; |  | ||||||
|       out << is_new << time << snr << delta_time << frequency << drift << callsign.toUtf8 () |  | ||||||
|           << grid.toUtf8 () << power << off_air; |  | ||||||
|       m_->send_message (out, message); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void MessageClient::clear_decodes () |  | ||||||
| { |  | ||||||
|    if (m_->server_port_ && !m_->server_string_.isEmpty ()) |  | ||||||
|     { |  | ||||||
|       QByteArray message; |  | ||||||
|       NetworkMessage::Builder out {&message, NetworkMessage::Clear, m_->id_, m_->schema_}; |  | ||||||
|       m_->send_message (out, message); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void MessageClient::qso_logged (QDateTime time_off, QString const& dx_call, QString const& dx_grid |  | ||||||
|                                 , Frequency dial_frequency, QString const& mode, QString const& report_sent |  | ||||||
|                                 , QString const& report_received, QString const& tx_power |  | ||||||
|                                 , QString const& comments, QString const& name, QDateTime time_on |  | ||||||
|                                 , QString const& operator_call, QString const& my_call |  | ||||||
|                                 , QString const& my_grid) |  | ||||||
| { |  | ||||||
|    if (m_->server_port_ && !m_->server_string_.isEmpty ()) |  | ||||||
|     { |  | ||||||
|       QByteArray message; |  | ||||||
|       NetworkMessage::Builder out {&message, NetworkMessage::QSOLogged, m_->id_, m_->schema_}; |  | ||||||
|       out << time_off << dx_call.toUtf8 () << dx_grid.toUtf8 () << dial_frequency << mode.toUtf8 () |  | ||||||
|           << report_sent.toUtf8 () << report_received.toUtf8 () << tx_power.toUtf8 () << comments.toUtf8 () |  | ||||||
|           << name.toUtf8 () << time_on << operator_call.toUtf8 () << my_call.toUtf8 () << my_grid.toUtf8 (); |  | ||||||
|       m_->send_message (out, message); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void MessageClient::logged_ADIF (QByteArray const& ADIF_record) |  | ||||||
| { |  | ||||||
|    if (m_->server_port_ && !m_->server_string_.isEmpty ()) |  | ||||||
|     { |  | ||||||
|       QByteArray message; |  | ||||||
|       NetworkMessage::Builder out {&message, NetworkMessage::LoggedADIF, m_->id_, m_->schema_}; |  | ||||||
|       QByteArray ADIF {"\n<adif_ver:5>3.0.7\n<programid:6>WSJT-X\n<EOH>\n" + ADIF_record + " <EOR>"}; |  | ||||||
|       out << ADIF; |  | ||||||
|       m_->send_message (out, message); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  | |||||||
| @ -47,31 +47,6 @@ public: | |||||||
|   // change the server port messages are sent to
 |   // change the server port messages are sent to
 | ||||||
|   Q_SLOT void set_server_port (port_type server_port = 0u); |   Q_SLOT void set_server_port (port_type server_port = 0u); | ||||||
| 
 | 
 | ||||||
|   // outgoing messages
 |  | ||||||
| #if 0 |  | ||||||
|   Q_SLOT void status_update (Frequency, QString const& mode, QString const& dx_call, QString const& report |  | ||||||
|                              , QString const& tx_mode, bool tx_enabled, bool transmitting, bool decoding |  | ||||||
|                              , qint32 rx_df, qint32 tx_df, QString const& de_call, QString const& de_grid |  | ||||||
|                              , QString const& dx_grid, bool watchdog_timeout, QString const& sub_mode |  | ||||||
|                              , bool fast_mode); |  | ||||||
|   Q_SLOT void decode (bool is_new, QTime time, qint32 snr, float delta_time, quint32 delta_frequency |  | ||||||
|                       , QString const& mode, QString const& message, bool low_confidence |  | ||||||
|                       , bool off_air); |  | ||||||
|   Q_SLOT void WSPR_decode (bool is_new, QTime time, qint32 snr, float delta_time, Frequency |  | ||||||
|                            , qint32 drift, QString const& callsign, QString const& grid, qint32 power |  | ||||||
|                            , bool off_air); |  | ||||||
|   Q_SLOT void clear_decodes (); |  | ||||||
|   Q_SLOT void qso_logged (QDateTime time_off, QString const& dx_call, QString const& dx_grid |  | ||||||
|                           , Frequency dial_frequency, QString const& mode, QString const& report_sent |  | ||||||
|                           , QString const& report_received, QString const& tx_power, QString const& comments |  | ||||||
|                           , QString const& name, QDateTime time_on, QString const& operator_call |  | ||||||
|                           , QString const& my_call, QString const& my_grid); |  | ||||||
| 
 |  | ||||||
|   // ADIF_record argument should be valid ADIF excluding any <EOR> end
 |  | ||||||
|   // of record marker
 |  | ||||||
|   Q_SLOT void logged_ADIF (QByteArray const& ADIF_record); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
|   // this slot may be used to send arbitrary UDP datagrams to and
 |   // this slot may be used to send arbitrary UDP datagrams to and
 | ||||||
|   // destination allowing the underlying socket to be used for general
 |   // destination allowing the underlying socket to be used for general
 | ||||||
|   // UDP messaging if desired
 |   // UDP messaging if desired
 | ||||||
| @ -81,40 +56,10 @@ public: | |||||||
|   // with send_raw_datagram() above)
 |   // with send_raw_datagram() above)
 | ||||||
|   Q_SLOT void add_blocked_destination (QHostAddress const&); |   Q_SLOT void add_blocked_destination (QHostAddress const&); | ||||||
| 
 | 
 | ||||||
| #if 0 |  | ||||||
|   // this signal is emitted if the server sends us a reply, the only
 |  | ||||||
|   // reply supported is reply to a prior CQ or QRZ message
 |  | ||||||
|   Q_SIGNAL void reply (QTime, qint32 snr, float delta_time, quint32 delta_frequency, QString const& mode |  | ||||||
|                        , QString const& message_text, bool low_confidence, quint8 modifiers); |  | ||||||
| 
 |  | ||||||
|   // this signal is emitted if the server has requested a replay of
 |  | ||||||
|   // all decodes
 |  | ||||||
|   Q_SIGNAL void replay (); |  | ||||||
| 
 |  | ||||||
|   // this signal is emitted if the server has requested immediate (or
 |  | ||||||
|   // auto Tx if auto_only is true) transmission to halt
 |  | ||||||
|   Q_SIGNAL void halt_tx (bool auto_only); |  | ||||||
| 
 |  | ||||||
|   // this signal is emitted if the server has requested a new free
 |  | ||||||
|   // message text
 |  | ||||||
|   Q_SIGNAL void free_text (QString const&, bool send); |  | ||||||
| 
 |  | ||||||
|   // this signal is emitted if the server has sent a highlight
 |  | ||||||
|   // callsign request for the specified call
 |  | ||||||
|   Q_SIGNAL void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_only); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
|   // this signal is emitted when network errors occur or if a host
 |   // this signal is emitted when network errors occur or if a host
 | ||||||
|   // lookup fails
 |   // lookup fails
 | ||||||
|   Q_SIGNAL void error (QString const&) const; |   Q_SIGNAL void error (QString const&) const; | ||||||
| 
 | 
 | ||||||
| #if 0 |  | ||||||
|   // this signal is emitted if the message obtains a location from a
 |  | ||||||
|   // server.  (It doesn't have to be new, could be a periodic location
 |  | ||||||
|   // update)
 |  | ||||||
|   Q_SIGNAL void location (QString const&); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| private: | private: | ||||||
|   class impl; |   class impl; | ||||||
|   pimpl<impl> m_; |   pimpl<impl> m_; | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								udp.py
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								udp.py
									
									
									
									
									
								
							| @ -9,7 +9,7 @@ def main(): | |||||||
|     sock.bind(listen) |     sock.bind(listen) | ||||||
|     try: |     try: | ||||||
|         while True: |         while True: | ||||||
|             content, addr = sock.recvfrom(1024) |             content, addr = sock.recvfrom(65500) | ||||||
|             print("from:", ":".join(map(str, addr))) |             print("from:", ":".join(map(str, addr))) | ||||||
|             print("->", repr(content)) |             print("->", repr(content)) | ||||||
|             print("sending test reply...", end="") |             print("sending test reply...", end="") | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jordan Sherer
						Jordan Sherer