import SwiftUI
import os
import Foundation
import Network
class MulticastController {
var multicastIP : NWEndpoint.Host = "239.6.4.50"
var multicastPort : NWEndpoint.Port = 5890
let group: NWConnectionGroup
init() {
let endpoints: [NWEndpoint] = [.hostPort(host: multicastIP, port: multicastPort)]
guard let multicast = try? NWMulticastGroup(for: endpoints)
else { fatalError("Multicast Group setup error") }
let params: NWParameters = .udp
params.allowLocalEndpointReuse = true
group = NWConnectionGroup(with: multicast, using: params)
group.setReceiveHandler(maximumMessageSize: 16384, rejectOversizedMessages: true) { message, data, isComplete in
if let data, let value = String(data: data, encoding: .utf8) {
print(message, value, isComplete)
} else {
print(message, isComplete)
}
}
group.stateUpdateHandler = { (newState) in
print("Group entered state \(String(describing: newState))")
}
group.start(queue: .main)
}
func sendMulticastPacket(message: String) {
let data = message.data(using: .utf8)
group.send(content: data) { error in
if let error = error {
print(error.localizedDescription)
} else {
print("ok")
}
}
}
}
struct ContentView: View {
var session = MulticastController()
let message = "Hello World"
var body: some View {
VStack {
Button(action: {
session.sendMulticastPacket(message: message)
}, label: {
Text("Send Multicast Packet")
}
)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}