swiftlib_sdlan/Sources/sdlan/SDLThrottler.swift
2025-07-14 15:33:40 +08:00

46 lines
870 B
Swift

//
// SDLThrottler.swift
// Tun
//
// Created by on 2024/6/3.
//
import Foundation
import Combine
//
actor SDLThrottler {
private var limit: Int
private var token: Int
private var cancel: AnyCancellable?
init(limit: Int) {
self.limit = limit
self.token = limit
}
func start() {
self.cancel?.cancel()
self.cancel = Timer.publish(every: 1.0, on: .main, in: .common).autoconnect()
.sink { _ in
Task {
self.token = self.limit
}
}
}
func setRateLimit(limit: Int) {
self.limit = limit
}
func getToken(num: Int) -> Bool {
if token > 0 {
self.token = self.token - num
return true
} else {
return false
}
}
}