abe519dae7
* Add macOS support * Update README * Update to v0.2.0 * Document breaking changes * Delete widget tests
87 lines
2.3 KiB
Swift
87 lines
2.3 KiB
Swift
|
|
import Foundation
|
|
import MultipeerConnectivity
|
|
|
|
class NearbyDevice : NSObject {
|
|
var name: String
|
|
var peerID: MCPeerID
|
|
var deviceType: String?
|
|
var os: String?
|
|
var osVersion: String?
|
|
var session: NearbySession?
|
|
|
|
|
|
init(
|
|
peerID: MCPeerID,
|
|
name:String,
|
|
deviceType:String? = nil,
|
|
os: String? = nil,
|
|
osVersion: String? = nil
|
|
) {
|
|
self.name=name
|
|
self.peerID = peerID
|
|
self.deviceType=deviceType
|
|
self.os=os
|
|
self.osVersion=osVersion
|
|
}
|
|
|
|
func createSession(for peerID: MCPeerID) -> NearbySession {
|
|
self.session = NearbySession.create(peerID: peerID)
|
|
return session!
|
|
}
|
|
|
|
func deleteSession() {
|
|
self.session = nil
|
|
}
|
|
|
|
}
|
|
|
|
extension NearbyDevice {
|
|
static func fromDictionary(for dictionary: [String: String]?, with peerID: MCPeerID) -> NearbyDevice {
|
|
let device = NearbyDevice(
|
|
peerID: peerID,
|
|
name:(dictionary?["displayName"] as String?) ?? peerID.displayName,
|
|
deviceType: dictionary?["deviceType"] as String?,
|
|
os: dictionary?["os"] as String?,
|
|
osVersion: dictionary?["osVersion"] as String?
|
|
)
|
|
return device
|
|
|
|
}
|
|
|
|
func toDictionary() -> [String: String] {
|
|
var deviceDict: [String: String] = [
|
|
"displayName": self.name,
|
|
"id": self.peerID.displayName,
|
|
]
|
|
if let os = self.os {
|
|
deviceDict["os"] = os
|
|
}
|
|
if let deviceType = self.deviceType {
|
|
deviceDict["deviceType"] = deviceType
|
|
}
|
|
if let osVersion = self.osVersion {
|
|
deviceDict["osVersion"] = osVersion
|
|
}
|
|
if let session = self.session {
|
|
deviceDict["state"] = String(session.state.rawValue)
|
|
} else {
|
|
deviceDict["state"] = String(0)
|
|
}
|
|
return deviceDict
|
|
}
|
|
|
|
func toDartFormat() -> String? {
|
|
var result: String?
|
|
do {
|
|
let jsonData = try JSONSerialization.data(withJSONObject: toDictionary())
|
|
if let jsonString = String(data: jsonData, encoding: .utf8) {
|
|
result = jsonString
|
|
}
|
|
} catch let error {
|
|
Logger.error(message: error.localizedDescription)
|
|
}
|
|
return result
|
|
}
|
|
}
|