some fixes to transmit messages..

This commit is contained in:
DJ2LS 2024-01-25 15:48:00 +01:00
parent eb3a74e146
commit 2a98731b5d
5 changed files with 24 additions and 9 deletions

View file

@ -82,8 +82,9 @@ class ARQDataTypeHandler:
def handle_p2pmsg_lzma(self, data): def handle_p2pmsg_lzma(self, data):
decompressed_data = lzma.decompress(data) decompressed_data = lzma.decompress(data)
self.log(f"Handling LZMA compressed P2PMSG data: {len(decompressed_data)} Bytes from {len(data)} Bytes") self.log(f"Handling LZMA compressed P2PMSG data: {len(decompressed_data)} Bytes from {len(data)} Bytes")
received_message_obj = MessageP2P.from_payload(decompressed_data) decompressed_json_string = decompressed_data.decode('utf-8')
received_message_obj = MessageP2P.from_payload(decompressed_json_string)
received_message_dict = MessageP2P.to_dict(received_message_obj, received=True) received_message_dict = MessageP2P.to_dict(received_message_obj, received=True)
DatabaseManager(uri='sqlite:///:memory:').add_message(received_message_dict) result = DatabaseManager(uri='sqlite:///:memory:').add_message(received_message_dict)
return decompressed_data return decompressed_data

View file

@ -15,12 +15,17 @@ class SendMessageCommand(TxCommand):
self.message = MessageP2P.from_api_params(origin, apiParams) self.message = MessageP2P.from_api_params(origin, apiParams)
def transmit(self, modem): def transmit(self, modem):
data, data_type = self.arq_data_type_handler.prepare(self.message.to_payload, 'p2pmsg_lzma') # Convert JSON string to bytes (using UTF-8 encoding)
iss = ARQSessionISS(self.config, modem, payload = self.message.to_payload().encode('utf-8')
json_bytearray = bytearray(payload)
data, data_type = self.arq_data_type_handler.prepare(json_bytearray, 'p2pmsg_lzma')
iss = ARQSessionISS(self.config,
modem,
self.message.destination, self.message.destination,
data,
self.state_manager, self.state_manager,
data_type) data,
data_type
)
self.state_manager.register_arq_iss_session(iss) self.state_manager.register_arq_iss_session(iss)
iss.start() iss.start()

View file

@ -6,6 +6,8 @@ from threading import local
from message_system_db_model import Base, Station, Status, Attachment, P2PMessage from message_system_db_model import Base, Station, Status, Attachment, P2PMessage
from datetime import datetime from datetime import datetime
import json import json
import structlog
class DatabaseManager: class DatabaseManager:
def __init__(self, uri='sqlite:///freedata-messages.db'): def __init__(self, uri='sqlite:///freedata-messages.db'):
@ -14,6 +16,11 @@ class DatabaseManager:
self.session_factory = sessionmaker(bind=self.engine) self.session_factory = sessionmaker(bind=self.engine)
Base.metadata.create_all(self.engine) Base.metadata.create_all(self.engine)
def log(self, message, isWarning=False):
msg = f"[{type(self).__name__}]: {message}"
logger = self.logger.warn if isWarning else self.logger.info
logger(msg)
def get_thread_scoped_session(self): def get_thread_scoped_session(self):
if not hasattr(self.thread_local, "session"): if not hasattr(self.thread_local, "session"):
self.thread_local.session = scoped_session(self.session_factory) self.thread_local.session = scoped_session(self.session_factory)
@ -71,6 +78,8 @@ class DatabaseManager:
session.add(new_message) session.add(new_message)
session.commit() session.commit()
self.log(f"Added data to database: {new_message.id}")
return new_message.id return new_message.id
except Exception as e: except Exception as e:
session.rollback() session.rollback()

View file

@ -238,7 +238,7 @@ def get_post_radio():
return api_response(app.state_manager.get_radio_status()) return api_response(app.state_manager.get_radio_status())
@app.route('/freedata/messages', methods=['POST', 'GET']) @app.route('/freedata/messages', methods=['POST', 'GET'])
def post_freedata_message(): def get_post_freedata_message():
if request.method in ['GET']: if request.method in ['GET']:
result = DatabaseManager(uri='sqlite:///:memory:').get_all_messages_json() result = DatabaseManager(uri='sqlite:///:memory:').get_all_messages_json()
return api_response(result) return api_response(result)

View file

@ -34,7 +34,7 @@ class TestDataFrameFactory(unittest.TestCase):
} }
message = MessageP2P(self.mycall, 'DJ2LS-3', 'Hello World!', [attachment]) message = MessageP2P(self.mycall, 'DJ2LS-3', 'Hello World!', [attachment])
payload = message.to_payload() payload = message.to_payload()
print(payload)
received_message = MessageP2P.from_payload(payload) received_message = MessageP2P.from_payload(payload)
received_message_dict = MessageP2P.to_dict(received_message, received=True) received_message_dict = MessageP2P.to_dict(received_message, received=True)
self.database_manager.add_message(received_message_dict) self.database_manager.add_message(received_message_dict)