[Android, iOS]: Initialization check, no disconnect on closing (#9)

* feat(android, dart): add check for initialization, show proper error messages

* feat(exception): add exception mapper for android and ios

* feat(ios): check initialization in swift

* fix(android): add initialization check for methods, remove disconnect() inside onDetachedFromEngine

* chore: code style, version, changelog
This commit is contained in:
Kseniia Nikitina
2024-08-09 21:22:58 +02:00
committed by GitHub
parent 906e87c6a9
commit a5c77f58e5
22 changed files with 306 additions and 102 deletions
+32
View File
@@ -30,6 +30,8 @@ class NearbyManager: NSObject {
}
func getCurrentDevice(result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
result(device.toDartFormat())
}
@@ -43,32 +45,44 @@ class NearbyManager: NSObject {
}
func startAdvertising(result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
self.advertiser.startAdvertisingPeer()
result(true)
}
func startBrowsing(result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
self.browser.startBrowsingForPeers()
result(true)
}
func stopAdvertising(result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
self.advertiser.stopAdvertisingPeer()
NearbyDevicesStore.instance.clear()
result(true)
}
func stopBrowsing(result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
self.browser.stopBrowsingForPeers()
NearbyDevicesStore.instance.clear()
result(true)
}
func getPeers(result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
result(NearbyDevicesStore.instance.toDartFormat())
}
func invite(for deviceId: String, result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
do {
let device = NearbyDevicesStore.instance.find(for: deviceId)
if let requireDevice = device {
@@ -87,6 +101,8 @@ class NearbyManager: NSObject {
}
}
func acceptInvite(for deviceId: String, result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
let device = NearbyDevicesStore.instance.find(for: deviceId)
if let requireDevice = device {
let nearbySession = requireDevice.createSession(for: self.device.peerID)
@@ -96,12 +112,16 @@ class NearbyManager: NSObject {
}
func disconnect(for deviceId: String, result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
let device = NearbyDevicesStore.instance.find(for: deviceId)
device?.deleteSession()
result(true)
}
func send(for content: NearbyMessageContent, with receiverId: String, result: @escaping FlutterResult) {
if (!checkInitialization(result: result)) { return }
let device = NearbyDevicesStore.instance.find(for: receiverId)
do {
@@ -158,6 +178,18 @@ class NearbyManager: NSObject {
Logger.error(message: error.localizedDescription)
}
}
func checkInitialization(result: @escaping FlutterResult) -> Bool {
guard let _ = self.device,
let _ = self.advertiser,
let _ = self.browser else {
Logger.error(message: "NearbyManager is not initialized. Please call 'initialize()' first")
result(ERROR_NO_INITIALIZATION)
return false
}
return true
}
}
extension NearbyManager: MCNearbyServiceAdvertiserDelegate {
+2
View File
@@ -16,3 +16,5 @@ let ON_RESOURCE_RECEIVED = Notification.Name("NearbySessionOnResourceReceived")
let DART_COMMAND_MESSAGE_RECEIVED = "invoke_nearby_service_message_received"
let DART_COMMAND_RESOURCES_RECEIVED = "invoke_nearby_service_resources_received"
let ERROR_NO_INITIALIZATION = "NO_INITIALIZATION"