fix bug
This commit is contained in:
parent
f86dd4c273
commit
d00296737b
@ -36,6 +36,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
let superPort = options["super_port"] as! Int
|
let superPort = options["super_port"] as! Int
|
||||||
let stunServersStr = options["stun_servers"] as! String
|
let stunServersStr = options["stun_servers"] as! String
|
||||||
let noticePort = options["notice_port"] as! Int
|
let noticePort = options["notice_port"] as! Int
|
||||||
|
let token = options["token"] as! String
|
||||||
|
|
||||||
let stunServers = stunServersStr.split(separator: ";").compactMap { server -> SDLConfiguration.StunServer? in
|
let stunServers = stunServersStr.split(separator: ";").compactMap { server -> SDLConfiguration.StunServer? in
|
||||||
let parts = server.split(separator: ":", maxSplits: 2)
|
let parts = server.split(separator: ":", maxSplits: 2)
|
||||||
@ -63,7 +64,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
stunServers: stunServers,
|
stunServers: stunServers,
|
||||||
clientId: SDLContext.getUUID(),
|
clientId: SDLContext.getUUID(),
|
||||||
noticePort: noticePort,
|
noticePort: noticePort,
|
||||||
token: "")
|
token: token)
|
||||||
// 加密算法
|
// 加密算法
|
||||||
let rsaCipher = try! CCRSACipher(keySize: 1024)
|
let rsaCipher = try! CCRSACipher(keySize: 1024)
|
||||||
let aesChiper = CCAESChiper()
|
let aesChiper = CCAESChiper()
|
||||||
|
|||||||
2
dmg.sh
2
dmg.sh
@ -1,3 +1,3 @@
|
|||||||
#! /bin/sh
|
#! /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
|
||||||
|
|||||||
@ -10,10 +10,20 @@
|
|||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>punchnet.xcscheme_^#shared#^_</key>
|
<key>punchnet.xcscheme_^#shared#^_</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>2</integer>
|
||||||
|
</dict>
|
||||||
|
<key>punchnetTests.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
|
<key>punchnetUITests.xcscheme_^#shared#^_</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SuppressBuildableAutocreation</key>
|
<key>SuppressBuildableAutocreation</key>
|
||||||
<dict>
|
<dict>
|
||||||
@ -22,6 +32,11 @@
|
|||||||
<key>primary</key>
|
<key>primary</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<key>C8A77F052DD1E6D100195617</key>
|
||||||
|
<dict>
|
||||||
|
<key>primary</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
<key>C8A77F262DD1E77B00195617</key>
|
<key>C8A77F262DD1E77B00195617</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>primary</key>
|
<key>primary</key>
|
||||||
|
|||||||
@ -25,7 +25,7 @@ struct SystemConfig {
|
|||||||
// stun探测服务
|
// stun探测服务
|
||||||
static let stunServers = "118.178.229.213:1265,1266;118.178.229.213:1265,1266"
|
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 {
|
guard let superIp = DNSResolver.resolveAddrInfos(superHost).first else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -35,7 +35,8 @@ struct SystemConfig {
|
|||||||
"token": token as NSObject,
|
"token": token as NSObject,
|
||||||
"super_ip": "118.178.229.213" as NSObject,
|
"super_ip": "118.178.229.213" as NSObject,
|
||||||
"super_port": superPort 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)")
|
print("options: \(options)")
|
||||||
|
|||||||
@ -18,11 +18,7 @@ final class UDPNoticeCenterServer: ChannelInboundHandler {
|
|||||||
private var channel: Channel?
|
private var channel: Channel?
|
||||||
|
|
||||||
var messageFlow = PassthroughSubject<NoticeMessage.InboundMessage, Never>()
|
var messageFlow = PassthroughSubject<NoticeMessage.InboundMessage, Never>()
|
||||||
static let shared = UDPNoticeCenterServer()
|
public var port: Int = 0
|
||||||
|
|
||||||
private init() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func start() {
|
func start() {
|
||||||
self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
||||||
@ -31,7 +27,8 @@ final class UDPNoticeCenterServer: ChannelInboundHandler {
|
|||||||
.channelInitializer { channel in
|
.channelInitializer { channel in
|
||||||
channel.pipeline.addHandler(self)
|
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() {
|
func stop() {
|
||||||
|
|||||||
@ -21,6 +21,12 @@ struct IndexView: View {
|
|||||||
|
|
||||||
@State private var showMenu: Bool = false
|
@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 {
|
var body: some View {
|
||||||
|
|
||||||
VStack(alignment: .center, spacing: 10) {
|
VStack(alignment: .center, spacing: 10) {
|
||||||
@ -47,6 +53,24 @@ struct IndexView: View {
|
|||||||
self.showMenu = false
|
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()
|
Spacer()
|
||||||
.frame(width: 1, height: 10)
|
.frame(width: 1, height: 10)
|
||||||
|
|
||||||
@ -176,10 +200,18 @@ struct IndexView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
self.cancel = UDPNoticeCenterServer.shared.messageFlow.sink{ message in
|
self.cancel = self.noticeServer.messageFlow.sink{ message in
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.message = message
|
switch message {
|
||||||
self.showStunAlert = true
|
case .none:
|
||||||
|
()
|
||||||
|
case .ip(let ip):
|
||||||
|
self.showIpAdress = true
|
||||||
|
self.ipAddress = ip
|
||||||
|
default:
|
||||||
|
self.message = message
|
||||||
|
self.showStunAlert = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,15 +220,17 @@ struct IndexView: View {
|
|||||||
private func clickSwitchButton() async throws {
|
private func clickSwitchButton() async throws {
|
||||||
switch self.vpnManager.vpnStatus {
|
switch self.vpnManager.vpnStatus {
|
||||||
case .connected:
|
case .connected:
|
||||||
|
self.showIpAdress = false
|
||||||
|
self.ipAddress = ""
|
||||||
try await vpnManager.disableVpn()
|
try await vpnManager.disableVpn()
|
||||||
case .disconnected:
|
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 {
|
#Preview {
|
||||||
IndexView()
|
//IndexView(noticeServer: server)
|
||||||
//.modelContainer(for: Item.self, inMemory: true)
|
//.modelContainer(for: Item.self, inMemory: true)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,9 +33,16 @@ struct punchnetApp: App {
|
|||||||
@AppStorage("token") var token: String = ""
|
@AppStorage("token") var token: String = ""
|
||||||
@ObservedObject var vpnManager = VPNManager.shared
|
@ObservedObject var vpnManager = VPNManager.shared
|
||||||
|
|
||||||
|
private var noticeServer: UDPNoticeCenterServer
|
||||||
|
|
||||||
|
init() {
|
||||||
|
self.noticeServer = UDPNoticeCenterServer()
|
||||||
|
self.noticeServer.start()
|
||||||
|
}
|
||||||
|
|
||||||
var body: some Scene {
|
var body: some Scene {
|
||||||
WindowGroup(id: "mainWindow") {
|
WindowGroup(id: "mainWindow") {
|
||||||
IndexView()
|
IndexView(noticeServer: self.noticeServer)
|
||||||
.frame(minWidth: 300, maxWidth: 300, minHeight: 500, maxHeight: 500)
|
.frame(minWidth: 300, maxWidth: 300, minHeight: 500, maxHeight: 500)
|
||||||
.onAppear {
|
.onAppear {
|
||||||
// 获取主屏幕的尺寸
|
// 获取主屏幕的尺寸
|
||||||
@ -53,6 +60,8 @@ struct punchnetApp: App {
|
|||||||
window.setFrameOrigin(NSPoint(x: centerX, y: centerY))
|
window.setFrameOrigin(NSPoint(x: centerX, y: centerY))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.toolbar(.hidden)
|
||||||
|
.navigationTitle("")
|
||||||
}
|
}
|
||||||
.commands {
|
.commands {
|
||||||
CommandGroup(replacing: .appInfo) {
|
CommandGroup(replacing: .appInfo) {
|
||||||
@ -94,7 +103,7 @@ struct punchnetApp: App {
|
|||||||
switch self.vpnManager.vpnStatus {
|
switch self.vpnManager.vpnStatus {
|
||||||
case .disconnected:
|
case .disconnected:
|
||||||
Task {
|
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:
|
case .connected:
|
||||||
Task {
|
Task {
|
||||||
@ -109,7 +118,7 @@ struct punchnetApp: App {
|
|||||||
class AppDelegate: NSObject, NSApplicationDelegate {
|
class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
|
|
||||||
func applicationWillFinishLaunching(_ notification: Notification) {
|
func applicationWillFinishLaunching(_ notification: Notification) {
|
||||||
UDPNoticeCenterServer.shared.start()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
|
func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
|
||||||
@ -118,7 +127,6 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
sender.reply(toApplicationShouldTerminate: true)
|
sender.reply(toApplicationShouldTerminate: true)
|
||||||
}
|
}
|
||||||
UDPNoticeCenterServer.shared.stop()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return .terminateLater
|
return .terminateLater
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user