Newer
Older
Twilight / src / main / kotlin / net / taehui / twilight / system / PIDClass.kt
@Taehui Taehui on 21 Jun 916 bytes v1.0-SNAPSHOT
package net.taehui.twilight.system

import net.taehui.twilight.Logger
import java.io.IOException
import java.nio.channels.FileChannel
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.StandardOpenOption
import kotlin.system.exitProcess

object PIDClass : Logger {
    private val FILE_PATH: Path = Path.of("Twilight.#")
    private var fc: FileChannel? = null

    fun doHaveIt() {
        try {
            fc = FileChannel.open(
                FILE_PATH, StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.READ
            )
            try {
                fc?.lock()
            } catch (e: IOException) {
                logFault(e)
            }
        } catch (e: IOException) {
            logInfo("Twilight is already running")
            exitProcess(1)
        }
    }

    fun dispose() {
        fc?.close()
        Files.deleteIfExists(FILE_PATH)
    }
}