https://github.com/clevertap/ctsimpleping
A basic wrapper around iOS Simple Ping
https://github.com/clevertap/ctsimpleping
Last synced: about 1 year ago
JSON representation
A basic wrapper around iOS Simple Ping
- Host: GitHub
- URL: https://github.com/clevertap/ctsimpleping
- Owner: CleverTap
- License: mit
- Created: 2022-03-12T19:40:48.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-10-30T10:25:41.000Z (almost 2 years ago)
- Last Synced: 2025-02-16T08:25:27.527Z (over 1 year ago)
- Language: Objective-C
- Homepage:
- Size: 940 KB
- Stars: 1
- Watchers: 8
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: License.txt
Awesome Lists containing this project
README
# CTSimplePing
A basic wrapper around [iOS Simple Ping](https://developer.apple.com/library/archive/samplecode/SimplePing/Introduction/Intro.html)
## Example Usaage
import Foundation
import CTSimplePing
public typealias SimplePingClientCallback = (String?)->()
public class SimplePingClient: NSObject {
static let singletonPC = SimplePingClient()
private var resultCallback: SimplePingClientCallback?
private var pingClient: CTSimplePingClient?
private var dateReference: NSDate?
public static func pingHostname(hostname: String, andResultCallback callback: SimplePingClientCallback?) {
singletonPC.pingHostname(hostname: hostname, andResultCallback: callback)
}
public func pingHostname(hostname: String, andResultCallback callback: SimplePingClientCallback?) {
resultCallback = callback
pingClient = CTSimplePingClient(hostName: hostname)
pingClient?.delegate = self
pingClient?.start()
}
}
extension SimplePingClient: CTSimplePingDelegate {
public func simplePing(_ pinger: CTSimplePingClient, didStartWithAddress address: Data) {
pinger.sendPing(with: nil)
}
public func simplePing(_ pinger: CTSimplePingClient, didFailWithError error: Error) {
resultCallback?(nil)
}
public func simplePing(pinger: CTSimplePingClient!, didSendPacket packet: NSData!) {
dateReference = NSDate()
}
public func simplePing(pinger: CTSimplePingClient!, didFailToSendPacket packet: NSData!, error: NSError!) {
pinger.stop()
resultCallback?(nil)
}
public func simplePing(_ pinger: CTSimplePingClient, didReceiveUnexpectedPacket packet: Data) {
pinger.stop()
resultCallback?(nil)
}
public func simplePing(_ pinger: CTSimplePingClient, didReceivePingResponsePacket packet: Data, sequenceNumber: UInt16) {
pinger.stop()
guard let dateReference = dateReference else { return }
//timeIntervalSinceDate returns seconds, so we convert to milis
let latency = NSDate().timeIntervalSince(dateReference as Date) * 1000
resultCallback?(String(format: "%.f", latency))
}
public func simplePing(_ pinger: CTSimplePingClient, didSendPacket packet: Data, sequenceNumber: UInt16) {
dateReference = NSDate()
}
public func simplePing(_ pinger: CTSimplePingClient, didFailToSendPacket packet: Data, sequenceNumber: UInt16, error: Error) {
pinger.stop()
resultCallback?(nil)
}
public func simplePing(pinger: CTSimplePingClient!, didReceivePingResponsePacket packet: NSData!) {
pinger.stop()
guard let dateReference = dateReference else { return }
//timeIntervalSinceDate returns seconds, so we convert to milis
let latency = NSDate().timeIntervalSince(dateReference as Date) * 1000
resultCallback?(String(format: "%.f", latency))
}
}
## Install
### [Swift Package Manager](https://swift.org/package-manager/)
Add the `https://github.com/CleverTap/CTSimplePing.git` url to your project's Swift packages
### [CocoaPods](https://cocoapods.org)
```
target 'YOUR_TARGET_NAME' do
pod 'CTSimplePing'
end
```
### Manual
Download the `CTSimplePing.xcframework` included in this repository, drag it into your project and add it as an embedded framework in your build settings