Files
i2p.i2p/launchers/macosx/I2PLauncher/routermgmt/launchd/LaunchAgent+Status.swift

70 lines
1.6 KiB
Swift
Raw Normal View History

//
// 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)
}
}