fix session

This commit is contained in:
anlicheng 2026-03-09 17:37:32 +08:00
parent df72f2e5fa
commit 4032cbd512
3 changed files with 17 additions and 16 deletions

View File

@ -90,7 +90,7 @@ actor SDLContextActor {
self.sessionManager = SessionManager() self.sessionManager = SessionManager()
self.arpServer = ArpServerActor() self.arpServer = ArpServerActor()
self.puncherActor = SDLPuncherActor(querySocketAddress: config.stunSocketAddress) self.puncherActor = SDLPuncherActor()
self.proberActor = SDLNATProberActor(addressArray: config.stunProbeSocketAddressArray) self.proberActor = SDLNATProberActor(addressArray: config.stunProbeSocketAddressArray)
// //

View File

@ -17,19 +17,12 @@ actor SDLPuncherActor {
// //
private var pendingRequests: [UInt32: RegisterRequest] = [:] private var pendingRequests: [UInt32: RegisterRequest] = [:]
// holer
nonisolated private let querySocketAddress: SocketAddress
struct RegisterRequest { struct RegisterRequest {
let srcMac: Data let srcMac: Data
let dstMac: Data let dstMac: Data
let networkId: UInt32 let networkId: UInt32
} }
init(querySocketAddress: SocketAddress) {
self.querySocketAddress = querySocketAddress
}
func submitRegisterRequest(quicClient: SDLQUICClient?, request: RegisterRequest) { func submitRegisterRequest(quicClient: SDLQUICClient?, request: RegisterRequest) {
let dstMac = request.dstMac let dstMac = request.dstMac
guard let quicClient, !coolingDown.contains(dstMac) else { guard let quicClient, !coolingDown.contains(dstMac) else {
@ -39,11 +32,7 @@ actor SDLPuncherActor {
// //
coolingDown.insert(dstMac) coolingDown.insert(dstMac)
let pktId = self.pktId let pktId = self.nextPacketId()
self.pktId &+= 1
if self.pktId == 0 {
self.pktId = 1
}
self.tryHole(using: quicClient, pktId: pktId, request: request) self.tryHole(using: quicClient, pktId: pktId, request: request)
Task { Task {
@ -90,4 +79,14 @@ actor SDLPuncherActor {
quicClient.send(type: .queryInfo, data: queryData) quicClient.send(type: .queryInfo, data: queryData)
} }
} }
private func nextPacketId() -> UInt32 {
let pktId = self.pktId
self.pktId &+= 1
if self.pktId == 0 {
self.pktId = 1
}
return pktId
}
} }

View File

@ -1,7 +1,7 @@
// //
// Session.swift // Session.swift
// sdlan // sdlan
// // Session
// Created by on 2025/7/14. // Created by on 2025/7/14.
// //
import Foundation import Foundation
@ -36,9 +36,11 @@ actor SessionManager {
func getSession(toAddress: Data) -> Session? { func getSession(toAddress: Data) -> Session? {
let timestamp = Int32(Date().timeIntervalSince1970) let timestamp = Int32(Date().timeIntervalSince1970)
if let session = self.sessions[toAddress] { if var session = self.sessions[toAddress] {
if session.lastTimestamp >= timestamp + ttl { if session.lastTimestamp >= timestamp + ttl {
self.sessions[toAddress]?.updateLastTimestamp(timestamp) session.updateLastTimestamp(timestamp)
self.sessions[toAddress] = session
return session return session
} else { } else {
self.sessions.removeValue(forKey: toAddress) self.sessions.removeValue(forKey: toAddress)