pymud 0.19.1__py3-none-any.whl → 0.19.2.post1__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 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.onSessionCreate(self.current_session)
555
+ plugin.onSessionDestroy(self.current_session)
517
556
 
518
557
  name = self.current_session.name
519
558
  self.current_session.clean()
@@ -611,6 +650,15 @@ 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
+
658
+ for plugin in self._plugins.values():
659
+ if isinstance(plugin, Plugin):
660
+ plugin.onSessionDestroy(self.current_session)
661
+
614
662
  else:
615
663
  return
616
664
 
@@ -706,13 +754,38 @@ class PyMudApp:
706
754
  self.app.invalidate()
707
755
 
708
756
  def handle_session(self, *args):
709
- "\x1b[1m命令\x1b[0m: #session {名称} {宿主机} {端口} {编码}\n" \
710
- " 创建一个远程连接会话,使用指定编码格式连接到远程宿主机的指定端口并保存为 {名称} \n" \
711
- " 如, #session newstart mud.pkuxkx.net 8080 GBK \n" \
712
- " 当不指定编码格式时, 默认使用utf-8编码 \n" \
713
- " 如, #session newstart mud.pkuxkx.net 8081 \n" \
714
- " 可以直接使用#{名称}将指定会话切换为当前会话,如#newstart \n" \
715
- "\x1b[1m相关\x1b[0m: help, exit\n"
757
+ '''
758
+ 嵌入命令 #session 的执行函数,创建一个远程连接会话。
759
+ 该函数不应该在代码中直接调用。
760
+
761
+ 使用:
762
+ - #session {Name} {Host} {Port} {Encoding}
763
+ - 当不指定 Encoding: 时, 默认使用utf-8编码
764
+ - 可以直接使用 #{名称} 切换会话和操作会话命令
765
+
766
+ 参数:
767
+ :Name: 会话名称
768
+ :Host: 服务器域名或IP地址
769
+ :Port: 端口号
770
+ :Encoding: 编码格式,不指定时默认为 utf8
771
+
772
+ 示例:
773
+ ``#session {名称} {宿主机} {端口} {编码}``
774
+ 创建一个远程连接会话,使用指定编码格式连接到远程宿主机的指定端口并保存为 {名称} 。其中,编码可以省略,此时使用Settings.server["default_encoding"]的值,默认为utf8
775
+ ``#session newstart mud.pkuxkx.net 8080 GBK``
776
+ 使用GBK编码连接到mud.pkuxkx.net的8080端口,并将该会话命名为newstart
777
+ ``#session newstart mud.pkuxkx.net 8081``
778
+ 使用UTF8编码连接到mud.pkuxkx.net的8081端口,并将该会话命名为newstart
779
+ ``#newstart``
780
+ 将名称为newstart的会话切换为当前会话
781
+ ``#newstart give miui gold``
782
+ 使名称为newstart的会话执行give miui gold指令,但不切换到该会话
783
+
784
+ 相关命令:
785
+ - #close
786
+ - #exit
787
+
788
+ '''
716
789
 
717
790
  nothandle = True
718
791
 
@@ -894,7 +967,6 @@ class PyMudApp:
894
967
 
895
968
 
896
969
  def main(cfg_data = None):
897
- logging.disable()
898
970
  app = PyMudApp(cfg_data)
899
971
  app.run()
900
972