punchnet-macos/Tun/Punchnet/SDLAsyncTimerStream.swift
2026-05-06 16:35:52 +08:00

34 lines
731 B
Swift

//
// SDLAsyncTimerStream.swift
// Tun
//
// Created by on 2026/2/3.
//
import Foundation
class SDLAsyncTimerStream {
let timer: DispatchSourceTimer
let stream: AsyncStream<Void>
private let cont: AsyncStream<Void>.Continuation
init() {
self.timer = DispatchSource.makeTimerSource(queue: .global())
(stream, cont) = AsyncStream.makeStream(of: Void.self)
}
func start(interval: DispatchTimeInterval) {
timer.schedule(deadline: .now(), repeating: interval)
timer.setEventHandler { [weak self] in
self?.cont.yield()
}
timer.resume()
}
deinit {
self.cont.finish()
self.timer.cancel()
}
}