Created
October 21, 2019 19:28
-
-
Save paulw11/e672a59c68762b82a5421f365a579e2d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// AppDelegate.swift | |
// UDPTest | |
// | |
// Created by Paul Wilkinson on 22/10/19. | |
// Copyright © 2019 Paul Wilkinson. All rights reserved. | |
// | |
import Cocoa | |
import SwiftUI | |
@NSApplicationMain | |
class AppDelegate: NSObject, NSApplicationDelegate { | |
var window: NSWindow! | |
var network: UDPNetwork! | |
func applicationDidFinishLaunching(_ aNotification: Notification) { | |
// Create the SwiftUI view that provides the window contents. | |
let contentView = ContentView() | |
// Create the window and set the content view. | |
window = NSWindow( | |
contentRect: NSRect(x: 0, y: 0, width: 480, height: 300), | |
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], | |
backing: .buffered, defer: false) | |
window.center() | |
window.setFrameAutosaveName("Main Window") | |
window.contentView = NSHostingView(rootView: contentView) | |
window.makeKeyAndOrderFront(nil) | |
self.network = UDPNetwork(host: "127.0.0.1", port:"4210")! | |
self.network.connect() | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// UDPNetwork.swift | |
// UDPTest | |
// | |
// Created by Paul Wilkinson on 22/10/19. | |
// Copyright © 2019 Paul Wilkinson. All rights reserved. | |
// | |
import Foundation | |
import Network | |
class UDPNetwork { | |
var hostUDP: NWEndpoint.Host | |
var portUDP: NWEndpoint.Port | |
private var connection: NWConnection? | |
private var queue = DispatchQueue(label: "NetworkQuue", qos: .utility) | |
init?(host: String, port: String) { | |
guard !host.isEmpty, let portUDP = NWEndpoint.Port(port) else { | |
return nil | |
} | |
self.hostUDP = NWEndpoint.Host(host) | |
self.portUDP = portUDP | |
} | |
func connect() | |
{ | |
connection = NWConnection(host: hostUDP, port: portUDP, using: .udp) | |
connection?.stateUpdateHandler = | |
{ | |
(newState) in switch (newState) | |
{ | |
case .ready: | |
//The connection is established and ready to send and recieve data. | |
print("ready") | |
self.sendPaket("Hello") | |
self.receive() | |
case .setup: | |
//The connection has been initialized but not started | |
print("setup") | |
case .cancelled: | |
//The connection has been cancelled | |
print("cancelled") | |
case .preparing: | |
//The connection in the process of being established | |
print("Preparing") | |
default: | |
//The connection has disconnected or encountered an error | |
print("waiting or failed") | |
} | |
} | |
connection?.start(queue: self.queue) | |
} | |
func sendPaket(_ packet:String) | |
{ | |
let packetData = packet.data(using: .utf8) | |
self.connection?.send(content: packetData, completion: NWConnection.SendCompletion.contentProcessed(({ (error) in | |
if let err = error { | |
print("Sending error \(err)") | |
} else { | |
print("Sent successfully") | |
} | |
}))) | |
} | |
func receive() | |
{ | |
self.connection?.receiveMessage(completion: | |
{ | |
(data, context, isComplete, error) in | |
print("Got it") | |
if let err = error { | |
print("Recieve error: \(err)") | |
} | |
if let rcvData = data, | |
let str = String(data:rcvData, encoding: .utf8) { | |
print("Received: \(str)") | |
} | |
self.receive() | |
}) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment