forked from I2P_Developers/i2p.i2p
70 lines
1.6 KiB
Swift
70 lines
1.6 KiB
Swift
//
|
|
// LaunchAgent+Status.swift
|
|
// I2PLauncher
|
|
//
|
|
// Created by Mikal Villa on 05/10/2018.
|
|
// Copyright © 2018 The I2P Project. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public enum AgentStatus: Equatable {
|
|
|
|
case running(pid: Int)
|
|
case loaded
|
|
case unloaded
|
|
|
|
public static func ==(lhs: AgentStatus, rhs: AgentStatus) -> Bool {
|
|
switch (lhs, rhs) {
|
|
case ( let .running(lhpid), let .running(rhpid) ):
|
|
return lhpid == rhpid
|
|
case (.loaded, .loaded):
|
|
return true
|
|
case (.unloaded, .unloaded):
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension LaunchAgent {
|
|
|
|
/// Run `launchctl start` on the agent
|
|
///
|
|
/// Check the status of the job with `.status()`
|
|
public func start(_ callback: ((Process) -> Void)? = nil ) {
|
|
LaunchAgentManager.shared.start(self, callback)
|
|
}
|
|
|
|
/// Run `launchctl stop` on the agent
|
|
///
|
|
/// Check the status of the job with `.status()`
|
|
public func stop(_ callback: ((Process) -> Void)? = nil ) {
|
|
LaunchAgentManager.shared.stop(self, callback)
|
|
}
|
|
|
|
/// Run `launchctl load` on the agent
|
|
///
|
|
/// Check the status of the job with `.status()`
|
|
public func load() throws {
|
|
try LaunchAgentManager.shared.load(self)
|
|
}
|
|
|
|
/// Run `launchctl unload` on the agent
|
|
///
|
|
/// Check the status of the job with `.status()`
|
|
public func unload() throws {
|
|
try LaunchAgentManager.shared.unload(self)
|
|
}
|
|
|
|
/// Retreives the status of the LaunchAgent from `launchctl`
|
|
///
|
|
/// - Returns: the agent's status
|
|
public func status() -> AgentStatus {
|
|
return LaunchAgentManager.shared.status(self)
|
|
}
|
|
|
|
}
|