fix session
This commit is contained in:
parent
8383743f2c
commit
6e0e40c398
36
Tun/Punchnet/Session/Session.swift
Normal file
36
Tun/Punchnet/Session/Session.swift
Normal file
@ -0,0 +1,36 @@
|
||||
//
|
||||
// Session.swift
|
||||
// sdlan
|
||||
// Session是增加了有效时间的
|
||||
// Created by 安礼成 on 2025/7/14.
|
||||
//
|
||||
import Foundation
|
||||
import NIOCore
|
||||
|
||||
struct Session {
|
||||
enum AddressType: String, Hashable {
|
||||
case v4
|
||||
case v6
|
||||
}
|
||||
|
||||
// 在内部的通讯的ip地址, 整数格式
|
||||
let dstMac: Data
|
||||
// 对端的主机在nat上映射的端口信息
|
||||
let natAddress: SocketAddress
|
||||
// 当前会话对应的外层地址族
|
||||
let addressType: AddressType
|
||||
|
||||
// 最后使用时间
|
||||
var lastTimestamp: Int32
|
||||
|
||||
init?(dstMac: Data, natAddress: SocketAddress, addressType: AddressType) {
|
||||
self.dstMac = dstMac
|
||||
self.natAddress = natAddress
|
||||
self.addressType = addressType
|
||||
self.lastTimestamp = Int32(Date().timeIntervalSince1970)
|
||||
}
|
||||
|
||||
mutating func updateLastTimestamp(_ lastTimestamp: Int32) {
|
||||
self.lastTimestamp = lastTimestamp
|
||||
}
|
||||
}
|
||||
27
Tun/Punchnet/Session/SessionSnapshot.swift
Normal file
27
Tun/Punchnet/Session/SessionSnapshot.swift
Normal file
@ -0,0 +1,27 @@
|
||||
//
|
||||
// SessionSnapshot.swift
|
||||
// Tun
|
||||
//
|
||||
// Created by Codex on 2026/5/21.
|
||||
//
|
||||
import Foundation
|
||||
|
||||
final class SessionSnapshot: Snapshot {
|
||||
private let sessions: [Data: [Session.AddressType: Session]]
|
||||
|
||||
init(sessions: [Data: [Session.AddressType: Session]]) {
|
||||
self.sessions = sessions
|
||||
}
|
||||
|
||||
func getSession(toAddress: Data) -> Session? {
|
||||
guard let peerSessions = self.sessions[toAddress] else {
|
||||
return nil
|
||||
}
|
||||
|
||||
return peerSessions.values.max(by: { $0.lastTimestamp < $1.lastTimestamp })
|
||||
}
|
||||
|
||||
static func empty() -> SessionSnapshot {
|
||||
return SessionSnapshot(sessions: [:])
|
||||
}
|
||||
}
|
||||
@ -1,60 +1,10 @@
|
||||
//
|
||||
// Session.swift
|
||||
// sdlan
|
||||
// Session是增加了有效时间的
|
||||
// Created by 安礼成 on 2025/7/14.
|
||||
// SessionTable.swift
|
||||
// Tun
|
||||
//
|
||||
// Created by Codex on 2026/5/21.
|
||||
//
|
||||
import Foundation
|
||||
import NIOCore
|
||||
import Darwin
|
||||
|
||||
struct Session {
|
||||
enum AddressType: String, Hashable {
|
||||
case v4
|
||||
case v6
|
||||
}
|
||||
|
||||
// 在内部的通讯的ip地址, 整数格式
|
||||
let dstMac: Data
|
||||
// 对端的主机在nat上映射的端口信息
|
||||
let natAddress: SocketAddress
|
||||
// 当前会话对应的外层地址族
|
||||
let addressType: AddressType
|
||||
|
||||
// 最后使用时间
|
||||
var lastTimestamp: Int32
|
||||
|
||||
init?(dstMac: Data, natAddress: SocketAddress, addressType: AddressType) {
|
||||
self.dstMac = dstMac
|
||||
self.natAddress = natAddress
|
||||
self.addressType = addressType
|
||||
self.lastTimestamp = Int32(Date().timeIntervalSince1970)
|
||||
}
|
||||
|
||||
mutating func updateLastTimestamp(_ lastTimestamp: Int32) {
|
||||
self.lastTimestamp = lastTimestamp
|
||||
}
|
||||
}
|
||||
|
||||
final class SessionSnapshot: Snapshot {
|
||||
private let sessions: [Data: [Session.AddressType: Session]]
|
||||
|
||||
init(sessions: [Data: [Session.AddressType: Session]]) {
|
||||
self.sessions = sessions
|
||||
}
|
||||
|
||||
func getSession(toAddress: Data) -> Session? {
|
||||
guard let peerSessions = self.sessions[toAddress] else {
|
||||
return nil
|
||||
}
|
||||
|
||||
return peerSessions.values.max(by: { $0.lastTimestamp < $1.lastTimestamp })
|
||||
}
|
||||
|
||||
static func empty() -> SessionSnapshot {
|
||||
return SessionSnapshot(sessions: [:])
|
||||
}
|
||||
}
|
||||
|
||||
actor SessionManager {
|
||||
private var sessions: [Data: [Session.AddressType: Session]] = [:]
|
||||
@ -141,5 +91,4 @@ actor SessionManager {
|
||||
}
|
||||
return SessionSnapshot(sessions: sessions)
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user