2
0

JavaPluginScheduler.kt 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright 2019-2020 Mamoe Technologies and contributors.
  3. *
  4. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
  5. * Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 license that can be found through the following link.
  6. *
  7. * https://github.com/mamoe/mirai/blob/master/LICENSE
  8. */
  9. @file:JvmMultifileClass
  10. @file:JvmName("ConsoleUtils")
  11. package net.mamoe.mirai.console.plugin.jvm
  12. import kotlinx.coroutines.CoroutineScope
  13. import kotlinx.coroutines.Runnable
  14. import net.mamoe.mirai.console.internal.util.JavaPluginSchedulerImpl
  15. import java.util.concurrent.Callable
  16. import java.util.concurrent.CompletableFuture
  17. import java.util.concurrent.Future
  18. import kotlin.coroutines.CoroutineContext
  19. import kotlin.coroutines.EmptyCoroutineContext
  20. /**
  21. * 拥有生命周期管理的简单 Java 线程池.
  22. *
  23. * 在插件被 [卸载][JavaPlugin.onDisable] 时将会自动停止.
  24. *
  25. * @see JavaPlugin.scheduler 获取实例
  26. */
  27. public interface JavaPluginScheduler : CoroutineScope {
  28. /**
  29. * 新增一个 Repeating Task (定时任务)
  30. *
  31. * 这个 Runnable 会被每 [intervalMs] 调用一次(不包含 [runnable] 执行时间)
  32. *
  33. * @see Future.cancel 取消这个任务
  34. */
  35. public fun repeating(intervalMs: Long, runnable: Runnable): Future<Void?>
  36. /**
  37. * 新增一个 Delayed Task (延迟任务)
  38. *
  39. * 在延迟 [delayMillis] 后执行 [runnable]
  40. */
  41. public fun delayed(delayMillis: Long, runnable: Runnable): CompletableFuture<Void?>
  42. /**
  43. * 新增一个 Delayed Task (延迟任务)
  44. *
  45. * 在延迟 [delayMillis] 后执行 [callable]
  46. */
  47. public fun <R> delayed(delayMillis: Long, callable: Callable<R>): CompletableFuture<R>
  48. /**
  49. * 异步执行一个任务, 最终返回 [Future], 与 Java 使用方法无异, 但效率更高且可以在插件关闭时停止
  50. */
  51. public fun <R> async(supplier: Callable<R>): Future<R>
  52. /**
  53. * 异步执行一个任务, 没有返回
  54. */
  55. public fun async(runnable: Runnable): Future<Void?>
  56. public companion object {
  57. /**
  58. * 创建一个 [JavaPluginScheduler]
  59. */
  60. @JvmStatic
  61. @JvmName("create")
  62. @JvmOverloads
  63. public operator fun invoke(parentCoroutineContext: CoroutineContext = EmptyCoroutineContext): JavaPluginScheduler =
  64. JavaPluginSchedulerImpl(parentCoroutineContext)
  65. }
  66. }