87 lines
2.2 KiB
Swift
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 ?? [])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|