164 lines
5.9 KiB
Python
164 lines
5.9 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
||
|
|
from mod.common.mod import Mod
|
||
|
|
import mod.server.extraServerApi as serverApi
|
||
|
|
import mod.client.extraClientApi as clientApi
|
||
|
|
from .Util import TRY_EXEC_FUN
|
||
|
|
from . import IN
|
||
|
|
|
||
|
|
class _TempData:
|
||
|
|
""" modMain临时数据储存 包含了初始化注册的一些信息 """
|
||
|
|
_nativePyServer = []
|
||
|
|
_nativePyClient = []
|
||
|
|
_serverInitCall = []
|
||
|
|
_clientInitCall = []
|
||
|
|
_threadAnalysis = False
|
||
|
|
|
||
|
|
@Mod.Binding(name = "QuMod_"+IN.ModDirName, version = "1.0.0")
|
||
|
|
class QMain(object):
|
||
|
|
""" QuMod MAIN入口逻辑 """
|
||
|
|
def __init__(self):
|
||
|
|
pass
|
||
|
|
|
||
|
|
@Mod.InitServer()
|
||
|
|
def serverInit(self):
|
||
|
|
# 服务端初始化
|
||
|
|
IN.IsServerUser = True
|
||
|
|
self._regNativePyServer()
|
||
|
|
self._loadServerInitFuncs()
|
||
|
|
if _TempData._threadAnalysis:
|
||
|
|
from threading import current_thread
|
||
|
|
IN.RuntimeService._serverThreadID = current_thread().ident
|
||
|
|
if IN.RuntimeService._serverSystemList or IN.RuntimeService._serverLoadBefore:
|
||
|
|
from .Systems.Loader.Server import LoaderSystem
|
||
|
|
LoaderSystem.getSystem() # 初始化服务端加载器
|
||
|
|
|
||
|
|
@Mod.InitClient()
|
||
|
|
def clientInit(self):
|
||
|
|
IN.RuntimeService._envPlayerId = clientApi.GetLocalPlayerId()
|
||
|
|
self._regNativePyClient()
|
||
|
|
self._loadClientInitFuncs()
|
||
|
|
if _TempData._threadAnalysis:
|
||
|
|
from threading import current_thread
|
||
|
|
IN.RuntimeService._clientThreadID = current_thread().ident
|
||
|
|
if IN.RuntimeService._clientSystemList or IN.RuntimeService._clientLoadBefore:
|
||
|
|
from .Systems.Loader.Client import LoaderSystem
|
||
|
|
LoaderSystem.getSystem() # 初始化客户端加载器
|
||
|
|
|
||
|
|
def _regNativePyClient(self):
|
||
|
|
""" 加载原版Python客户端系统注册 """
|
||
|
|
for args in _TempData._nativePyClient:
|
||
|
|
clientApi.RegisterSystem(*args)
|
||
|
|
_TempData._nativePyClient = []
|
||
|
|
|
||
|
|
def _regNativePyServer(self):
|
||
|
|
""" 加载原版Python服务端系统注册 """
|
||
|
|
for args in _TempData._nativePyServer:
|
||
|
|
serverApi.RegisterSystem(*args)
|
||
|
|
_TempData._nativePyServer = []
|
||
|
|
|
||
|
|
def _loadServerInitFuncs(self):
|
||
|
|
""" 加载服务端初始化函数 """
|
||
|
|
for funObj in _TempData._serverInitCall:
|
||
|
|
TRY_EXEC_FUN(funObj)
|
||
|
|
_TempData._serverInitCall = []
|
||
|
|
|
||
|
|
def _loadClientInitFuncs(self):
|
||
|
|
""" 加载客户端初始化函数 """
|
||
|
|
for funObj in _TempData._clientInitCall:
|
||
|
|
TRY_EXEC_FUN(funObj)
|
||
|
|
_TempData._clientInitCall = []
|
||
|
|
|
||
|
|
@Mod.DestroyServer()
|
||
|
|
def serverDestroy(self):
|
||
|
|
pass
|
||
|
|
|
||
|
|
@Mod.DestroyClient()
|
||
|
|
def clientDestroy(self):
|
||
|
|
pass
|
||
|
|
|
||
|
|
class EasyMod:
|
||
|
|
""" 简易Mod构造器 """
|
||
|
|
def __init__(self, modDirName=None):
|
||
|
|
# type: (str | None) -> None
|
||
|
|
self._modDirName = modDirName if modDirName else IN.ModDirName
|
||
|
|
""" Mod目录名 """
|
||
|
|
|
||
|
|
def regServer(self, relPath="", systemName=None):
|
||
|
|
# type: (str, str | None) -> EasyMod
|
||
|
|
""" 注册服务端(相对目录) """
|
||
|
|
REG_SERVER_MODULE("{}.{}".format(self._modDirName, relPath), systemName)
|
||
|
|
return self
|
||
|
|
|
||
|
|
def Server(self, relPath="", systemName=None):
|
||
|
|
# type: (str, str | None) -> EasyMod
|
||
|
|
""" 便捷式服务端注册 """
|
||
|
|
return self.regServer(relPath, systemName)
|
||
|
|
|
||
|
|
def Client(self, relPath="", systemName=None):
|
||
|
|
# type: (str, str | None) -> EasyMod
|
||
|
|
""" 便捷式客户端注册 """
|
||
|
|
return self.regClient(relPath, systemName)
|
||
|
|
|
||
|
|
def regClient(self, relPath="", systemName=None):
|
||
|
|
# type: (str, str | None) -> EasyMod
|
||
|
|
""" 注册客户端(相对目录) """
|
||
|
|
REG_CLIENT_MODULE("{}.{}".format(self._modDirName, relPath), systemName)
|
||
|
|
return self
|
||
|
|
|
||
|
|
def addServerInitCallFunc(self, callFunc=lambda: None):
|
||
|
|
# type: (object) -> EasyMod
|
||
|
|
""" 添加服务端初始化调用方法 """
|
||
|
|
REG_SERVER_INIT_CALL(callFunc)
|
||
|
|
return self
|
||
|
|
|
||
|
|
def addClientInitCallFunc(self, callFunc=lambda: None):
|
||
|
|
# type: (object) -> EasyMod
|
||
|
|
""" 添加客户端初始化调用方法 """
|
||
|
|
REG_CLIENT_INIT_CALL(callFunc)
|
||
|
|
return self
|
||
|
|
|
||
|
|
def START_THREAD_ANALYSIS():
|
||
|
|
""" 启用线程分析 """
|
||
|
|
_TempData._threadAnalysis = True
|
||
|
|
|
||
|
|
def STOP_THREAD_ANALYSIS():
|
||
|
|
""" 禁用线程分析 """
|
||
|
|
_TempData._threadAnalysis = False
|
||
|
|
|
||
|
|
def REG_SERVER_MODULE(absPath, systemName=None, _index=-1):
|
||
|
|
# type: (str, str | None, int) -> None
|
||
|
|
""" 注册服务端模块 (绝对路径) """
|
||
|
|
if _index < 0:
|
||
|
|
return IN.RuntimeService._serverSystemList.append((absPath, systemName))
|
||
|
|
return IN.RuntimeService._serverSystemList.insert(_index, (absPath, systemName))
|
||
|
|
|
||
|
|
def REG_CLIENT_MODULE(absPath, systemName=None, _index=-1):
|
||
|
|
# type: (str, str | None, int) -> None
|
||
|
|
""" 注册客户端模块 (绝对路径) """
|
||
|
|
if _index < 0:
|
||
|
|
return IN.RuntimeService._clientSystemList.append((absPath, systemName))
|
||
|
|
return IN.RuntimeService._clientSystemList.insert(_index, (absPath, systemName))
|
||
|
|
|
||
|
|
def REG_SERVER_INIT_CALL(func=lambda: None):
|
||
|
|
# type: (function) -> function
|
||
|
|
""" 注册服务端初始化调用函数 """
|
||
|
|
_TempData._serverInitCall.append(func)
|
||
|
|
return func
|
||
|
|
|
||
|
|
def REG_CLIENT_INIT_CALL(func=lambda: None):
|
||
|
|
# type: (function) -> function
|
||
|
|
""" 注册客户端初始化调用函数 """
|
||
|
|
_TempData._clientInitCall.append(func)
|
||
|
|
return func
|
||
|
|
|
||
|
|
def PRE_SERVER_LOADER_HOOK(func=lambda: None):
|
||
|
|
# type: (function) -> function
|
||
|
|
""" 注册服务端加载器处理前的前置逻辑 (此时依然可以注册文件 该功能用于前置关联的校验处理) """
|
||
|
|
IN.RuntimeService._serverLoadBefore.append(func)
|
||
|
|
return func
|
||
|
|
|
||
|
|
def PRE_CLIENT_LOADER_HOOK(func=lambda: None):
|
||
|
|
# type: (function) -> function
|
||
|
|
""" 注册客户端加载器处理前的前置逻辑 (此时依然可以注册文件 该功能用于前置关联的校验处理) """
|
||
|
|
IN.RuntimeService._clientLoadBefore.append(func)
|
||
|
|
return func
|