// // 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" } } }