dimples 1.2.5__tar.gz → 1.2.7__tar.gz

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.
Files changed (161) hide show
  1. dimples-1.2.7/LICENSE +21 -0
  2. dimples-1.2.7/PKG-INFO +31 -0
  3. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/network/session.py +11 -11
  4. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/network/state.py +16 -16
  5. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/network/transition.py +12 -12
  6. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/__init__.py +18 -18
  7. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/flexible.py +41 -46
  8. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/gate.py +46 -85
  9. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/gatekeeper.py +13 -13
  10. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/mars.py +2 -2
  11. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/mtp.py +2 -2
  12. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/session.py +1 -1
  13. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/ws.py +2 -2
  14. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/document.py +1 -0
  15. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/meta.py +4 -1
  16. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/private.py +8 -2
  17. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/document.py +2 -1
  18. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/grp_history.py +2 -2
  19. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/login.py +2 -2
  20. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/station.py +14 -6
  21. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_document.py +6 -10
  22. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_group.py +18 -30
  23. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_group_history.py +11 -21
  24. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_group_keys.py +10 -9
  25. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_login.py +7 -14
  26. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_station.py +16 -21
  27. {dimples-1.2.5 → dimples-1.2.7}/dimples/register/run.py +3 -1
  28. {dimples-1.2.5 → dimples-1.2.7}/dimples/register/shared.py +23 -6
  29. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/__init__.py +4 -2
  30. dimples-1.2.7/dimples/server/deliver.py +172 -0
  31. dimples-1.2.7/dimples/server/dis_roamer.py +115 -0
  32. dimples-1.2.7/dimples/server/dispatcher.py +247 -0
  33. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/session.py +53 -28
  34. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/session_center.py +3 -3
  35. {dimples-1.2.5 → dimples-1.2.7}/dimples/station/handler.py +4 -16
  36. {dimples-1.2.5 → dimples-1.2.7}/dimples/station/shared.py +14 -4
  37. dimples-1.2.7/dimples.egg-info/PKG-INFO +31 -0
  38. {dimples-1.2.5 → dimples-1.2.7}/dimples.egg-info/SOURCES.txt +3 -0
  39. {dimples-1.2.5 → dimples-1.2.7}/dimples.egg-info/entry_points.txt +0 -1
  40. {dimples-1.2.5 → dimples-1.2.7}/dimples.egg-info/requires.txt +3 -3
  41. {dimples-1.2.5 → dimples-1.2.7}/setup.py +4 -4
  42. dimples-1.2.5/PKG-INFO +0 -22
  43. dimples-1.2.5/dimples/server/dispatcher.py +0 -464
  44. dimples-1.2.5/dimples.egg-info/PKG-INFO +0 -22
  45. {dimples-1.2.5 → dimples-1.2.7}/README.md +0 -0
  46. {dimples-1.2.5 → dimples-1.2.7}/dimples/__init__.py +0 -0
  47. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/__init__.py +0 -0
  48. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/archivist.py +0 -0
  49. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/checkpoint.py +0 -0
  50. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/__init__.py +0 -0
  51. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/commands.py +0 -0
  52. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/creator.py +0 -0
  53. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/group.py +0 -0
  54. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/grp_expel.py +0 -0
  55. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/grp_invite.py +0 -0
  56. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/grp_join.py +0 -0
  57. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/grp_query.py +0 -0
  58. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/grp_quit.py +0 -0
  59. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/grp_reset.py +0 -0
  60. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/grp_resign.py +0 -0
  61. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/cpu/handshake.py +0 -0
  62. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/facebook.py +0 -0
  63. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/messenger.py +0 -0
  64. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/network/__init__.py +0 -0
  65. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/packer.py +0 -0
  66. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/processor.py +0 -0
  67. {dimples-1.2.5 → dimples-1.2.7}/dimples/client/terminal.py +0 -0
  68. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/__init__.py +0 -0
  69. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/anonymous.py +0 -0
  70. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/ans.py +0 -0
  71. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/archivist.py +0 -0
  72. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/compat/__init__.py +0 -0
  73. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/compat/btc.py +0 -0
  74. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/compat/compatible.py +0 -0
  75. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/compat/entity.py +0 -0
  76. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/compat/meta.py +0 -0
  77. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/compat/network.py +0 -0
  78. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/dbi/__init__.py +0 -0
  79. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/dbi/account.py +0 -0
  80. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/dbi/message.py +0 -0
  81. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/dbi/session.py +0 -0
  82. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/facebook.py +0 -0
  83. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/messenger.py +0 -0
  84. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/packer.py +0 -0
  85. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/processer.py +0 -0
  86. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/protocol/__init__.py +0 -0
  87. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/protocol/ans.py +0 -0
  88. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/protocol/block.py +0 -0
  89. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/protocol/handshake.py +0 -0
  90. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/protocol/login.py +0 -0
  91. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/protocol/mute.py +0 -0
  92. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/protocol/report.py +0 -0
  93. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/register.py +0 -0
  94. {dimples-1.2.5 → dimples-1.2.7}/dimples/common/session.py +0 -0
  95. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/protocol/__init__.py +0 -0
  96. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/protocol/mars.py +0 -0
  97. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/protocol/ws.py +0 -0
  98. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/queue.py +0 -0
  99. {dimples-1.2.5 → dimples-1.2.7}/dimples/conn/seeker.py +0 -0
  100. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/__init__.py +0 -0
  101. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/account.py +0 -0
  102. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/__init__.py +0 -0
  103. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/base.py +0 -0
  104. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/group.py +0 -0
  105. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/group_history.py +0 -0
  106. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/group_keys.py +0 -0
  107. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/login.py +0 -0
  108. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/station.py +0 -0
  109. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/dos/user.py +0 -0
  110. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/message.py +0 -0
  111. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/__init__.py +0 -0
  112. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/base.py +0 -0
  113. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/group.py +0 -0
  114. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/grp_keys.py +0 -0
  115. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/message.py +0 -0
  116. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/meta.py +0 -0
  117. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/redis/user.py +0 -0
  118. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/session.py +0 -0
  119. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_base.py +0 -0
  120. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_cipherkey.py +0 -0
  121. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_message.py +0 -0
  122. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_meta.py +0 -0
  123. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_private.py +0 -0
  124. {dimples-1.2.5 → dimples-1.2.7}/dimples/database/t_user.py +0 -0
  125. {dimples-1.2.5 → dimples-1.2.7}/dimples/edge/__init__.py +0 -0
  126. {dimples-1.2.5 → dimples-1.2.7}/dimples/edge/octopus.py +0 -0
  127. {dimples-1.2.5 → dimples-1.2.7}/dimples/edge/shared.py +0 -0
  128. {dimples-1.2.5 → dimples-1.2.7}/dimples/edge/start.py +0 -0
  129. {dimples-1.2.5 → dimples-1.2.7}/dimples/group/__init__.py +0 -0
  130. {dimples-1.2.5 → dimples-1.2.7}/dimples/group/admin.py +0 -0
  131. {dimples-1.2.5 → dimples-1.2.7}/dimples/group/builder.py +0 -0
  132. {dimples-1.2.5 → dimples-1.2.7}/dimples/group/delegate.py +0 -0
  133. {dimples-1.2.5 → dimples-1.2.7}/dimples/group/emitter.py +0 -0
  134. {dimples-1.2.5 → dimples-1.2.7}/dimples/group/helper.py +0 -0
  135. {dimples-1.2.5 → dimples-1.2.7}/dimples/group/manager.py +0 -0
  136. {dimples-1.2.5 → dimples-1.2.7}/dimples/group/packer.py +0 -0
  137. {dimples-1.2.5 → dimples-1.2.7}/dimples/register/__init__.py +0 -0
  138. {dimples-1.2.5 → dimples-1.2.7}/dimples/register/base.py +0 -0
  139. {dimples-1.2.5 → dimples-1.2.7}/dimples/register/ext.py +0 -0
  140. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/archivist.py +0 -0
  141. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/cpu/__init__.py +0 -0
  142. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/cpu/ans.py +0 -0
  143. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/cpu/document.py +0 -0
  144. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/cpu/handshake.py +0 -0
  145. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/cpu/login.py +0 -0
  146. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/cpu/report.py +0 -0
  147. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/messenger.py +0 -0
  148. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/packer.py +0 -0
  149. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/processor.py +0 -0
  150. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/push.py +0 -0
  151. {dimples-1.2.5 → dimples-1.2.7}/dimples/server/trace.py +0 -0
  152. {dimples-1.2.5 → dimples-1.2.7}/dimples/station/__init__.py +0 -0
  153. {dimples-1.2.5 → dimples-1.2.7}/dimples/station/start.py +0 -0
  154. {dimples-1.2.5 → dimples-1.2.7}/dimples/utils/__init__.py +0 -0
  155. {dimples-1.2.5 → dimples-1.2.7}/dimples/utils/cache.py +0 -0
  156. {dimples-1.2.5 → dimples-1.2.7}/dimples/utils/config.py +0 -0
  157. {dimples-1.2.5 → dimples-1.2.7}/dimples/utils/log.py +0 -0
  158. {dimples-1.2.5 → dimples-1.2.7}/dimples/utils/runner.py +0 -0
  159. {dimples-1.2.5 → dimples-1.2.7}/dimples.egg-info/dependency_links.txt +0 -0
  160. {dimples-1.2.5 → dimples-1.2.7}/dimples.egg-info/top_level.txt +0 -0
  161. {dimples-1.2.5 → dimples-1.2.7}/setup.cfg +0 -0
