fix session
This commit is contained in:
parent
df72f2e5fa
commit
4032cbd512
@ -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)
|
||||
|
||||
// 权限控制
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user