react-native-ping-android v1.3.0
react-native-ping-android
Expose the Internet Control Message Protocol (ICMP) to React Native android app.
Measure the round-trip time (RTT) by using ICMP echo request packets to the intended destination.
Installation
npm install react-native-ping-androidor with Yarn
yarn add react-native-ping-androidš This library is supported in New Architecture (Turbo Modules)
APIs
ICMP
A bare JavaScript class to use ICMP controller
import { useRef } from 'react'
import { Button } from 'react-native'
import {
ICMP,
type ICMPResultInterface,
} from 'react-native-ping-android'
export default function App(): React.JSX.Element {
const
ref =
useRef({
icmp: new ICMP({ host: '1.1.1.1', packetSize: 64, timeout: 2000 }),
}),
[result, setResult] =
useState<ICMPResultInterface | null>(null)
const onPress = async () => {
const { rtt, ttl, status } = await ref.current.icmp.ping()
setResult({ rtt, ttl, status })
}
return (
<Button
title="Ping"
onPress={ onPress }
/>
)
}References
- Constructors: (data: ICMPConstructorDataInterface)
| Data Properties | Type | Required | Default Value | Remarks |
|---|---|---|---|---|
| host | string | Yes | valid host, e.g. 1.1.1.1 or guthib.com. Invalid host or unknown service will return ping result with PingStatus.UNKNOWN_HOST status | |
| packetSize | number | null | undefined | No | 56 | in bytes |
| timeout | number | null | undefined | No | 1000 | in milliseconds |
| ttl | number | null | undefined | No | 54 | time-to-live |
- Methods
| Method | Return | Remarks |
|---|---|---|
| ping | Promise<ICMPResultInterface> | Run the ICMP ping with arguments that has been defined from constructor. This method will return with PingStatus.ECHOING status if the method is invoked again while the previous process is still running. |
| cancel | void | Cancel current ICMP request. This method returns nothing. However the ping method which invoked before will return PingStatus.CANCELLED status. This method does nothing if there is no ICMP requests running. |
- Properties
| Property | Type |
|---|---|
| host | readonly string |
| packetSize | readonly number |
| timeout | readonly number |
| ttl | readonly number |
- Static Members
| Static Member | Type | Value | Remarks |
|---|---|---|---|
| NO_ECHO_RTT | number | -1 | Just an constant whenever the status of ping result is not PingStatus.ECHO. It is used in the rtt result. |
| NO_ECHO_TTL | number | -1 | Just an constant whenever the status of ping result is not PingStatus.ECHO. It is used in the ttl result. |
This API doesn't provide the count and interval functional arguments like in Windows/Darwin/Linux terminal.
If you want those, you can use the useICMP() React hook or you can implement your own interval and counter with this class. Feel free to create your own convinience.
It's safe to unmount the component without invoke the cancel method, like back to previous stack navigation, or unmount component with conditional rendering.
Good to hear that this module is using Kotlin Coroutines.
useICMP
A React hook of encapsulated ICMP class that you can use to simplify the ping handle with the count and the interval functional, since the ICMP class doesn't provide those arguments.
import { Button } from 'react-native'
import {
useICMP,
} from 'react-native-ping-android'
export default function App(): React.JSX.Element {
const { isRunning, result, start, stop } = useICMP()
useEffect(() => {
if(result) {
console.log('Result: ', result.rtt, result.ttl, result.status)
}
}, [result])
const toggle = () => {
if(isRunning) {
stop()
} else {
start({
host: 'guthib.com',
packetSize: 64,
timeout: 1000,
count: 10,
interval: 1000,
})
}
}
return (
<Button
title={ isRunning ? 'Stop' : 'Start' }
onPress={ toggle }
/>
)
}You can see full example at /example/src/screens/ping-runner/index.tsx
It's safe to unmount without invoke the stop method. This hook will cleanup the interval handler automatically.
Requirements
- Count must be larger than 0.
- Interval must be >= Timeout.
Otherwise, result will return with PingStatus.INVALID_ARGReferences
- Returns: UseICMPInterface
| Properties | Type | Remarks |
|---|---|---|
| isRunning | boolean | |
| result | ICMPResultInterface | See ICMPResultInterface |
| start | (data: UseICMPStartParamsInterface) => void | See UseICMPStartParamsInterface |
| stop | () => void |
isReachable
(host: string, timeout?: number) => Promise<boolean | null>
Simple function to test whether that address is reachable. Android implementation attempts ICMP ECHO REQUESTs first, on failure it will fall back to TCP ECHO REQUESTs. Success on either protocol will return true.
The host argument can either be a machine name, such as "guthib.com", or a textual representation of its IP address.
The timeout is 10000 (10 seconds) by default.
import { Button } from 'react-native'
import {
isReachable,
} from 'react-native-ping-android'
export default function App(): React.JSX.Element {
const onPress = async () => {
const isReached = await isReachable('guthib.com')
console.log('Is reached: ', isReached)
}
return (
<Button
title="Test"
onPress={ onPress }
/>
)
}getHostName
(host: string) => Promise<string | null>
If the host argument was given with a host name, this host name will be remembered and returned; otherwise, a reverse name lookup will be performed and the result will be returned based on the system configured name lookup service.
Definitions
ICMPResultInterface
| Properties | Type | Remarks |
|---|---|---|
rtt | number | When the status is not PingStatus.ECHO, the value will be -1 (NO_ECHO_RTT) |
ttl | number | When the status is not PingStatus.ECHO, the value will be -1 (NO_ECHO_TTL) |
status | PingStatus | Full references at PingStatus |
ICMPConstructorDataInterface
| Properties | Type | Remarks |
|---|---|---|
host | string | Can either be a machine name, such as "guthib.com", or a textual representation of its IP address. |
packetSize | number | null | undefined | Value in bytes. If it smaller than zero, the promise result will be returned with PingStatus.INVALID_ARG status. |
ttl | number | null | undefined | time-to-live |
timeout | number | null | undefined | Value in milliseconds. |
UseICMPInterface
| Properties | Type | Remarks |
|---|---|---|
isRunning | boolean | A React state |
result | ICMPResultInterface | undefined | See ICMPResultInterface |
start | (data: UseICMPStartParamsInterface) => void | See UseICMPStartParamsInterface |
stop | () => void | Stop the current running process. It does nothing when there is no processes. |
UseICMPStartParamsInterface
It extends ICMPConstructorDataInterface
| Properties | Type | Remarks |
| ------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| count | number | Count must be larger than 0. Otherwise, the result will be returned with PingStatus.INVALID_ARG status
| interval | number | Value in milliseconds and must be larger than 0 and larger than the timeout. Otherwise, the result will be returned with PingStatus.INVALID_ARG status
| ⦠| ⦠| other props from ICMPConstructorDataInterface
PingStatus
| Member | Value | Remarks |
|---|---|---|
ECHO | 2 | Success |
ECHOING | 1 | When the ping method or start is invoked when the previous process still running |
TIMEDOUT | 0 | |
CANCELLED | -1 | |
UNKNOWN_HOST | -2 | |
INVALID_ARG | -3 | Invalid argument such as illegal packet size, ttl out of range. |
UNKNOWN_FAILURE | -4 |
Android Emulator Limitations
Depending on the environment, the emulator might not be able to support other protocols (such as ICMP, used for "ping"). See Local networking limitations.
Instead, you can use Android physical device and run React Native app in it.
10 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago