Study
Network.framework
Study:「Handling Path Updates」
下記メソッドを実装
内容はパラメータを表示
- pathUpdateHandler
ネットワークインタフェース(NWPath)変更時にコールされる
最初は、コネクション生成時にコールされる様です - viabilityUpdateHandler
送受信可能になるとコールされる
NWState「ready」後にコールされる様です - betterPathUpdateHandler
優先される代替えネットワークインタフェース(NWPath)時にコールされる
試せていないです
環境
Client:Swift、Xcode
Server:Java、NetBeans 12/8と一緒のため割愛
Client Source Swift
main.swift
import Foundation
import Network
var sendAndReceive = SendAndReceive(host: "localhost", port: 7777, nWParameters: .tcp)
sendAndReceive.startConnection()
while sendAndReceive.running {
sleep(1)
}
SendAndReceive.swift
import Foundation
import Network
class SendAndReceive {
public var running = true
private var host:NWEndpoint.Host
private var port:NWEndpoint.Port
private var nWParameters: NWParameters
init(host:NWEndpoint.Host, port:NWEndpoint.Port, nWParameters: NWParameters) {
self.host = host
self.port = port
self.nWParameters = nWParameters
}
func startConnection() {
let myQueue = DispatchQueue(label: "ExampleNetwork")
let connection = NWConnection(host: host, port: port, using: nWParameters)
connection.pathUpdateHandler = { (nWPath) in
print("pathUpdateHandler:\(nWPath)")
}
connection.viabilityUpdateHandler = { (viability) in
print("viabilityUpdateHandler:\(viability)")
}
connection.betterPathUpdateHandler = {(better) in
print("betterPathUpdateHandler:\(better)")
}
connection.stateUpdateHandler = { (newState) in
switch(newState) {
case .setup:
print("setup")
case .waiting(let error):
print("waiting")
print(error)
case .preparing:
print("preparing")
case .ready:
print("ready")
self.sendMessage(connection)
case .failed(let error):
print("failed")
print(error)
case .cancelled:
print("cancelled")
@unknown default:
print("defaults")
break
}
}
connection.start(queue: myQueue)
self.receive(nWConnection: connection)
}
func sendMessage(_ connection: NWConnection) {
let data = "Example Send Data".data(using: .utf8)
let completion = NWConnection.SendCompletion.contentProcessed { (error: NWError?) in
print("送信完了")
}
connection.send(content: data, completion: completion)
}
func receive(nWConnection:NWConnection) {
nWConnection.receive(minimumIncompleteLength: 1, maximumLength: 5, completion: { (data, context, flag, error) in
print("receiveMessage")
if let data = data {
let receiveData = [UInt8](data)
print(receiveData)
print(flag)
if(flag == false) {
self.receive(nWConnection: nWConnection)
}
}
else {
print("receiveMessage data nil")
}
})
}
}
Output(送信完了まで)
pathUpdateHandler:satisfied (Path is satisfied), interface: lo0
preparing
ready
viabilityUpdateHandler:true
送信完了