burrow/Apple/App/NetworkConfiguration.swift
2023-04-29 20:28:48 -04:00

87 lines
2.2 KiB
Swift

import SwiftUI
import NetworkExtension
@MainActor
class NetworkConfiguration: ObservableObject {
func connectToBurrow() {
objectWillChange.send()
model.connectToBurrow()
}
@Published var model = Model()
@Published
var status: Status = .unknown
init() {
update()
}
func connectToNetwork() {
print(self.status)
self.status = .loading
print(self.status)
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
let random = Int.random(in: 0...1)
if random == 0 {
self.status = .valid
print(self.status)
} else {
self.status = .error
print(self.status)
}
}
}
func update() {
Task {
do {
let configurations = try await NETunnelProviderManager.loadAll()
await MainActor.run {
self.status = configurations.isEmpty ? .blank : .valid
print(self.status)
self.objectWillChange.send()
}
} catch {
await MainActor.run {
self.status = .error
self.objectWillChange.send()
}
}
}
}
func request() {
let configuration = NETunnelProviderProtocol()
configuration.providerBundleIdentifier = ""
configuration.serverAddress = "Hack Club"
let manager = NETunnelProviderManager()
manager.protocolConfiguration = configuration
manager.localizedDescription = "Hack Club Burrow"
manager.saveToPreferences { error in
print(error)
}
}
}
extension NETunnelProviderManager {
static func loadAll() async throws -> [NETunnelProviderManager] {
try await withUnsafeThrowingContinuation { continuation in
NETunnelProviderManager.loadAllFromPreferences { managers, error in
if let error = error {
continuation.resume(throwing: error)
} else {
continuation.resume(returning: managers ?? [])
}
}
}
}
}