Fixed: make SpeedDataRecorder thread safe
This commit is contained in:
parent
a1f5ea4700
commit
9c90310294
@ -60,7 +60,7 @@ class MenuItemFactory {
|
||||
let selected = proxy.stringValue == selectedName
|
||||
proxyItem.state = selected ? .on : .off
|
||||
|
||||
if let delay = SpeedDataRecorder.shared.speedDict[proxy.stringValue] {
|
||||
if let delay = SpeedDataRecorder.shared.getDelay(proxy.stringValue) {
|
||||
let menuItemView = ProxyMenuItemView.create(proxy: proxy.stringValue, delay: delay)
|
||||
menuItemView.isSelected = selected
|
||||
menuItemView.onClick = { [weak proxyItem] in
|
||||
|
@ -12,5 +12,22 @@ class SpeedDataRecorder {
|
||||
static let shared = SpeedDataRecorder()
|
||||
private init(){}
|
||||
|
||||
var speedDict = [String:Int]()
|
||||
private let queue = DispatchQueue(label: "clashx.SpeedDataRecorder")
|
||||
|
||||
private var speedDict = [String:Int]()
|
||||
|
||||
func getDelay(_ proxyName:String) -> Int? {
|
||||
var delay:Int?
|
||||
queue.sync { [weak self] in
|
||||
delay = self?.speedDict[proxyName]
|
||||
}
|
||||
return delay
|
||||
}
|
||||
|
||||
func setDelay(_ proxyName:String,delay:Int?) {
|
||||
queue.async(group: nil, qos: .default, flags: DispatchWorkItemFlags.barrier) {
|
||||
[weak self] in
|
||||
self?.speedDict[proxyName] = delay
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -105,8 +105,7 @@ class JsBridgeUtil {
|
||||
} else {
|
||||
resp = delay
|
||||
}
|
||||
|
||||
SpeedDataRecorder.shared.speedDict[proxyName] = delay
|
||||
SpeedDataRecorder.shared.setDelay(proxyName, delay: delay)
|
||||
responseCallback?(resp)
|
||||
}
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user