@ -4,8 +4,9 @@ import { inject, provideSingleton, Container, ContainerInstance } from '@ccms/co
|
||||
|
||||
import './config'
|
||||
import { interfaces } from './interfaces'
|
||||
import { PluginCommandManager } from './command'
|
||||
import { PluginTaskManager } from './task'
|
||||
import { PluginEventManager } from './event'
|
||||
import { PluginCommandManager } from './command'
|
||||
|
||||
const Thread = Java.type('java.lang.Thread')
|
||||
|
||||
@ -22,10 +23,12 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
@inject(server.ServerChecker)
|
||||
private serverChecker: server.ServerChecker
|
||||
|
||||
@inject(PluginCommandManager)
|
||||
private commandManager: PluginCommandManager
|
||||
@inject(PluginTaskManager)
|
||||
private taskManager: PluginTaskManager
|
||||
@inject(PluginEventManager)
|
||||
private eventManager: PluginEventManager
|
||||
@inject(PluginCommandManager)
|
||||
private commandManager: PluginCommandManager
|
||||
|
||||
private initialized: boolean = false
|
||||
|
||||
@ -43,8 +46,9 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
this.metadataMap = new Map()
|
||||
|
||||
// ignore unused
|
||||
this.commandManager
|
||||
this.taskManager
|
||||
this.eventManager
|
||||
this.commandManager
|
||||
}
|
||||
|
||||
initialize() {
|
||||
@ -131,7 +135,7 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
if (loader.require(loadMetadata).loaded) {
|
||||
loadMetadata.loader = loader
|
||||
let metadata = loadMetadata.metadata
|
||||
if (this.metadataMap.has(metadata.name)) {
|
||||
if (this.metadataMap.has(metadata.name) && this.instanceMap.has(metadata.name)) {
|
||||
let oldMetadata = this.metadataMap.get(metadata.name)
|
||||
throw new Error(`Plugin ${oldMetadata.name} is already load from ${oldMetadata.source}...`)
|
||||
}
|
||||
|
16
packages/plugin/src/task.ts
Normal file
16
packages/plugin/src/task.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { plugin, task } from '@ccms/api'
|
||||
import { provideSingleton, inject } from '@ccms/container'
|
||||
|
||||
@provideSingleton(PluginTaskManager)
|
||||
export class PluginTaskManager {
|
||||
@inject(task.TaskManager)
|
||||
private taskManager: task.TaskManager
|
||||
|
||||
constructor() {
|
||||
process.on('plugin.after.disable', (plugin: plugin.Plugin) => this.cancelTask(plugin))
|
||||
}
|
||||
|
||||
private cancelTask(pluginInstance: plugin.Plugin) {
|
||||
this.taskManager.disable(pluginInstance)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user