pymud 0.19.1__py3-none-any.whl → 0.19.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pymud/__main__.py +10 -1
- pymud/pymud.py +79 -11
- pymud/session.py +607 -169
- pymud/settings.py +3 -2
- pymud/statemachine.py +1525 -0
- {pymud-0.19.1.dist-info → pymud-0.19.2.dist-info}/METADATA +10 -1
- pymud-0.19.2.dist-info/RECORD +17 -0
- {pymud-0.19.1.dist-info → pymud-0.19.2.dist-info}/WHEEL +1 -1
- pymud-0.19.1.dist-info/RECORD +0 -16
- {pymud-0.19.1.dist-info → pymud-0.19.2.dist-info}/LICENSE.txt +0 -0
- {pymud-0.19.1.dist-info → pymud-0.19.2.dist-info}/entry_points.txt +0 -0
- {pymud-0.19.1.dist-info → pymud-0.19.2.dist-info}/top_level.txt +0 -0
pymud/__main__.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import sys, os, json, platform, shutil
|
1
|
+
import sys, os, json, platform, shutil, logging
|
2
2
|
from .pymud import main
|
3
3
|
from .settings import Settings
|
4
4
|
|
@@ -81,6 +81,15 @@ if __name__ == "__main__":
|
|
81
81
|
|
82
82
|
input('所有内容已初始化完毕, 请按回车进入PyMUD.')
|
83
83
|
|
84
|
+
if (len(args) == 2) and (args[1] == "withlog"):
|
85
|
+
# 指定带log时,打印log信息
|
86
|
+
# 所有级别log都存入文件
|
87
|
+
logging.basicConfig(level=logging.NOTSET,
|
88
|
+
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
|
89
|
+
datefmt='%m-%d %H:%M',
|
90
|
+
filename='myapp.log',
|
91
|
+
filemode='a')
|
92
|
+
|
84
93
|
cfg = "pymud.cfg"
|
85
94
|
if os.path.exists(cfg):
|
86
95
|
with open(cfg, "r", encoding="utf8", errors="ignore") as fp:
|
pymud/pymud.py
CHANGED
@@ -49,7 +49,30 @@ class STATUS_DISPLAY(Enum):
|
|
49
49
|
FLOAT = 3
|
50
50
|
|
51
51
|
class PyMudApp:
|
52
|
+
"""
|
53
|
+
PYMUD程序管理主对象,对窗体、操作及所有会话进行管理。
|
54
|
+
|
55
|
+
PyMudApp对象不需要手动创建,在命令行中执行 ``python -m pymud`` 时会自动创建对象实例。
|
56
|
+
|
57
|
+
构造函数参数:
|
58
|
+
- ``cfg_data``: 替代配置数据,由本地pymud.cfg文件读取,用于覆盖settings.py中的默认Settings数据
|
59
|
+
|
60
|
+
可替代字典: 含义请查阅 `应用配置及本地化 <settings.html>`_
|
61
|
+
- sessions: 用于创建菜单栏会话的字典
|
62
|
+
- client: 用于配置客户端属性的字典
|
63
|
+
- text: 用于各默认显示文字内容的字典
|
64
|
+
- server: 用于服务器选项的配置字典
|
65
|
+
- styles: 用于显示样式的定义字典
|
66
|
+
- keys: 用于快捷键定义的字典
|
67
|
+
|
68
|
+
*替代配置按不同的dict使用dict.update进行更新覆盖,因此可以仅指定需替代的部分。*
|
69
|
+
"""
|
70
|
+
|
52
71
|
def __init__(self, cfg_data = None) -> None:
|
72
|
+
"""
|
73
|
+
构造PyMudApp对象实例,并加载替代配置。
|
74
|
+
"""
|
75
|
+
|
53
76
|
if cfg_data and isinstance(cfg_data, dict):
|
54
77
|
for key in cfg_data.keys():
|
55
78
|
if key == "sessions":
|
@@ -283,6 +306,11 @@ class PyMudApp:
|
|
283
306
|
children=[
|
284
307
|
MenuItem(Settings.text["about"], handler = self.act_about)
|
285
308
|
]
|
309
|
+
),
|
310
|
+
|
311
|
+
MenuItem(
|
312
|
+
"", # 增加一个空名称MenuItem,阻止右侧空白栏点击响应
|
313
|
+
children=[]
|
286
314
|
)
|
287
315
|
],
|
288
316
|
floats=[
|
@@ -350,11 +378,13 @@ class PyMudApp:
|
|
350
378
|
b.cursor_down(lines)
|
351
379
|
|
352
380
|
def page_up(self, event: KeyPressEvent) -> None:
|
353
|
-
lines = (self.app.output.get_size().rows - 5) // 2 - 1
|
381
|
+
#lines = (self.app.output.get_size().rows - 5) // 2 - 1
|
382
|
+
lines = self.get_height() // 2 - 1
|
354
383
|
self.scroll(-1 * lines)
|
355
384
|
|
356
385
|
def page_down(self, event: KeyPressEvent) -> None:
|
357
|
-
lines = (self.app.output.get_size().rows - 5) // 2 - 1
|
386
|
+
#lines = (self.app.output.get_size().rows - 5) // 2 - 1
|
387
|
+
lines = self.get_height() // 2 - 1
|
358
388
|
self.scroll(lines)
|
359
389
|
|
360
390
|
def custom_key_press(self, event: KeyPressEvent):
|
@@ -483,6 +513,10 @@ class PyMudApp:
|
|
483
513
|
self.sessions[name] = session
|
484
514
|
self.activate_session(name)
|
485
515
|
|
516
|
+
for plugin in self._plugins.values():
|
517
|
+
if isinstance(plugin, Plugin):
|
518
|
+
plugin.onSessionCreate(session)
|
519
|
+
|
486
520
|
result = True
|
487
521
|
else:
|
488
522
|
self.set_status(f"错误!已存在一个名为{name}的会话,请更换名称再试.")
|
@@ -508,12 +542,17 @@ class PyMudApp:
|
|
508
542
|
result = await self.show_dialog_as_float(dlgQuery)
|
509
543
|
if result:
|
510
544
|
self.current_session.disconnect()
|
545
|
+
|
546
|
+
# 增加延时等待确保会话关闭
|
547
|
+
while self.current_session.connected:
|
548
|
+
await asyncio.sleep(0.1)
|
549
|
+
|
511
550
|
else:
|
512
551
|
return
|
513
552
|
|
514
553
|
for plugin in self._plugins.values():
|
515
554
|
if isinstance(plugin, Plugin):
|
516
|
-
plugin.
|
555
|
+
plugin.onSessionDestroy(self.current_session)
|
517
556
|
|
518
557
|
name = self.current_session.name
|
519
558
|
self.current_session.clean()
|
@@ -611,6 +650,11 @@ class PyMudApp:
|
|
611
650
|
result = await self.show_dialog_as_float(dlgQuery)
|
612
651
|
if result:
|
613
652
|
session.disconnect()
|
653
|
+
|
654
|
+
# 增加延时等待确保会话关闭
|
655
|
+
while session.connected:
|
656
|
+
await asyncio.sleep(0.1)
|
657
|
+
|
614
658
|
else:
|
615
659
|
return
|
616
660
|
|
@@ -706,13 +750,38 @@ class PyMudApp:
|
|
706
750
|
self.app.invalidate()
|
707
751
|
|
708
752
|
def handle_session(self, *args):
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
753
|
+
'''
|
754
|
+
嵌入命令 #session 的执行函数,创建一个远程连接会话。
|
755
|
+
该函数不应该在代码中直接调用。
|
756
|
+
|
757
|
+
使用:
|
758
|
+
- #session {Name} {Host} {Port} {Encoding}
|
759
|
+
- 当不指定 Encoding: 时, 默认使用utf-8编码
|
760
|
+
- 可以直接使用 #{名称} 切换会话和操作会话命令
|
761
|
+
|
762
|
+
参数:
|
763
|
+
:Name: 会话名称
|
764
|
+
:Host: 服务器域名或IP地址
|
765
|
+
:Port: 端口号
|
766
|
+
:Encoding: 编码格式,不指定时默认为 utf8
|
767
|
+
|
768
|
+
示例:
|
769
|
+
``#session {名称} {宿主机} {端口} {编码}``
|
770
|
+
创建一个远程连接会话,使用指定编码格式连接到远程宿主机的指定端口并保存为 {名称} 。其中,编码可以省略,此时使用Settings.server["default_encoding"]的值,默认为utf8
|
771
|
+
``#session newstart mud.pkuxkx.net 8080 GBK``
|
772
|
+
使用GBK编码连接到mud.pkuxkx.net的8080端口,并将该会话命名为newstart
|
773
|
+
``#session newstart mud.pkuxkx.net 8081``
|
774
|
+
使用UTF8编码连接到mud.pkuxkx.net的8081端口,并将该会话命名为newstart
|
775
|
+
``#newstart``
|
776
|
+
将名称为newstart的会话切换为当前会话
|
777
|
+
``#newstart give miui gold``
|
778
|
+
使名称为newstart的会话执行give miui gold指令,但不切换到该会话
|
779
|
+
|
780
|
+
相关命令:
|
781
|
+
- #close
|
782
|
+
- #exit
|
783
|
+
|
784
|
+
'''
|
716
785
|
|
717
786
|
nothandle = True
|
718
787
|
|
@@ -894,7 +963,6 @@ class PyMudApp:
|
|
894
963
|
|
895
964
|
|
896
965
|
def main(cfg_data = None):
|
897
|
-
logging.disable()
|
898
966
|
app = PyMudApp(cfg_data)
|
899
967
|
app.run()
|
900
968
|
|