@@ -26,50 +26,49 @@ open class NetworkDetails {
2626 var callback : ( NetworkStates ) -> Void = { _ in }
2727
2828 var laststate : DataFrame = DataFrame ( )
29- var process : Process = Process ( )
29+ var process : Process ?
3030 private let lock = NSLock ( )
3131
32- init ( ) {
33- self . prepare ( )
34- }
35-
3632 let ColumnName = " name "
3733 let ColumnBytesIn = " bytes_in "
3834 let ColumnBytesOut = " bytes_out "
3935 let ColumnBytesTotal = " bytes_total "
4036 let Columns = [ " " , " bytes_in " , " bytes_out " ]
4137
42- func prepare( ) {
43- process. executableURL = URL . init ( fileURLWithPath: " /usr/bin/nettop " )
38+ func run( refreshSeconds: Int = 1 ) {
39+ stop ( )
40+
41+ let proc = Process ( )
42+ proc. executableURL = URL ( fileURLWithPath: " /usr/bin/nettop " )
43+ proc. arguments = [ " -P " , " -L " , " 0 " , " -s " , " \( refreshSeconds) " ]
44+
4445 let pipe = Pipe ( )
45- process. standardOutput = pipe
46- process. standardError = pipe
47- process. standardInput = Pipe ( )
48- Task {
46+ proc. standardOutput = pipe
47+ proc. standardError = pipe
48+ proc. standardInput = Pipe ( )
49+
50+ Task { [ weak self] in
4951 var data = Data ( )
5052 for try await line in pipe. fileHandleForReading. bytes. lines {
5153 if line. hasPrefix ( " time " ) {
52- self . update ( data: data)
54+ self ? . update ( data: data)
5355 data = Data ( )
5456 }
5557 data. append ( contentsOf: ( line + " \n " ) . utf8)
5658 }
5759 }
58- }
5960
60- func run( refreshSeconds: Int = 1 ) {
61- if process. isRunning {
62- process. terminate ( )
63- }
64- process. arguments = [ " -P " , " -L " , " 0 " , " -s " , " \( refreshSeconds) " ]
65- try ? process. run ( )
66- process. waitUntilExit ( )
61+ self . process = proc
62+ try ? proc. run ( )
63+ proc. waitUntilExit ( )
6764 }
6865
6966 func stop( ) {
70- if process. isRunning {
71- process. terminate ( )
67+ if let proc = process, proc. isRunning {
68+ proc. terminate ( )
69+ proc. waitUntilExit ( )
7270 }
71+ process = nil
7372 }
7473
7574 func update( data: Data ) {
0 commit comments