Skip to content

Commit 90bb02b

Browse files
authored
Merge pull request #9 from osociety/dev
Prepare release v1.0.1
2 parents e007efd + 6ce3d83 commit 90bb02b

File tree

11 files changed

+224
-39
lines changed

11 files changed

+224
-39
lines changed

.github/workflows/flutter.yml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
name: Flutter
77

88
on:
9-
push:
10-
branches: ["main"]
119
pull_request:
1210
branches: ["main", "dev"]
1311

@@ -70,6 +68,15 @@ jobs:
7068

7169
- name: Run analyzer
7270
run: flutter analyze
71+
72+
- name: Install coverage tools
73+
run: flutter pub global activate coverage
7374

7475
- name: Run tests
75-
run: flutter test
76+
run: flutter test --coverage
77+
78+
- name: Upload Coverage to CodeCov
79+
uses: codecov/codecov-action@v3
80+
with:
81+
token: ${{secrets.CODECOV_TOKEN}}
82+
file: coverage/lcov.info

.github/workflows/publish.yml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,7 @@ jobs:
6161
run: flutter pub global activate coverage
6262

6363
- name: Run tests
64-
run: flutter test --coverage-path="coverage"
65-
66-
- name: Format Coverage
67-
run: $HOME/.pub-cache/bin/format_coverage --lcov --in=coverage --out=coverage/coverage.lcov --report-on=lib
64+
run: flutter test --coverage
6865

6966
- name: Setup Pub Credentials
7067
shell: bash
@@ -86,4 +83,4 @@ jobs:
8683
uses: codecov/codecov-action@v3
8784
with:
8885
token: ${{secrets.CODECOV_TOKEN}}
89-
file: ./coverage/coverage.lcov
86+
file: coverage/lcov.info

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Change Log
22

3+
## 1.0.1
4+
5+
* Bug fixes and improvements, add more tests for coverage
6+
37
## 1.0.0
48

59
* Initial support added for ping_ios_dart in network_tools

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Network Tools Flutter
22

3-
[![pub package](https://img.shields.io/pub/v/network_tools_flutter.svg)](https://pub.dev/packages/network_tools_flutter) [![Dart](https://github.com/osociety/network_tools_flutter/actions/workflows/flutter.yml/badge.svg)](https://github.com/osociety/network_tools_flutter/actions/workflows/flutter.yml) [![codecov](https://codecov.io/gh/git-elliot/network_tools_flutter/branch/main/graph/badge.svg?token=J9G2472GQZ)](https://codecov.io/gh/git-elliot/network_tools_flutter)
3+
[![pub package](https://img.shields.io/pub/v/network_tools_flutter.svg)](https://pub.dev/packages/network_tools_flutter) [![Dart](https://github.com/osociety/network_tools_flutter/actions/workflows/flutter.yml/badge.svg)](https://github.com/osociety/network_tools_flutter/actions/workflows/flutter.yml) [![codecov](https://codecov.io/gh/osociety/network_tools_flutter/graph/badge.svg?token=X8UVO7RUA4)](https://codecov.io/gh/osociety/network_tools_flutter)
44

55
## Features
66

example/main.dart

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import 'package:logging/logging.dart';
2+
import 'package:network_tools/network_tools.dart';
3+
import 'package:network_tools_flutter/network_tools_flutter.dart';
4+
5+
void main() {
6+
// Logger.root.level = Level.FINE;
7+
// Logger.root.onRecord.listen((record) {
8+
// print(
9+
// '${DateFormat.Hms().format(record.time)}: ${record.level.name}: ${record.loggerName}: ${record.message}',
10+
// );
11+
// });
12+
final log = Logger("host_scan_example");
13+
14+
const String address = '192.168.1.1';
15+
// or You can also get address using network_info_plus package
16+
// final String? address = await (NetworkInfo().getWifiIP());
17+
final String subnet = address.substring(0, address.lastIndexOf('.'));
18+
19+
// You can set [firstHostId] and scan will start from this host in the network.
20+
// Similarly set [lastHostId] and scan will end at this host in the network.
21+
final stream = HostScannerFlutter.getAllPingableDevices(
22+
subnet,
23+
// firstHostId: 1,
24+
// lastHostId: 254,
25+
progressCallback: (progress) {
26+
log.finer('Progress for host discovery : $progress');
27+
},
28+
);
29+
30+
stream.listen(
31+
(ActiveHost host) async {
32+
//Same host can be emitted multiple times
33+
//Use Set<ActiveHost> instead of List<ActiveHost>
34+
log.fine('Found device: ${await host.toStringFull()}');
35+
},
36+
onDone: () {
37+
log.fine('Scan completed');
38+
},
39+
); // Don't forget to cancel the stream when not in use.
40+
}

lib/network_tools_flutter.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
library network_tools_flutter;
22

33
export 'src/host_scanner_flutter.dart';
4-
export 'src/port_scanner_flutter.dart';
4+
export 'src/port_scanner_flutter.dart';

lib/src/host_scanner_flutter.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,18 @@ class HostScannerFlutter {
3434
final receivePort = ReceivePort();
3535
dynamic isolate;
3636

37-
if(Platform.isAndroid || Platform.isIOS){
37+
if (Platform.isAndroid || Platform.isIOS) {
3838
// Flutter isolate is not implemented for other platforms than these two
39-
isolate = await FlutterIsolate.spawn(
39+
isolate = await FlutterIsolate.spawn(
4040
HostScannerFlutter._startSearchingDevices, receivePort.sendPort);
4141
} else {
4242
isolate = await Isolate.spawn(
4343
HostScannerFlutter._startSearchingDevices, receivePort.sendPort);
4444
}
45-
45+
4646
await for (final message in receivePort.asBroadcastStream()) {
4747
if (message is SendPort) {
48-
message.send([
48+
message.send(<String>[
4949
subnet,
5050
i.toString(),
5151
limit.toString(),

lib/src/port_scanner_flutter.dart

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ import 'package:network_tools/network_tools.dart';
55

66
/// Flutter flavor of PortScanner, only use if your project is based of flutter.
77
class PortScannerFlutter {
8-
98
/// Checks if the single [port] is open or not for the [target].
109
static Future<ActiveHost?> isOpen(
1110
String target,
1211
int port, {
1312
Duration timeout = const Duration(milliseconds: 2000),
14-
}){
13+
}) {
1514
DartPingIOS.register();
16-
return PortScanner.isOpen(target, port);
15+
return PortScanner.isOpen(target, port, timeout: timeout);
1716
}
1817

1918
/// Scans ports only listed in [portList] for a [target]. Progress can be
@@ -29,7 +28,11 @@ class PortScannerFlutter {
2928
bool resultsInAddressAscendingOrder = true,
3029
}) {
3130
DartPingIOS.register();
32-
return PortScanner.customDiscover(target);
31+
return PortScanner.customDiscover(target,
32+
portList: portList,
33+
progressCallback: progressCallback,
34+
timeout: timeout,
35+
resultsInAddressAscendingOrder: resultsInAddressAscendingOrder);
3336
}
3437

3538
/// Scans port from [startPort] to [endPort] of [target]. Progress can be
@@ -42,9 +45,14 @@ class PortScannerFlutter {
4245
ProgressCallback? progressCallback,
4346
Duration timeout = const Duration(milliseconds: 2000),
4447
bool resultsInAddressAscendingOrder = true,
45-
}){
48+
}) {
4649
DartPingIOS.register();
47-
return PortScanner.scanPortsForSingleDevice(target);
50+
return PortScanner.scanPortsForSingleDevice(target,
51+
startPort: startPort,
52+
endPort: endPort,
53+
progressCallback: progressCallback,
54+
timeout: timeout,
55+
resultsInAddressAscendingOrder: resultsInAddressAscendingOrder);
4856
}
4957

5058
static Future<ActiveHost?> connectToPort({
@@ -55,7 +63,10 @@ class PortScannerFlutter {
5563
int recursionCount = 0,
5664
}) async {
5765
DartPingIOS.register();
58-
return PortScanner.connectToPort(address: address, port: port, timeout: timeout,
59-
activeHostsController: activeHostsController);
66+
return PortScanner.connectToPort(
67+
address: address,
68+
port: port,
69+
timeout: timeout,
70+
activeHostsController: activeHostsController);
6071
}
61-
}
72+
}

pubspec.yaml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
name: network_tools_flutter
2-
description: Extended features of network_tools for flutter framework.
3-
version: 1.0.0
2+
description: Extended features of network_tools package for flutter framework supporting iOS and Android
3+
version: 1.0.1
44
issue_tracker: https://github.com/osociety/network_tools_flutter/issues
5-
repository: https://github.com/osociety/network_tools_flutter.git
5+
repository: https://github.com/osociety/network_tools_flutter
66

77
environment:
88
sdk: ">=2.17.6 <4.0.0"
@@ -11,12 +11,17 @@ environment:
1111
dependencies:
1212
flutter:
1313
sdk: flutter
14-
network_tools: ^3.2.2
14+
1515
# Multi-platform network ping utility.
16-
dart_ping: ^8.0.1
17-
dart_ping_ios: ^3.0.0
18-
universal_io: ^2.2.0
16+
dart_ping: ^9.0.0
17+
dart_ping_ios: ^4.0.0
1918
flutter_isolate: ^2.0.4
19+
# Debugging and error logging.
20+
logging: ^1.2.0
21+
# Deal with internationalized/localized messages and more.
22+
intl: ^0.18.0
23+
network_tools: ^3.2.2
24+
universal_io: ^2.2.0
2025

2126
dev_dependencies:
2227
flutter_test:

test/host_scan_flutter_test.dart

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1+
import 'package:logging/logging.dart';
12
import 'package:network_tools/network_tools.dart';
23
import 'package:flutter_test/flutter_test.dart';
34
import 'package:network_tools_flutter/network_tools_flutter.dart';
45
import 'package:universal_io/io.dart';
56

67
void main() {
8+
final log = Logger("host_scan_test");
79
TestWidgetsFlutterBinding.ensureInitialized();
810
int port = 0;
9-
int hostId = 0;
11+
int firstHostId = 0;
12+
int lastHostId = 0;
1013
String myOwnHost = "0.0.0.0";
1114
String interfaceIp = myOwnHost.substring(0, myOwnHost.lastIndexOf('.'));
1215
late ServerSocket server;
@@ -28,8 +31,15 @@ void main() {
2831
.address; //gives IP address of GHA local machine.
2932
myOwnHost = address;
3033
interfaceIp = address.substring(0, address.lastIndexOf('.'));
31-
hostId = int.parse(
32-
address.substring(address.lastIndexOf('.') + 1, address.length));
34+
final hostId = int.parse(
35+
address.substring(address.lastIndexOf('.') + 1, address.length),
36+
);
37+
// Better to restrict to scan from hostId - 1 to hostId + 1 to prevent GHA timeouts
38+
firstHostId = hostId <= 1 ? hostId : hostId - 1;
39+
lastHostId = hostId >= 254 ? hostId : hostId + 1;
40+
log.fine(
41+
'Fetched own host as $myOwnHost and interface address as $interfaceIp',
42+
);
3343
}
3444
}
3545
});
@@ -40,9 +50,8 @@ void main() {
4050
//There should be at least one device pingable in network
4151
HostScannerFlutter.getAllPingableDevices(
4252
interfaceIp,
43-
// Better to restrict to scan from hostId - 1 to hostId + 1 to prevent GHA timeouts
44-
firstHostId: hostId - 1,
45-
lastHostId: hostId + 1,
53+
firstHostId: firstHostId,
54+
lastHostId: lastHostId,
4655
),
4756
emits(isA<ActiveHost>()),
4857
);
@@ -52,9 +61,8 @@ void main() {
5261
//Should emit at least our own local machine when pinging all hosts.
5362
HostScannerFlutter.getAllPingableDevices(
5463
interfaceIp,
55-
// Better to restrict to scan from hostId - 1 to hostId + 1 to prevent GHA timeouts
56-
firstHostId: hostId - 1,
57-
lastHostId: hostId + 1,
64+
firstHostId: firstHostId,
65+
lastHostId: lastHostId,
5866
),
5967
emitsThrough(ActiveHost(internetAddress: InternetAddress(myOwnHost))),
6068
);

0 commit comments

Comments
 (0)