112 lines
2.6 KiB
Swift
112 lines
2.6 KiB
Swift
//
|
|
// NetworkContext.swift
|
|
// punchnet
|
|
//
|
|
// Created by 安礼成 on 2026/4/17.
|
|
//
|
|
import Foundation
|
|
|
|
// 用来做临时的数据解析
|
|
struct NetworkContext: Codable {
|
|
let ip: String
|
|
let maskLen: UInt8
|
|
// 主机名称
|
|
let hostname: String
|
|
let identityId: UInt32
|
|
let resourceList: [Resource]
|
|
let nodeList: [Node]
|
|
let exitNodeList: [ExitNode]
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case ip
|
|
case maskLen = "mask_len"
|
|
case hostname
|
|
case identityId = "identity_id"
|
|
case resourceList = "resource_list"
|
|
case nodeList = "node_list"
|
|
case exitNodeList = "exit_node"
|
|
}
|
|
|
|
func getNode(id: Int?) -> Node? {
|
|
return nodeList.first(where: { $0.id == id })
|
|
}
|
|
|
|
func firstNodeId() -> Int? {
|
|
return nodeList.first?.id
|
|
}
|
|
}
|
|
|
|
extension NetworkContext {
|
|
|
|
struct ExitNode: Codable {
|
|
let uuid = UUID().uuidString
|
|
let nnid: Int
|
|
let nodeName: String
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case nnid = "node_id"
|
|
case nodeName = "node_name"
|
|
}
|
|
}
|
|
|
|
// 资源列表
|
|
struct Resource: Codable {
|
|
var uuid = UUID().uuidString
|
|
var id: Int
|
|
var name: String
|
|
var url: String
|
|
var connectionStatus: String
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case name
|
|
case url
|
|
case connectionStatus = "connection_status"
|
|
}
|
|
}
|
|
|
|
// 设备列表
|
|
struct Node: Codable {
|
|
var id: Int
|
|
var name: String
|
|
var ip: String
|
|
var system: String?
|
|
var connectionStatus: String
|
|
|
|
func hash(into hasher: inout Hasher) {
|
|
hasher.combine(id)
|
|
}
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case name
|
|
case ip
|
|
case system
|
|
case connectionStatus = "connection_status"
|
|
}
|
|
|
|
static func == (lhs: Self, rhs: Self) -> Bool {
|
|
return lhs.id == rhs.id
|
|
}
|
|
}
|
|
|
|
// 节点详情
|
|
struct NodeDetail: Codable {
|
|
let id: Int
|
|
let name: String
|
|
let ip: String
|
|
let system: String?
|
|
let connectionStatus: String
|
|
let resourceList: [Resource]
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case name
|
|
case ip
|
|
case system
|
|
case connectionStatus = "connection_status"
|
|
case resourceList = "resource_list"
|
|
}
|
|
}
|
|
}
|