dimples-1.2.7/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Albert Moky
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
dimples-1.2.7/PKG-INFO ADDED
@@ -0,0 +1,31 @@
1
+ Metadata-Version: 2.1
2
+ Name: dimples
3
+ Version: 1.2.7
4
+ Summary: DIMP Library for Edges and Stations
5
+ Home-page: https://github.com/dimchat/demo-py
6
+ Author: Albert Moky
7
+ Author-email: albert.moky@gmail.com
8
+ License: MIT
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: dimplugins>=2.0.0
15
+ Requires-Dist: dimsdk>=2.0.0
16
+ Requires-Dist: dimp>=2.0.0
17
+ Requires-Dist: dkd>=2.0.0
18
+ Requires-Dist: mkm>=2.0.0
19
+ Requires-Dist: startrek>=2.2.0
20
+ Requires-Dist: tcp>=2.2.0
21
+ Requires-Dist: udp>=2.2.0
22
+ Requires-Dist: aiou>=0.3.0
23
+
24
+ # DIMP Library for Edges and Stations (Python version)
25
+
26
+ [![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/dimchat/demo-py/blob/master/LICENSE)
27
+ [![Version](https://img.shields.io/badge/alpha-0.1.0-red.svg)](https://github.com/dimchat/demo-py/wiki)
28
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/dimchat/demo-py/pulls)
29
+ [![Platform](https://img.shields.io/badge/Platform-Python%203-brightgreen.svg)](https://github.com/dimchat/demo-py/wiki)
30
+
31
+ Copyright © 2018-2022 Albert Moky
@@ -40,7 +40,7 @@ from typing import Optional, List
40
40
 
41
41
  from dimsdk import Station
42
42
 
43
- from startrek import Docker, DockerStatus
43
+ from startrek import Porter, PorterStatus
44
44
  from startrek import Arrival
45
45
 
46
46
  from ...utils import Daemon, Runner
@@ -146,20 +146,20 @@ class ClientSession(BaseSession):
146
146
  #
147
147
 
148
148
  # Override
149
- async def docker_status_changed(self, previous: DockerStatus, current: DockerStatus, docker: Docker):
150
- # await super().docker_status_changed(previous=previous, current=current, docker=docker)
151
- if current is None or current == DockerStatus.ERROR:
149
+ async def porter_status_changed(self, previous: PorterStatus, current: PorterStatus, porter: Porter):
150
+ # await super().porter_status_changed(previous=previous, current=current, porter=porter)
151
+ if current is None or current == PorterStatus.ERROR:
152
152
  # connection error or session finished
153
153
  self.set_active(active=False)
154
- self.warning(msg='connection lost, waiting for reconnecting: %s' % docker)
154
+ self.warning(msg='connection lost, waiting for reconnecting: %s' % porter)
155
155
  # TODO: clear session ID and handshake again
156
- elif current == DockerStatus.READY:
156
+ elif current == PorterStatus.READY:
157
157
  # connected/reconnected
158
158
  self.set_active(active=True)
159
159
 
160
160
  # Override
161
- async def docker_received(self, ship: Arrival, docker: Docker):
162
- # await super().docker_received(ship=ship, docker=docker)
161
+ async def porter_received(self, ship: Arrival, porter: Porter):
162
+ # await super().porter_received(ship=ship, porter=porter)
163
163
  all_responses = []
164
164
  messenger = self.messenger
165
165
  # 1. get data packages from arrival ship's payload
@@ -174,14 +174,14 @@ class ClientSession(BaseSession):
174
174
  continue
175
175
  all_responses.append(res)
176
176
  except Exception as error:
177
- source = docker.remote_address
177
+ source = porter.remote_address
178
178
  self.error(msg='parse message failed (%s): %s, %s' % (source, error, pack))
179
179
  traceback.print_exc()
180
180
  # from dimsdk import TextContent
181
181
  # return TextContent.new(text='parse message failed: %s' % error)
182
182
  gate = self.gate
183
- source = docker.remote_address
184
- destination = docker.local_address
183
+ source = porter.remote_address
184
+ destination = porter.local_address
185
185
  # 3. send responses separately
186
186
  for res in all_responses:
187
187
  await gate.send_response(payload=res, ship=ship, remote=source, local=destination)
@@ -33,7 +33,7 @@ from dimsdk import ID
33
33
 
34
34
  from startrek.skywalker import Runner
35
35
  from startrek.fsm import Context, BaseTransition, BaseState, AutoMachine
36
- from startrek import Docker, DockerStatus
36
+ from startrek import Porter, PorterStatus
37
37
 
38
38
  # from .session import ClientSession
39
39
 
@@ -43,7 +43,7 @@ class StateMachine(AutoMachine, Context):
43
43
  def __init__(self, session):
44
44
  super().__init__()
45
45
  self.__session = weakref.ref(session)
46
- self.__docker_ref = None
46
+ self.__porter_ref = None
47
47
  # init states
48
48
  builder = self._create_state_builder()
49
49
  self.add_state(state=builder.get_default_state())
@@ -58,17 +58,17 @@ class StateMachine(AutoMachine, Context):
58
58
  return self.__session()
59
59
 
60
60
  @property
61
- def docker(self) -> Optional[Docker]:
62
- ref = self.__docker_ref
61
+ def porter(self) -> Optional[Porter]:
62
+ ref = self.__porter_ref
63
63
  if ref is not None:
64
64
  return ref()
65
65
 
66
- @docker.setter
67
- def docker(self, worker: Docker):
68
- if worker is None:
69
- self.__docker_ref = None
66
+ @porter.setter
67
+ def porter(self, docker: Porter):
68
+ if docker is None:
69
+ self.__porter_ref = None
70
70
  else:
71
- self.__docker_ref = weakref.ref(worker)
71
+ self.__porter_ref = weakref.ref(docker)
72
72
 
73
73
  # noinspection PyMethodMayBeStatic
74
74
  def _create_state_builder(self):
@@ -90,21 +90,21 @@ class StateMachine(AutoMachine, Context):
90
90
  return session.identifier
91
91
 
92
92
  @property
93
- def status(self) -> DockerStatus:
94
- docker = self.docker
93
+ def status(self) -> PorterStatus:
94
+ docker = self.porter
95
95
  if docker is not None:
96
96
  return docker.status
97
97
  else:
98
98
  session = self.session
99
99
  gate = session.gate
100
- coro = gate.fetch_docker([], remote=session.remote_address, local=None)
100
+ coro = gate.fetch_porter(remote=session.remote_address, local=None)
101
101
  task = Runner.async_task(coro=coro)
102
- task.add_done_callback(self._fetch_docker_callback)
102
+ task.add_done_callback(self._fetch_porter_callback)
103
103
  # waiting for callback
104
- return DockerStatus.ERROR
104
+ return PorterStatus.ERROR
105
105
 
106
- def _fetch_docker_callback(self, t: asyncio.Task):
107
- self.docker = t.result()
106
+ def _fetch_porter_callback(self, t: asyncio.Task):
107
+ self.porter = t.result()
108
108
 
109
109
 
110
110
  class StateOrder(IntEnum):
@@ -23,7 +23,7 @@
23
23
  # SOFTWARE.
24
24
  # ==============================================================================
25
25
 
26
- from startrek import DockerStatus
26
+ from startrek import PorterStatus
27
27
 
28
28
  from .state import StateMachine, StateTransition
29
29
  from .state import StateOrder
@@ -106,7 +106,7 @@ class DefaultConnectingTransition(StateTransition):
106
106
  if ctx.session_id is None:
107
107
  # current user not set yet
108
108
  return False
109
- return ctx.status in [DockerStatus.PREPARING, DockerStatus.READY]
109
+ return ctx.status in [PorterStatus.PREPARING, PorterStatus.READY]
110
110
 
111
111
 
112
112
  class ConnectingConnectedTransition(StateTransition):
@@ -122,7 +122,7 @@ class ConnectingConnectedTransition(StateTransition):
122
122
  def evaluate(self, ctx: StateMachine, now: float) -> bool:
123
123
  # assert ctx.session_key is None, 'session key must be empty before handshaking'
124
124
  # assert ctx.session_id is not None, 'current user lost?'
125
- return ctx.status == DockerStatus.READY
125
+ return ctx.status == PorterStatus.READY
126
126
 
127
127
 
128
128
  class ConnectingErrorTransition(StateTransition):
@@ -141,7 +141,7 @@ class ConnectingErrorTransition(StateTransition):
141
141
  if self.is_expired(state=ctx.current_state, now=now):
142
142
  # connecting expired, do it again
143
143
  return True
144
- return ctx.status not in [DockerStatus.PREPARING, DockerStatus.READY]
144
+ return ctx.status not in [PorterStatus.PREPARING, PorterStatus.READY]
145
145
 
146
146
 
147
147
  class ConnectedHandshakingTransition(StateTransition):
@@ -159,7 +159,7 @@ class ConnectedHandshakingTransition(StateTransition):
159
159
  # FIXME: current user lost?
160
160
  # state will be changed to 'error'
161
161
  return False
162
- return ctx.status == DockerStatus.READY
162
+ return ctx.status == PorterStatus.READY
163
163
 
164
164
 
165
165
  class ConnectedErrorTransition(StateTransition):
@@ -176,7 +176,7 @@ class ConnectedErrorTransition(StateTransition):
176
176
  if ctx.session_id is None:
177
177
  # FIXME: current user lost?
178
178
  return True
179
- return ctx.status != DockerStatus.READY
179
+ return ctx.status != PorterStatus.READY
180
180
 
181
181
 
182
182
  class HandshakingRunningTransition(StateTransition):
@@ -194,7 +194,7 @@ class HandshakingRunningTransition(StateTransition):
194
194
  # FIXME: current user lost?
195
195
  # state will be changed to 'error'
196
196
  return False
197
- if ctx.status != DockerStatus.READY:
197
+ if ctx.status != PorterStatus.READY:
198
198
  # connection lost, state will be changed to 'error'
199
199
  return False
200
200
  # when current user changed, the session key will cleared, so
@@ -217,7 +217,7 @@ class HandshakingConnectedTransition(StateTransition):
217
217
  # FIXME: current user lost?
218
218
  # state will be changed to 'error'
219
219
  return False
220
- if ctx.status != DockerStatus.READY:
220
+ if ctx.status != PorterStatus.READY:
221
221
  # connection lost, state will be changed to 'error'
222
222
  return False
223
223
  if ctx.session_key is not None:
@@ -241,7 +241,7 @@ class HandshakingErrorTransition(StateTransition):
241
241
  if ctx.session_id is None:
242
242
  # FIXME: current user lost?
243
243
  return True
244
- return ctx.status != DockerStatus.READY
244
+ return ctx.status != PorterStatus.READY
245
245
 
246
246
 
247
247
  class RunningDefaultTransition(StateTransition):
@@ -258,7 +258,7 @@ class RunningDefaultTransition(StateTransition):
258
258
 
259
259
  # Override
260
260
  def evaluate(self, ctx: StateMachine, now: float) -> bool:
261
- if ctx.status != DockerStatus.READY:
261
+ if ctx.status != PorterStatus.READY:
262
262
  # connection lost, state will be changed to 'error'
263
263
  return False
264
264
  if ctx.session_id is None:
@@ -277,7 +277,7 @@ class RunningErrorTransition(StateTransition):
277
277
 
278
278
  # Override
279
279
  def evaluate(self, ctx: StateMachine, now: float) -> bool:
280
- return ctx.status != DockerStatus.READY
280
+ return ctx.status != PorterStatus.READY
281
281
 
282
282
 
283
283
  class ErrorDefaultTransition(StateTransition):
@@ -289,4 +289,4 @@ class ErrorDefaultTransition(StateTransition):
289
289
 
290
290
  # Override
291
291
  def evaluate(self, ctx: StateMachine, now: float) -> bool:
292
- return ctx.status != DockerStatus.ERROR
292
+ return ctx.status != PorterStatus.ERROR
@@ -29,12 +29,12 @@
29
29
 
30
30
  +--------------+
31
31
  | Facebook |
32
- +--------------+ DockerDelegate ConnectionDelegate
32
+ +--------------+ PorterDelegate ConnectionDelegate
33
33
  : AccountDB +--------------+ +----------+
34
34
  : | GateKeeper | . . . >| Gate |
35
35
  +--------------+ +--------------+ +----------+
36
36
  | Messenger | . . . >| Session | Hub (Connection)
37
- +--------------+ +--------------+ Docker
37
+ +--------------+ +--------------+ Porter
38
38
  MessageDB SessionDB
39
39
  Filter
40
40
  Dispatcher
@@ -46,24 +46,24 @@ from startrek import BaseChannel, ChannelReader, ChannelWriter
46
46
  from startrek import BaseHub, BaseConnection, ActiveConnection
47
47
 
48
48
  from startrek import Ship, Arrival, Departure, DeparturePriority
49
- from startrek import Docker, DockerStatus, DockerDelegate, Gate
49
+ from startrek import Porter, PorterStatus, PorterDelegate, Gate
50
50
  from startrek import ArrivalShip, ArrivalHall, DepartureShip, DepartureHall
51
- from startrek import Dock, LockedDock, StarDocker, StarGate
51
+ from startrek import Dock, LockedDock, StarPorter, StarGate
52
52
 
53
- from tcp import PlainArrival, PlainDeparture, PlainDocker
53
+ from tcp import PlainArrival, PlainDeparture, PlainPorter
54
54
  from tcp import StreamChannel, StreamHub
55
55
  from tcp import ServerHub as TCPServerHub, ClientHub as TCPClientHub
56
56
 
57
- from udp import PackageArrival, PackageDeparture, PackageDocker
57
+ from udp import PackageArrival, PackageDeparture, PackagePorter
58
58
  from udp import PacketChannel, PacketHub
59
59
  from udp import ServerHub as UDPServerHub, ClientHub as UDPClientHub
60
60
 
61
61
  from .protocol import WebSocket, NetMsg, NetMsgHead, NetMsgSeq
62
62
 
63
- from .ws import WSArrival, WSDeparture, WSDocker
64
- from .mars import MarsStreamArrival, MarsStreamDeparture, MarsStreamDocker
65
- from .mtp import MTPStreamArrival, MTPStreamDeparture, MTPStreamDocker
66
- from .flexible import FlexibleDocker
63
+ from .ws import WSArrival, WSDeparture, WSPorter
64
+ from .mars import MarsStreamArrival, MarsStreamDeparture, MarsStreamPorter
65
+ from .mtp import MTPStreamArrival, MTPStreamDeparture, MTPStreamPorter
66
+ from .flexible import FlexiblePorter
67
67
  from .gate import CommonGate, TCPServerGate, TCPClientGate, UDPServerGate, UDPClientGate
68
68
  # from .gatekeeper import GateKeeper
69
69
  from .queue import MessageWrapper, MessageQueue
@@ -81,20 +81,20 @@ __all__ = [
81
81
  'BaseHub', 'BaseConnection', 'ActiveConnection',
82
82
 
83
83
  'Ship', 'Arrival', 'Departure', 'DeparturePriority',
84
- 'Docker', 'DockerStatus', 'DockerDelegate', 'Gate',
84
+ 'Porter', 'PorterStatus', 'PorterDelegate', 'Gate',
85
85
  'ArrivalShip', 'ArrivalHall', 'DepartureShip', 'DepartureHall',
86
- 'Dock', 'LockedDock', 'StarDocker', 'StarGate',
86
+ 'Dock', 'LockedDock', 'StarPorter', 'StarGate',
87
87
 
88
88
  #
89
89
  # TCP
90
90
  #
91
- 'PlainArrival', 'PlainDeparture', 'PlainDocker',
91
+ 'PlainArrival', 'PlainDeparture', 'PlainPorter',
92
92
  'StreamChannel', 'StreamHub', 'TCPServerHub', 'TCPClientHub',
93
93
 
94
94
  #
95
95
  # UDP
96
96
  #
97
- 'PackageArrival', 'PackageDeparture', 'PackageDocker',
97
+ 'PackageArrival', 'PackageDeparture', 'PackagePorter',
98
98
  'PacketChannel', 'PacketHub', 'UDPServerHub', 'UDPClientHub',
99
99
 
100
100
  #
@@ -105,10 +105,10 @@ __all__ = [
105
105
  #
106
106
  # Network
107
107
  #
108
- 'WSArrival', 'WSDeparture', 'WSDocker',
109
- 'MarsStreamArrival', 'MarsStreamDeparture', 'MarsStreamDocker',
110
- 'MTPStreamArrival', 'MTPStreamDeparture', 'MTPStreamDocker',
111
- 'FlexibleDocker',
108
+ 'WSArrival', 'WSDeparture', 'WSPorter',
109
+ 'MarsStreamArrival', 'MarsStreamDeparture', 'MarsStreamPorter',
110
+ 'MTPStreamArrival', 'MTPStreamDeparture', 'MTPStreamPorter',
111
+ 'FlexiblePorter',
112
112
  'CommonGate', 'TCPServerGate', 'TCPClientGate', 'UDPServerGate', 'UDPClientGate',
113
113
  # 'GateKeeper',
114
114
  'MessageWrapper', 'MessageQueue',
@@ -34,47 +34,26 @@ from startrek.types import SocketAddress
34
34
  from startrek.skywalker import Runner
35
35
  from startrek import Connection
36
36
  from startrek import Arrival, Departure
37
- from startrek import StarDocker
37
+ from startrek import StarPorter
38
38
 
39
39
  from ..utils import Logging
40
40
  from .protocol import DeparturePacker
41
41
 
42
- from .ws import WSDocker
43
- from .mtp import MTPStreamDocker, TransactionID, MTPHelper
44
- from .mars import MarsStreamDocker, MarsHelper
42
+ from .ws import WSPorter
43
+ from .mtp import MTPStreamPorter, TransactionID, MTPHelper
44
+ from .mars import MarsStreamPorter, MarsHelper
45
45
 
46
46
 
47
- class FlexibleDocker(StarDocker, DeparturePacker, Logging):
47
+ class FlexiblePorter(StarPorter, DeparturePacker, Logging):
48
48
 
49
49
  def __init__(self, remote: SocketAddress, local: Optional[SocketAddress]):
50
50
  super().__init__(remote=remote, local=local)
51
- self.__docker: Optional[StarDocker] = None
52
-
53
- def _get_docker(self, data: bytes) -> Optional[StarDocker]:
54
- docker = self.__docker
55
- if docker is not None or len(data) == 0:
56
- return docker
57
- # check data for packer
58
- if WSDocker.check(data=data):
59
- docker = WSDocker(remote=self.remote_address, local=self.local_address)
60
- elif MTPStreamDocker.check(data=data):
61
- docker = MTPStreamDocker(remote=self.remote_address, local=self.local_address)
62
- elif MarsStreamDocker.check(data=data):
63
- docker = MarsStreamDocker(remote=self.remote_address, local=self.local_address)
64
- else:
65
- self.error(msg='unsupported data format: %s' % data)
66
- return None
67
- # OK
68
- docker.delegate = self.delegate
69
- coro = docker.set_connection(conn=self.connection)
70
- Runner.async_task(coro=coro)
71
- self.__docker = docker
72
- return docker
51
+ self.__porter: Optional[StarPorter] = None
73
52
 
74
53
  # Override
75
54
  async def set_connection(self, conn: Optional[Connection]):
76
55
  await super().set_connection(conn=conn)
77
- docker = self.__docker
56
+ docker = self.__porter
78
57
  if docker is None:
79
58
  self.error(msg='docker not ready, failed to set connection: %s' % conn)
80
59
  else:
@@ -82,7 +61,7 @@ class FlexibleDocker(StarDocker, DeparturePacker, Logging):
82
61
 
83
62
  # Override
84
63
  async def send_ship(self, ship: Departure) -> bool:
85
- docker = self.__docker
64
+ docker = self.__porter
86
65
  if docker is None:
87
66
  self.error(msg='docker not ready, failed to send ship: %s' % ship)
88
67
  return False
@@ -91,11 +70,25 @@ class FlexibleDocker(StarDocker, DeparturePacker, Logging):
91
70
 
92
71
  # Override
93
72
  async def process_received(self, data: bytes):
94
- docker = self._get_docker(data=data)
73
+ docker = self.__porter
95
74
  if docker is None:
96
- self.error(msg='docker not ready, failed to process received: %s' % data)
97
- else:
98
- return await docker.process_received(data=data)
75
+ # check data for packer
76
+ if WSPorter.check(data=data):
77
+ docker = WSPorter(remote=self.remote_address, local=self.local_address)
78
+ elif MTPStreamPorter.check(data=data):
79
+ docker = MTPStreamPorter(remote=self.remote_address, local=self.local_address)
80
+ elif MarsStreamPorter.check(data=data):
81
+ docker = MarsStreamPorter(remote=self.remote_address, local=self.local_address)
82
+ else:
83
+ self.error(msg='unsupported data format: %s' % data)
84
+ return None
85
+ # initialize
86
+ docker.delegate = self.delegate
87
+ coro = docker.set_connection(conn=self.connection)
88
+ Runner.async_task(coro=coro)
89
+ self.__porter = docker
90
+ # OK
91
+ return await docker.process_received(data=data)
99
92
 
100
93
  # Override
101
94
  def _get_arrivals(self, data: bytes) -> List[Arrival]:
@@ -120,7 +113,7 @@ class FlexibleDocker(StarDocker, DeparturePacker, Logging):
120
113
  # Override
121
114
  def purge(self, now: float = 0) -> int:
122
115
  cnt = super().purge(now=now)
123
- docker = self.__docker
116
+ docker = self.__porter
124
117
  if docker is None:
125
118
  self.debug(msg='docker not ready, failed to purge')
126
119
  else:
@@ -129,15 +122,17 @@ class FlexibleDocker(StarDocker, DeparturePacker, Logging):
129
122
 
130
123
  # Override
131
124
  async def close(self):
132
- await self.set_connection(conn=None)
133
- docker = self.__docker
134
- if docker is not None:
135
- self.__docker = None
125
+ await super().set_connection(conn=None)
126
+ docker = self.__porter
127
+ if docker is None:
128
+ self.warning(msg='docker not ready, failed to close')
129
+ else:
130
+ self.__porter = None
136
131
  await docker.close()
137
132
 
138
133
  # Override
139
134
  async def process(self) -> bool:
140
- docker = self.__docker
135
+ docker = self.__porter
141
136
  if docker is None:
142
137
  self.debug(msg='docker not ready, failed to process')
143
138
  return False
@@ -146,21 +141,21 @@ class FlexibleDocker(StarDocker, DeparturePacker, Logging):
146
141
 
147
142
  # Override
148
143
  async def send_data(self, payload: Union[bytes, bytearray]) -> bool:
149
- docker = self.__docker
144
+ docker = self.__porter
150
145
  if docker is None:
151
146
  self.error(msg='docker not ready, failed to send payload: %s' % payload)
152
147
  return False
153
- elif isinstance(docker, WSDocker):
148
+ elif isinstance(docker, WSPorter):
154
149
  ship = docker.pack(payload=payload)
155
150
  return await docker.send_ship(ship=ship)
156
- elif isinstance(docker, MTPStreamDocker):
151
+ elif isinstance(docker, MTPStreamPorter):
157
152
  # sn = TransactionID.from_data(data=ship.sn)
158
153
  sn = TransactionID.generate()
159
154
  pack = MTPHelper.create_message(body=payload, sn=sn)
160
155
  return await docker.send_package(pack=pack)
161
- elif isinstance(docker, MarsStreamDocker):
156
+ elif isinstance(docker, MarsStreamPorter):
162
157
  mars = MarsHelper.create_push(payload=payload)
163
- ship = MarsStreamDocker.create_departure(mars=mars)
158
+ ship = MarsStreamPorter.create_departure(mars=mars)
164
159
  return await docker.send_ship(ship=ship)
165
160
  else:
166
161
  # error
@@ -168,7 +163,7 @@ class FlexibleDocker(StarDocker, DeparturePacker, Logging):
168
163
 
169
164
  # Override
170
165
  async def heartbeat(self):
171
- docker = self.__docker
166
+ docker = self.__porter
172
167
  if docker is None:
173
168
  self.warning(msg='docker not ready, failed to heart bet')
174
169
  else:
@@ -176,7 +171,7 @@ class FlexibleDocker(StarDocker, DeparturePacker, Logging):
176
171
 
177
172
  # Override
178
173
  def pack(self, payload: bytes, priority: int = 0) -> Optional[Departure]:
179
- docker = self.__docker
174
+ docker = self.__porter
180
175
  if docker is None:
181
176
  self.error(msg='docker not ready, failed to pack: %s' % payload)
182
177
  return None