feat: optimize framework & support depends check

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
2020-10-13 09:24:58 +08:00
parent c172bcfad7
commit 85f2bd5a10
16 changed files with 173 additions and 128 deletions

View File

@ -1,6 +1,6 @@
import i18n from '@ccms/i18n'
import { injectable } from "@ccms/container"
import { plugin } from './interfaces'
import { plugin } from './plugin'
export namespace command {
@injectable()

View File

@ -1,4 +1,14 @@
export namespace constants {
export namespace ServiceIdentifier {
/**
* Runtime Server NettyPipeline
*/
export const NettyPipeline = Symbol("NettyPipeline")
/**
* Runtime Server RootLogger
*/
export const RootLogger = Symbol("RootLogger")
}
export namespace Reflect {
export const Method = {
getServerConnection: [/*spigot 1.8.8*/'aq',/*spigot 1.12.2*/ 'an', /*spigot 1.14.4+*/'getServerConnection', /*catserver 1.12.2*/'func_147137_ag']

View File

@ -1,11 +1,15 @@
import "@ccms/nashorn"
export * from './web'
export * from './amqp'
export * from './chat'
export * from './task'
export * from './event'
export * from './proxy'
export * from './plugin'
export * from './server'
export * from './console'
export * from './channel'
export * from './command'
export * from './database'
export * from './constants'
export * from './interfaces'

View File

@ -1,5 +0,0 @@
export * from './web'
export * from './amqp'
export * from './plugin'
export * from './server'
export * from './database'

View File

@ -1,6 +0,0 @@
export interface NativePluginManager {
load(name: string): boolean;
unload(name: string): boolean;
reload(name: string): boolean;
delete(name: string): boolean;
}

View File

@ -78,7 +78,7 @@ export namespace plugin {
scan(target: any): PluginLoadMetadata[]
/**
*
* @param target
* @param target
*/
read(target: any): PluginLoadMetadata
/**
@ -162,6 +162,14 @@ export namespace plugin {
* Unknow
*/
author?: string | string[]
/**
*
*/
depends?: string[]
/**
*
*/
nativeDepends?: string[]
/**
* __filename
*/

View File

@ -1,10 +1,7 @@
import * as reflect from '@ccms/common/dist/reflect'
import { injectable, inject } from '@ccms/container'
import { injectable, Autowired, ContainerInstance, Container, postConstruct } from '@ccms/container'
import { NativePluginManager } from './native_plugin'
import { constants } from '../../constants'
export { NativePluginManager } from './native_plugin'
import { constants } from './constants'
export namespace server {
/**
@ -19,6 +16,24 @@ export namespace server {
* Runtime Server Instance
*/
export const ServerInstance = Symbol("ServerInstance")
@injectable()
export abstract class NativePluginManager {
has(name: string): boolean {
return true
}
load(name: string): boolean {
throw new Error("Method not implemented.")
}
unload(name: string): boolean {
throw new Error("Method not implemented.")
}
reload(name: string): boolean {
throw new Error("Method not implemented.")
}
delete(name: string): boolean {
throw new Error("Method not implemented.")
}
}
/**
* MiaoScript Server
*/
@ -48,9 +63,6 @@ export namespace server {
getPluginsFolder(): string {
throw new Error("Method not implemented.")
}
getNativePluginManager(): NativePluginManager {
throw new Error("Method not implemented.")
}
getDedicatedServer?(): any {
throw new Error("Method not implemented.")
}
@ -63,8 +75,9 @@ export namespace server {
}
@injectable()
export class ServerChecker {
@inject(ServerType)
@Autowired(ServerType)
private serverType: string
check(servers: string[]) {
// Not set servers -> allow
if (!servers || !servers.length) return true
@ -80,14 +93,17 @@ export namespace server {
}
@injectable()
export abstract class ReflectServer extends server.Server {
@Autowired(ContainerInstance)
private container: Container
protected pipeline: any
protected rootLogger: any
constructor() {
super()
this.reflect()
}
@postConstruct()
protected reflect() {
try {
let consoleServer = this.getDedicatedServer()
@ -107,7 +123,11 @@ export namespace server {
if (connection.class.name.indexOf('ServerConnection') !== -1
|| connection.class.name.indexOf('NetworkSystem') !== -1) { break }
connection = undefined
} catch (error) { }
} catch (error) {
if (global.debug) {
console.ex(error)
}
}
}
if (!connection) { console.error("Can't found ServerConnection!"); return }
for (const field of constants.Reflect.Field.listeningChannels) {
@ -115,16 +135,30 @@ export namespace server {
promise = reflect.on(connection).get(field).get().get(0)
if (promise.class.name.indexOf('Promise') !== -1) { break }
promise = undefined
} catch (error) { }
} catch (error) {
if (global.debug) {
console.ex(error)
}
}
}
if (!promise) { console.error("Can't found listeningChannels!"); return }
this.pipeline = reflect.on(promise).get('channel').get().pipeline()
this.container.bind(constants.ServiceIdentifier.NettyPipeline).toConstantValue(this.pipeline)
}
protected reflectRootLogger(consoleServer: any) {
try {
this.rootLogger = reflect.on(consoleServer).get('LOGGER').get().parent
} catch (error) {
try { this.rootLogger = reflect.on(consoleServer).get(0).get().parent } catch (error) { }
if (global.debug) {
console.ex(error)
}
try {
this.rootLogger = reflect.on(consoleServer).get(0).get().parent
} catch (error) {
if (global.debug) {
console.ex(error)
}
}
}
if (this.rootLogger && this.rootLogger.class.name.indexOf('Logger') === -1) {
console.error('Error Logger Class: ' + this.rootLogger.class.name)
@ -135,6 +169,7 @@ export namespace server {
this.rootLogger = this.rootLogger.parent
}
if (!this.rootLogger) { console.error("Can't found rootLogger!") }
this.container.bind(constants.ServiceIdentifier.RootLogger).toConstantValue(this.rootLogger)
}
}
}