Handle bad packets better

This commit is contained in:
Garth Vander Houwen 2022-06-24 07:48:25 -07:00
parent 5406ed6155
commit 3a71984155
3 changed files with 53 additions and 23 deletions

View file

@ -391,8 +391,15 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
}
var decodedInfo = FromRadio()
decodedInfo = try! FromRadio(serializedData: characteristic.value!)
do {
decodedInfo = try FromRadio(serializedData: characteristic.value!)
} catch {
print(characteristic.value!)
}
switch decodedInfo.packet.decoded.portnum {
// Handle Any local only packets we get over BLE

View file

@ -633,7 +633,7 @@ func nodeInfoAppPacket (packet: MeshPacket, meshLogging: Bool, context: NSManage
}
} else {
return
//return
}
do {
@ -725,7 +725,7 @@ func positionPacket (packet: MeshPacket, meshLogging: Bool, context: NSManagedOb
} else {
return
//return
}
do {
@ -923,14 +923,27 @@ func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, meshLogging:
newMessage.messagePayload = messageText
newMessage.fromUser?.objectWillChange.send()
newMessage.toUser?.objectWillChange.send()
var messageSaved = false
do {
do {
try context.save()
try context.save()
if meshLogging { MeshLogger.log("💾 Saved a new message for \(newMessage.messageId)") }
if newMessage.toUser != nil && newMessage.toUser!.num == broadcastNodeNum || connectedNode == newMessage.toUser!.num {
if meshLogging { MeshLogger.log("💾 Saved a new message for \(newMessage.messageId)") }
messageSaved = true
} catch {
context.rollback()
let nsError = error as NSError
print("💥 Failed to save new MessageEntity \(nsError)")
}
do {
if messageSaved && (newMessage.toUser != nil && newMessage.toUser!.num == broadcastNodeNum || connectedNode == newMessage.toUser!.num) {
// Create an iOS Notification for the received message and schedule it immediately
let manager = LocalNotificationManager()
@ -942,19 +955,15 @@ func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, meshLogging:
subtitle: "AKA \(newMessage.fromUser?.shortName ?? "???")",
content: messageText)
]
manager.schedule()
if meshLogging { MeshLogger.log("💬 iOS Notification Scheduled for text message from \(newMessage.fromUser?.longName ?? "Unknown") \(messageText)") }
}
manager.schedule()
if meshLogging { MeshLogger.log("💬 iOS Notification Scheduled for text message from \(newMessage.fromUser?.longName ?? "Unknown") \(messageText)") }
}
} catch {
} catch {
context.rollback()
let nsError = error as NSError
print("💥 Failed to save new MessageEntity \(nsError)")
}
} catch {
print("💥 Fetch Message To and From Users Error")

View file

@ -18,6 +18,8 @@ struct Connect: View {
@Environment(\.managedObjectContext) var context
@EnvironmentObject var bleManager: BLEManager
@EnvironmentObject var userSettings: UserSettings
@State var initialLoad: Bool = true
@State var isPreferredRadio: Bool = false
@ -269,10 +271,22 @@ struct Connect: View {
}
.navigationViewStyle(StackNavigationViewStyle())
.onAppear(perform: {
if initialLoad {
self.bleManager.context = context
self.bleManager.userSettings = userSettings
self.bleManager.context = context
self.bleManager.userSettings = userSettings
// Ask for notification permission
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, error in
if success {
print("All set!")
} else if let error = error {
print(error.localizedDescription)
}
}
initialLoad = false
}
if self.bleManager.connectedPeripheral != nil && userSettings.preferredPeripheralId == self.bleManager.connectedPeripheral.peripheral.identifier.uuidString {
isPreferredRadio = true
} else {