This commit is contained in:
anlicheng 2025-08-27 19:11:22 +08:00
parent f86dd4c273
commit d00296737b
7 changed files with 75 additions and 19 deletions

View File

@ -36,6 +36,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
let superPort = options["super_port"] as! Int
let stunServersStr = options["stun_servers"] as! String
let noticePort = options["notice_port"] as! Int
let token = options["token"] as! String
let stunServers = stunServersStr.split(separator: ";").compactMap { server -> SDLConfiguration.StunServer? in
let parts = server.split(separator: ":", maxSplits: 2)
@ -63,7 +64,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
stunServers: stunServers,
clientId: SDLContext.getUUID(),
noticePort: noticePort,
token: "")
token: token)
//
let rsaCipher = try! CCRSACipher(keySize: 1024)
let aesChiper = CCAESChiper()

2
dmg.sh
View File

@ -1,3 +1,3 @@
#! /bin/sh
create-dmg --volname "punchnet" --window-pos 200 120 --window-size 800 400 --icon "punchnet.app" 200 190 --hide-extension "punchnet.app" --app-drop-link 600 185 ~/Desktop/punchnet.dmg /Users/anlicheng/Desktop/punchnet_v1
create-dmg --volname "punchnet" --window-pos 200 120 --window-size 800 400 --icon "punchnet.app" 200 190 --hide-extension "punchnet.app" --app-drop-link 600 185 ~/Desktop/punchnet.dmg /Users/anlicheng/Desktop/punchnet_macos_v1

View File

@ -10,10 +10,20 @@
<integer>0</integer>
</dict>
<key>punchnet.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
</dict>
<key>punchnetTests.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
</dict>
<key>punchnetUITests.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
@ -22,6 +32,11 @@
<key>primary</key>
<true/>
</dict>
<key>C8A77F052DD1E6D100195617</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>C8A77F262DD1E77B00195617</key>
<dict>
<key>primary</key>

View File

@ -25,7 +25,7 @@ struct SystemConfig {
// stun
static let stunServers = "118.178.229.213:1265,1266;118.178.229.213:1265,1266"
static func getOptions(token: String) -> [String:NSObject]? {
static func getOptions(token: String, noticePort: Int) -> [String:NSObject]? {
guard let superIp = DNSResolver.resolveAddrInfos(superHost).first else {
return nil
}
@ -35,7 +35,8 @@ struct SystemConfig {
"token": token as NSObject,
"super_ip": "118.178.229.213" as NSObject,
"super_port": superPort as NSObject,
"stun_servers": stunServers as NSObject
"stun_servers": stunServers as NSObject,
"notice_port": noticePort as NSObject
]
print("options: \(options)")

View File

@ -18,11 +18,7 @@ final class UDPNoticeCenterServer: ChannelInboundHandler {
private var channel: Channel?
var messageFlow = PassthroughSubject<NoticeMessage.InboundMessage, Never>()
static let shared = UDPNoticeCenterServer()
private init() {
}
public var port: Int = 0
func start() {
self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
@ -31,7 +27,8 @@ final class UDPNoticeCenterServer: ChannelInboundHandler {
.channelInitializer { channel in
channel.pipeline.addHandler(self)
}
self.channel = try! bootstrap.bind(host: "127.0.0.1", port: 50195).wait()
self.channel = try! bootstrap.bind(host: "127.0.0.1", port: 0).wait()
self.port = self.channel?.localAddress?.port ?? 0
}
func stop() {

View File

@ -21,6 +21,12 @@ struct IndexView: View {
@State private var showMenu: Bool = false
// ip
@State private var showIpAdress: Bool = false
@State private var ipAddress: String = ""
public var noticeServer: UDPNoticeCenterServer
var body: some View {
VStack(alignment: .center, spacing: 10) {
@ -47,6 +53,24 @@ struct IndexView: View {
self.showMenu = false
}
if showIpAdress {
HStack {
Spacer()
Text("ip: ")
.font(.system(size: 16, weight: .medium))
.foregroundColor(.white)
.cornerRadius(5.0)
Text(ipAddress)
.font(.system(size: 16, weight: .medium))
.foregroundColor(.white)
.cornerRadius(5.0)
Spacer()
}
}
Spacer()
.frame(width: 1, height: 10)
@ -176,27 +200,37 @@ struct IndexView: View {
}
}
.onAppear {
self.cancel = UDPNoticeCenterServer.shared.messageFlow.sink{ message in
self.cancel = self.noticeServer.messageFlow.sink{ message in
DispatchQueue.main.async {
switch message {
case .none:
()
case .ip(let ip):
self.showIpAdress = true
self.ipAddress = ip
default:
self.message = message
self.showStunAlert = true
}
}
}
}
}
private func clickSwitchButton() async throws {
switch self.vpnManager.vpnStatus {
case .connected:
self.showIpAdress = false
self.ipAddress = ""
try await vpnManager.disableVpn()
case .disconnected:
try await vpnManager.enableVpn(options: SystemConfig.getOptions(token: self.token)!)
try await vpnManager.enableVpn(options: SystemConfig.getOptions(token: self.token, noticePort: self.noticeServer.port)!)
}
}
}
#Preview {
IndexView()
//IndexView(noticeServer: server)
//.modelContainer(for: Item.self, inMemory: true)
}

View File

@ -33,9 +33,16 @@ struct punchnetApp: App {
@AppStorage("token") var token: String = ""
@ObservedObject var vpnManager = VPNManager.shared
private var noticeServer: UDPNoticeCenterServer
init() {
self.noticeServer = UDPNoticeCenterServer()
self.noticeServer.start()
}
var body: some Scene {
WindowGroup(id: "mainWindow") {
IndexView()
IndexView(noticeServer: self.noticeServer)
.frame(minWidth: 300, maxWidth: 300, minHeight: 500, maxHeight: 500)
.onAppear {
//
@ -53,6 +60,8 @@ struct punchnetApp: App {
window.setFrameOrigin(NSPoint(x: centerX, y: centerY))
}
}
.toolbar(.hidden)
.navigationTitle("")
}
.commands {
CommandGroup(replacing: .appInfo) {
@ -94,7 +103,7 @@ struct punchnetApp: App {
switch self.vpnManager.vpnStatus {
case .disconnected:
Task {
try await vpnManager.enableVpn(options: SystemConfig.getOptions(token: self.token)!)
try await vpnManager.enableVpn(options: SystemConfig.getOptions(token: self.token, noticePort: self.noticeServer.port)!)
}
case .connected:
Task {
@ -109,7 +118,7 @@ struct punchnetApp: App {
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationWillFinishLaunching(_ notification: Notification) {
UDPNoticeCenterServer.shared.start()
}
func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
@ -118,7 +127,6 @@ class AppDelegate: NSObject, NSApplicationDelegate {
DispatchQueue.main.async {
sender.reply(toApplicationShouldTerminate: true)
}
UDPNoticeCenterServer.shared.stop()
}
return .terminateLater