Receive messages code

This commit is contained in:
Garth Vander Houwen 2021-09-28 00:00:09 -07:00
parent 50c3b17768
commit 28bdd7a39a
6 changed files with 56 additions and 7 deletions

View file

@ -10,6 +10,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
// Data
@ObservedObject private var meshData : MeshData
@ObservedObject private var messageData : MessageData
private var centralManager: CBCentralManager!
@Published var connectedPeripheral: CBPeripheral!
@Published var peripheralArray = [CBPeripheral]()
@ -31,6 +32,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
override init() {
self.meshData = MeshData()
self.messageData = MessageData()
super.init()
centralManager = CBCentralManager(delegate: self, queue: nil)
centralManager.delegate = self
@ -91,7 +93,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
//---------------------------------------------------------------------------------------
// Disconnect Device function
// Set Owner function
//---------------------------------------------------------------------------------------
public func setOwner(myUser: User)
{
@ -156,6 +158,14 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
//---------------------------------------------------------------------------------------
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?)
{
if let e = error {
print("Central disconnected because \(e)")
// connectToDevice(id: peripheral.identifier.uuidString)
} else {
print("Central disconnected! (no error)")
}
if(peripheral.identifier == connectedPeripheral.identifier){
connectedPeripheral = nil
connectedNodeInfo = nil
@ -165,6 +175,8 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
self.startScanning()
}
//---------------------------------------------------------------------------------------
// Discover Services Event
//---------------------------------------------------------------------------------------
@ -320,10 +332,42 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
if decodedInfo.packet.id != 0
{
print("Save a packet")
do {
print(try decodedInfo.packet.jsonString())
if decodedInfo.packet.decoded.portnum == PortNum.textMessageApp {
if let messageText = String(bytes: decodedInfo.packet.decoded.payload, encoding: .utf8) {
print(messageText)
print(try decodedInfo.packet.jsonString())
messageData.messages.append(
MessageModel(messageId: decodedInfo.packet.id, messageTimeStamp: Int64(decodedInfo.packet.rxTime), fromUserId: decodedInfo.packet.from, toUserId: decodedInfo.packet.to, fromUserLongName: "From Long Name ", toUserLongName: "To Long Name", fromUserShortName: "FLN", toUserShortName: "TLN", receivedACK: decodedInfo.packet.decoded.wantResponse, messagePayload: messageText, direction: "IN"))
messageData.save()
} else {
print("not a valid UTF-8 sequence")
}
}
else if decodedInfo.packet.decoded.portnum == PortNum.nodeinfoApp {
if let nodeInfoPayload = String(bytes: decodedInfo.packet.decoded.payload, encoding: .utf8) {
print(nodeInfoPayload)
} else {
print("not a valid UTF-8 sequence")
print(try decodedInfo.packet.jsonString())
}
}
else if decodedInfo.packet.decoded.portnum == PortNum.positionApp {
if let nodeInfoPayload = String(bytes: decodedInfo.packet.decoded.payload, encoding: .utf8) {
print(nodeInfoPayload)
} else {
print("not a valid UTF-8 sequence")
print(try decodedInfo.packet.jsonString())
}
}
else
{
print("Save a packet")
print(try decodedInfo.packet.jsonString())
}
@ -335,6 +379,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
if decodedInfo.configCompleteID != 0 {
print(decodedInfo)
meshData.load()
messageData.load()
}
default:

View file

@ -11,15 +11,18 @@ import SwiftUI
struct MeshtasticClientApp: App {
@ObservedObject private var meshData: MeshData = MeshData()
@ObservedObject private var messageData: MessageData = MessageData()
@ObservedObject private var bleManager: BLEManager = BLEManager()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(meshData)
.environmentObject(messageData)
.environmentObject(bleManager)
.onAppear{
meshData.load()
messageData.load()
}
}

View file

@ -22,11 +22,11 @@ class MessageData: ObservableObject {
func load() {
DispatchQueue.global(qos: .background).async { [weak self] in
guard let data = try? Data(contentsOf: Self.fileURL) else {
//#if DEBUG
#if DEBUG
DispatchQueue.main.async {
self?.messages = MessageModel.data
}
//#endif
#endif
return
}
guard let messageList = try? JSONDecoder().decode([MessageModel].self, from: data) else {

View file

@ -52,7 +52,7 @@ struct NodeInfoModel: Identifiable, Codable {
}
}
var coordinate: CLLocationCoordinate2D? {
if latitude != nil || longitude != nil {
if latitude != nil && longitude != nil {
let coord = CLLocationCoordinate2D(latitude: latitude!, longitude: longitude!)
return coord

View file

@ -7,6 +7,7 @@ struct MessageBubble: View {
var shortName: String
var body: some View {
HStack (alignment: .top) {
CircleText(text: shortName, color: isCurrentUser ? Color.blue : Color(.darkGray)).padding(.all, 5)

View file

@ -17,7 +17,7 @@ struct Messages: View {
@Namespace var bottomId
// Message Data and Bluetooth
@ObservedObject var messageData: MessageData = MessageData()
@EnvironmentObject var messageData: MessageData
@EnvironmentObject var bleManager: BLEManager
var body: some View {