Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e77ea5a

Browse files
committed
chore: handle waking from device sleep
1 parent d2ed4a9 commit e77ea5a

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

Coder Desktop/Coder Desktop/XPCInterface.swift

+6-2
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,13 @@ import VPNLib
5959
}
6060
}
6161

62-
func onPeerUpdate(_ data: Data) {
62+
func onPeerUpdate(_ data: Data, isState: Bool) {
6363
Task { @MainActor in
64-
svc.onExtensionPeerUpdate(data)
64+
if isState {
65+
svc.onExtensionPeerState(data)
66+
} else {
67+
svc.onExtensionPeerUpdate(data)
68+
}
6569
}
6670
}
6771

Coder Desktop/VPN/Manager.swift

+10-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ actor Manager {
111111
if let conn = globalXPCListenerDelegate.conn {
112112
do {
113113
let data = try msg.peerUpdate.serializedData()
114-
conn.onPeerUpdate(data)
114+
conn.onPeerUpdate(data, isState: false)
115115
} catch {
116116
logger.error("failed to send peer update to client: \(error)")
117117
}
@@ -218,6 +218,15 @@ actor Manager {
218218
}
219219
return resp.peerUpdate
220220
}
221+
222+
func forcePushPeerState() async throws {
223+
let state = try await getPeerState().serializedData()
224+
guard let conn = globalXPCListenerDelegate.conn else {
225+
logger.info("app was not running on wake, not pushing state")
226+
return
227+
}
228+
conn.onPeerUpdate(state, isState: true)
229+
}
221230
}
222231

223232
struct ManagerConfig {

Coder Desktop/VPN/PacketTunnelProvider.swift

+12-2
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,24 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable {
122122
}
123123

124124
override func sleep(completionHandler: @escaping () -> Void) {
125-
// Add code here to get ready to sleep.
125+
// Nothing we need to do on sleep right now
126126
logger.debug("sleep called")
127127
completionHandler()
128128
}
129129

130130
override func wake() {
131-
// Add code here to wake up.
132131
logger.debug("wake called")
132+
guard let manager else {
133+
logger.error("wake called with nil Manager")
134+
return
135+
}
136+
Task {
137+
do {
138+
try await manager.forcePushPeerState()
139+
} catch {
140+
logger.error("error pushing peer state: \(error, privacy: .public)")
141+
}
142+
}
133143
}
134144

135145
// Wrapper around `setTunnelNetworkSettings` that supports merging updates

Coder Desktop/VPNLib/XPC.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Foundation
99
@preconcurrency
1010
@objc public protocol VPNXPCClientCallbackProtocol {
1111
// data is a serialized `Vpn_PeerUpdate`
12-
func onPeerUpdate(_ data: Data)
12+
// If `isState` is true, the update should replace the current state.
13+
func onPeerUpdate(_ data: Data, isState: Bool)
1314
func removeQuarantine(path: String, reply: @escaping (Bool) -> Void)
1415
}

0 commit comments

Comments
 (0)