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.arpServer = ArpServerActor()
self.puncherActor = SDLPuncherActor(querySocketAddress: config.stunSocketAddress)
self.puncherActor = SDLPuncherActor()
self.proberActor = SDLNATProberActor(addressArray: config.stunProbeSocketAddressArray)
//

View File

@ -17,19 +17,12 @@ actor SDLPuncherActor {
//
private var pendingRequests: [UInt32: RegisterRequest] = [:]
// holer
nonisolated private let querySocketAddress: SocketAddress
struct RegisterRequest {
let srcMac: Data
let dstMac: Data
let networkId: UInt32
}
init(querySocketAddress: SocketAddress) {
self.querySocketAddress = querySocketAddress
}
func submitRegisterRequest(quicClient: SDLQUICClient?, request: RegisterRequest) {
let dstMac = request.dstMac
guard let quicClient, !coolingDown.contains(dstMac) else {
@ -39,11 +32,7 @@ actor SDLPuncherActor {
//
coolingDown.insert(dstMac)
let pktId = self.pktId
self.pktId &+= 1
if self.pktId == 0 {
self.pktId = 1
}
let pktId = self.nextPacketId()
self.tryHole(using: quicClient, pktId: pktId, request: request)
Task {
@ -90,4 +79,14 @@ actor SDLPuncherActor {
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
// sdlan
//
// Session
// Created by on 2025/7/14.
//
import Foundation
@ -36,9 +36,11 @@ actor SessionManager {
func getSession(toAddress: Data) -> Session? {
let timestamp = Int32(Date().timeIntervalSince1970)
if let session = self.sessions[toAddress] {
if var session = self.sessions[toAddress] {
if session.lastTimestamp >= timestamp + ttl {
self.sessions[toAddress]?.updateLastTimestamp(timestamp)
session.updateLastTimestamp(timestamp)
self.sessions[toAddress] = session
return session
} else {
self.sessions.removeValue(forKey: toAddress)