dimples 1.3.1__tar.gz → 1.3.3__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 (171) hide show
  1. {dimples-1.3.1 → dimples-1.3.3}/PKG-INFO +9 -9
  2. {dimples-1.3.1 → dimples-1.3.3}/README.md +8 -8
  3. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/facebook.py +1 -1
  4. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/flexible.py +5 -5
  5. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/gate.py +1 -1
  6. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/gatekeeper.py +1 -1
  7. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/mars.py +1 -1
  8. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/mtp.py +1 -1
  9. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/protocol/__init__.py +1 -1
  10. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/ws.py +32 -5
  11. {dimples-1.3.1 → dimples-1.3.3}/dimples/edge/shared.py +7 -3
  12. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/facebook.py +16 -0
  13. {dimples-1.3.1 → dimples-1.3.3}/dimples/station/shared.py +11 -1
  14. {dimples-1.3.1 → dimples-1.3.3}/dimples.egg-info/PKG-INFO +9 -9
  15. dimples-1.3.3/dimples.egg-info/requires.txt +6 -0
  16. {dimples-1.3.1 → dimples-1.3.3}/setup.py +9 -9
  17. dimples-1.3.1/dimples.egg-info/requires.txt +0 -6
  18. {dimples-1.3.1 → dimples-1.3.3}/dimples/__init__.py +0 -0
  19. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/__init__.py +0 -0
  20. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/checker.py +0 -0
  21. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/checkpoint.py +0 -0
  22. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/__init__.py +0 -0
  23. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/commands.py +0 -0
  24. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/creator.py +0 -0
  25. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/customized.py +0 -0
  26. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/group.py +0 -0
  27. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/grp_expel.py +0 -0
  28. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/grp_invite.py +0 -0
  29. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/grp_join.py +0 -0
  30. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/grp_query.py +0 -0
  31. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/grp_quit.py +0 -0
  32. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/grp_reset.py +0 -0
  33. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/grp_resign.py +0 -0
  34. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/cpu/handshake.py +0 -0
  35. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/facebook.py +0 -0
  36. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/messenger.py +0 -0
  37. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/network/__init__.py +0 -0
  38. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/network/session.py +0 -0
  39. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/network/state.py +0 -0
  40. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/network/transition.py +0 -0
  41. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/packer.py +0 -0
  42. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/processor.py +0 -0
  43. {dimples-1.3.1 → dimples-1.3.3}/dimples/client/terminal.py +0 -0
  44. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/__init__.py +0 -0
  45. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/anonymous.py +0 -0
  46. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/ans.py +0 -0
  47. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/archivist.py +0 -0
  48. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/checker.py +0 -0
  49. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/compat/__init__.py +0 -0
  50. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/compat/address.py +0 -0
  51. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/compat/compatible.py +0 -0
  52. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/compat/entity.py +0 -0
  53. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/compat/loader.py +0 -0
  54. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/compat/meta.py +0 -0
  55. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/compat/network.py +0 -0
  56. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/dbi/__init__.py +0 -0
  57. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/dbi/account.py +0 -0
  58. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/dbi/message.py +0 -0
  59. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/dbi/session.py +0 -0
  60. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/messenger.py +0 -0
  61. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/packer.py +0 -0
  62. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/processer.py +0 -0
  63. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/__init__.py +0 -0
  64. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/ans.py +0 -0
  65. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/block.py +0 -0
  66. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/customized.py +0 -0
  67. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/group.py +0 -0
  68. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/handshake.py +0 -0
  69. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/login.py +0 -0
  70. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/mute.py +0 -0
  71. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/password.py +0 -0
  72. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/report.py +0 -0
  73. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/utils.py +0 -0
  74. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/protocol/version.py +0 -0
  75. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/register.py +0 -0
  76. {dimples-1.3.1 → dimples-1.3.3}/dimples/common/session.py +0 -0
  77. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/__init__.py +0 -0
  78. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/protocol/mars.py +0 -0
  79. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/protocol/ws.py +0 -0
  80. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/queue.py +0 -0
  81. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/seeker.py +0 -0
  82. {dimples-1.3.1 → dimples-1.3.3}/dimples/conn/session.py +0 -0
  83. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/__init__.py +0 -0
  84. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/account.py +0 -0
  85. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/__init__.py +0 -0
  86. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/base.py +0 -0
  87. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/document.py +0 -0
  88. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/group.py +0 -0
  89. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/group_history.py +0 -0
  90. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/group_keys.py +0 -0
  91. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/login.py +0 -0
  92. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/meta.py +0 -0
  93. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/private.py +0 -0
  94. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/station.py +0 -0
  95. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/dos/user.py +0 -0
  96. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/message.py +0 -0
  97. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/__init__.py +0 -0
  98. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/base.py +0 -0
  99. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/document.py +0 -0
  100. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/group.py +0 -0
  101. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/grp_history.py +0 -0
  102. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/grp_keys.py +0 -0
  103. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/login.py +0 -0
  104. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/message.py +0 -0
  105. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/meta.py +0 -0
  106. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/station.py +0 -0
  107. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/redis/user.py +0 -0
  108. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/session.py +0 -0
  109. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_base.py +0 -0
  110. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_cipherkey.py +0 -0
  111. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_document.py +0 -0
  112. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_group.py +0 -0
  113. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_group_history.py +0 -0
  114. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_group_keys.py +0 -0
  115. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_login.py +0 -0
  116. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_message.py +0 -0
  117. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_meta.py +0 -0
  118. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_private.py +0 -0
  119. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_station.py +0 -0
  120. {dimples-1.3.1 → dimples-1.3.3}/dimples/database/t_user.py +0 -0
  121. {dimples-1.3.1 → dimples-1.3.3}/dimples/edge/__init__.py +0 -0
  122. {dimples-1.3.1 → dimples-1.3.3}/dimples/edge/messenger.py +0 -0
  123. {dimples-1.3.1 → dimples-1.3.3}/dimples/edge/octopus.py +0 -0
  124. {dimples-1.3.1 → dimples-1.3.3}/dimples/edge/start.py +0 -0
  125. {dimples-1.3.1 → dimples-1.3.3}/dimples/emitter.py +0 -0
  126. {dimples-1.3.1 → dimples-1.3.3}/dimples/group/__init__.py +0 -0
  127. {dimples-1.3.1 → dimples-1.3.3}/dimples/group/admin.py +0 -0
  128. {dimples-1.3.1 → dimples-1.3.3}/dimples/group/builder.py +0 -0
  129. {dimples-1.3.1 → dimples-1.3.3}/dimples/group/delegate.py +0 -0
  130. {dimples-1.3.1 → dimples-1.3.3}/dimples/group/emitter.py +0 -0
  131. {dimples-1.3.1 → dimples-1.3.3}/dimples/group/helper.py +0 -0
  132. {dimples-1.3.1 → dimples-1.3.3}/dimples/group/manager.py +0 -0
  133. {dimples-1.3.1 → dimples-1.3.3}/dimples/group/packer.py +0 -0
  134. {dimples-1.3.1 → dimples-1.3.3}/dimples/group/shared.py +0 -0
  135. {dimples-1.3.1 → dimples-1.3.3}/dimples/register/__init__.py +0 -0
  136. {dimples-1.3.1 → dimples-1.3.3}/dimples/register/base.py +0 -0
  137. {dimples-1.3.1 → dimples-1.3.3}/dimples/register/ext.py +0 -0
  138. {dimples-1.3.1 → dimples-1.3.3}/dimples/register/run.py +0 -0
  139. {dimples-1.3.1 → dimples-1.3.3}/dimples/register/shared.py +0 -0
  140. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/__init__.py +0 -0
  141. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/checker.py +0 -0
  142. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/cpu/__init__.py +0 -0
  143. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/cpu/ans.py +0 -0
  144. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/cpu/creator.py +0 -0
  145. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/cpu/document.py +0 -0
  146. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/cpu/handshake.py +0 -0
  147. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/cpu/login.py +0 -0
  148. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/cpu/report.py +0 -0
  149. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/deliver.py +0 -0
  150. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/dis_roamer.py +0 -0
  151. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/dispatcher.py +0 -0
  152. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/messenger.py +0 -0
  153. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/packer.py +0 -0
  154. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/processor.py +0 -0
  155. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/push.py +0 -0
  156. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/session.py +0 -0
  157. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/session_center.py +0 -0
  158. {dimples-1.3.1 → dimples-1.3.3}/dimples/server/trace.py +0 -0
  159. {dimples-1.3.1 → dimples-1.3.3}/dimples/station/__init__.py +0 -0
  160. {dimples-1.3.1 → dimples-1.3.3}/dimples/station/handler.py +0 -0
  161. {dimples-1.3.1 → dimples-1.3.3}/dimples/station/start.py +0 -0
  162. {dimples-1.3.1 → dimples-1.3.3}/dimples/utils/__init__.py +0 -0
  163. {dimples-1.3.1 → dimples-1.3.3}/dimples/utils/cache.py +0 -0
  164. {dimples-1.3.1 → dimples-1.3.3}/dimples/utils/checker.py +0 -0
  165. {dimples-1.3.1 → dimples-1.3.3}/dimples/utils/config.py +0 -0
  166. {dimples-1.3.1 → dimples-1.3.3}/dimples/utils/log.py +0 -0
  167. {dimples-1.3.1 → dimples-1.3.3}/dimples.egg-info/SOURCES.txt +0 -0
  168. {dimples-1.3.1 → dimples-1.3.3}/dimples.egg-info/dependency_links.txt +0 -0
  169. {dimples-1.3.1 → dimples-1.3.3}/dimples.egg-info/entry_points.txt +0 -0
  170. {dimples-1.3.1 → dimples-1.3.3}/dimples.egg-info/top_level.txt +0 -0
  171. {dimples-1.3.1 → dimples-1.3.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 1.3.1
3
+ Version: 1.3.3
4
4
  Summary: DIMP Library for Edges and Stations
5
5
  Home-page: https://github.com/dimchat/demo-py
6
6
  Author: Albert Moky
@@ -30,16 +30,16 @@ Description: # DIMP Library for Edges and Stations (Python version)
30
30
  # 'pycryptodome', # 3.14.1
31
31
  # 'base58', # 1.0.3
32
32
  # 'ecdsa', # 0.16.1
33
- 'dimplugins>=2.2.1',
33
+ 'dimplugins>=2.2.2',
34
34
 
35
- 'dimsdk>=2.2.1',
36
- # 'dimp>=2.2.1',
37
- # 'dkd>=2.2.1',
38
- # 'mkm>=2.2.1',
35
+ 'dimsdk>=2.2.2',
36
+ # 'dimp>=2.2.2',
37
+ # 'dkd>=2.2.2',
38
+ # 'mkm>=2.2.2',
39
39
 
40
- 'startrek>=2.2.1',
41
- 'tcp>=2.2.1',
42
- 'udp>=2.2.1',
40
+ 'startrek>=2.2.2',
41
+ 'tcp>=2.2.2',
42
+ 'udp>=2.2.2',
43
43
 
44
44
  'aiou>=0.3.0',
45
45
  ]
@@ -22,16 +22,16 @@
22
22
  # 'pycryptodome', # 3.14.1
23
23
  # 'base58', # 1.0.3
24
24
  # 'ecdsa', # 0.16.1
25
- 'dimplugins>=2.2.1',
25
+ 'dimplugins>=2.2.2',
26
26
 
27
- 'dimsdk>=2.2.1',
28
- # 'dimp>=2.2.1',
29
- # 'dkd>=2.2.1',
30
- # 'mkm>=2.2.1',
27
+ 'dimsdk>=2.2.2',
28
+ # 'dimp>=2.2.2',
29
+ # 'dkd>=2.2.2',
30
+ # 'mkm>=2.2.2',
31
31
 
32
- 'startrek>=2.2.1',
33
- 'tcp>=2.2.1',
34
- 'udp>=2.2.1',
32
+ 'startrek>=2.2.2',
33
+ 'tcp>=2.2.2',
34
+ 'udp>=2.2.2',
35
35
 
36
36
  'aiou>=0.3.0',
37
37
  ]
@@ -100,7 +100,7 @@ class CommonFacebook(Facebook, Logging, ABC):
100
100
  archivist.current_user = user
101
101
  return user
102
102
 
103
- def set_current_user(self, user: User):
103
+ async def set_current_user(self, user: User):
104
104
  if user.data_source is None:
105
105
  user.data_source = self
106
106
  self.archivist.current_user = user
@@ -28,7 +28,7 @@
28
28
  # SOFTWARE.
29
29
  # ==============================================================================
30
30
 
31
- from typing import Optional, Union, List
31
+ from typing import Optional, List
32
32
 
33
33
  from startrek.types import SocketAddress
34
34
  from startrek.skywalker import Runner
@@ -140,13 +140,13 @@ class FlexiblePorter(StarPorter, DeparturePacker, Logging):
140
140
  return await docker.process()
141
141
 
142
142
  # Override
143
- async def send_data(self, payload: Union[bytes, bytearray]) -> bool:
143
+ async def send_data(self, payload: bytes) -> bool:
144
144
  docker = self.__porter
145
145
  if docker is None:
146
146
  self.error(msg='docker not ready, failed to send payload: %s' % payload)
147
147
  return False
148
148
  elif isinstance(docker, WSPorter):
149
- ship = docker.pack(payload=payload)
149
+ ship = docker.pack(payload=payload, priority=0, needs_respond=True)
150
150
  return await docker.send_ship(ship=ship)
151
151
  elif isinstance(docker, MTPStreamPorter):
152
152
  # sn = TransactionID.from_data(data=ship.sn)
@@ -170,11 +170,11 @@ class FlexiblePorter(StarPorter, DeparturePacker, Logging):
170
170
  await docker.heartbeat()
171
171
 
172
172
  # Override
173
- def pack(self, payload: bytes, priority: int = 0) -> Optional[Departure]:
173
+ def pack(self, payload: bytes, priority: int, needs_respond: bool) -> Optional[Departure]:
174
174
  docker = self.__porter
175
175
  if docker is None:
176
176
  self.error(msg='docker not ready, failed to pack: %s' % payload)
177
177
  return None
178
178
  else:
179
179
  assert isinstance(docker, DeparturePacker), 'docker error: %s' % docker
180
- return docker.pack(payload=payload, priority=priority)
180
+ return docker.pack(payload=payload, priority=priority, needs_respond=needs_respond)
@@ -116,7 +116,7 @@ class CommonGate(StarGate, Logging, Generic[H], ABC):
116
116
  ship = MarsStreamPorter.create_departure(mars=mars)
117
117
  return await worker.send_ship(ship=ship)
118
118
  elif isinstance(worker, WSPorter):
119
- ship = worker.pack(payload=payload)
119
+ ship = worker.pack(payload=payload, priority=1, needs_respond=False)
120
120
  return await worker.send_ship(ship=ship)
121
121
  else:
122
122
  raise LookupError('docker error (%s, %s): %s' % (remote, local, worker))
@@ -261,7 +261,7 @@ class GateKeeper(Runner, PorterDelegate, Logging):
261
261
  async def _porter_pack(self, payload: bytes, priority: int = 0) -> Optional[Departure]:
262
262
  docker = await self.gate.fetch_porter(remote=self.remote_address, local=None)
263
263
  assert isinstance(docker, DeparturePacker), 'departure packer error: %s' % docker
264
- return docker.pack(payload=payload, priority=priority)
264
+ return docker.pack(payload=payload, priority=priority, needs_respond=True)
265
265
 
266
266
  def _queue_append(self, msg: ReliableMessage, ship: Departure) -> bool:
267
267
  return self.__queue.append(msg=msg, ship=ship)
@@ -292,7 +292,7 @@ class MarsStreamPorter(PlainPorter, DeparturePacker):
292
292
  pass
293
293
 
294
294
  # Override
295
- def pack(self, payload: bytes, priority: int = 0) -> Optional[Departure]:
295
+ def pack(self, payload: bytes, priority: int, needs_respond: bool) -> Optional[Departure]:
296
296
  mars = MarsHelper.create_push(payload=payload)
297
297
  return self.create_departure(mars=mars, priority=priority)
298
298
 
@@ -197,7 +197,7 @@ class MTPStreamPorter(PackagePorter, DeparturePacker):
197
197
  return MTPHelper.respond_message(sn=sn, pages=pages, index=index, body=OK)
198
198
 
199
199
  # Override
200
- def pack(self, payload: bytes, priority: int = 0) -> Optional[Departure]:
200
+ def pack(self, payload: bytes, priority: int, needs_respond: bool) -> Optional[Departure]:
201
201
  pkg = MTPHelper.create_message(body=payload)
202
202
  return self._create_departure(pack=pkg, priority=priority)
203
203
 
@@ -40,7 +40,7 @@ from .mars import NetMsg, NetMsgHead, NetMsgSeq
40
40
  class DeparturePacker(ABC):
41
41
 
42
42
  @abstractmethod
43
- def pack(self, payload: bytes, priority: int = 0) -> Optional[Departure]:
43
+ def pack(self, payload: bytes, priority: int, needs_respond: bool) -> Optional[Departure]:
44
44
  raise NotImplemented
45
45
 
46
46
 
@@ -35,7 +35,7 @@ from typing import Optional, List, Tuple
35
35
  from startrek.types import SocketAddress
36
36
  from startrek.skywalker import Runner
37
37
  from startrek import Arrival, Departure
38
- from startrek import ArrivalShip, DepartureShip, DeparturePriority
38
+ from startrek import ArrivalShip, DepartureShip
39
39
  from startrek import BaseConnection, BaseChannel
40
40
 
41
41
  from tcp import PlainPorter
@@ -51,6 +51,18 @@ class WSArrival(ArrivalShip):
51
51
  self.__package = package
52
52
  self.__payload = payload
53
53
 
54
+ # Override
55
+ def __str__(self) -> str:
56
+ clazz = self.__class__.__name__
57
+ size = len(self.__package)
58
+ return '<%s size=%d />' % (clazz, size)
59
+
60
+ # Override
61
+ def __repr__(self) -> str:
62
+ clazz = self.__class__.__name__
63
+ size = len(self.__package)
64
+ return '<%s size=%d />' % (clazz, size)
65
+
54
66
  @property
55
67
  def package(self) -> bytes:
56
68
  return self.__package
@@ -80,6 +92,18 @@ class WSDeparture(DepartureShip):
80
92
  self.__payload = payload
81
93
  self.__important = important
82
94
 
95
+ # Override
96
+ def __str__(self) -> str:
97
+ clazz = self.__class__.__name__
98
+ size = len(self.__package)
99
+ return '<%s size=%d />' % (clazz, size)
100
+
101
+ # Override
102
+ def __repr__(self) -> str:
103
+ clazz = self.__class__.__name__
104
+ size = len(self.__package)
105
+ return '<%s size=%d />' % (clazz, size)
106
+
83
107
  @property
84
108
  def package(self) -> bytes:
85
109
  return self.__package
@@ -241,8 +265,7 @@ class WSPorter(PlainPorter, DeparturePacker):
241
265
  elif body_len == 4:
242
266
  if body == PING:
243
267
  # 'PING' -> 'PONG'
244
- ship = self.pack(payload=PONG, priority=DeparturePriority.SLOWER)
245
- await self.send_ship(ship=ship)
268
+ await self.respond(payload=PONG)
246
269
  return None
247
270
  elif body == PONG or body == NOOP:
248
271
  # ignore
@@ -265,9 +288,13 @@ class WSPorter(PlainPorter, DeparturePacker):
265
288
  pass
266
289
 
267
290
  # Override
268
- def pack(self, payload: bytes, priority: int = 0) -> Optional[Departure]:
291
+ def _create_departure(self, payload: bytes, priority: int, needs_respond: bool) -> Departure:
292
+ return self.pack(payload=payload, priority=priority, needs_respond=needs_respond)
293
+
294
+ # Override
295
+ def pack(self, payload: bytes, priority: int, needs_respond: bool) -> Optional[Departure]:
269
296
  req_pack = WebSocket.pack(payload=payload)
270
- important = self.__ack_enable
297
+ important = needs_respond and self.__ack_enable
271
298
  return WSDeparture(package=req_pack, payload=payload, priority=priority, important=important)
272
299
 
273
300
  @classmethod
@@ -86,6 +86,9 @@ class GlobalVariable:
86
86
  @messenger.setter
87
87
  def messenger(self, transceiver: ClientMessenger):
88
88
  self.__messenger = transceiver
89
+ # set for group manager
90
+ man = SharedGroupManager()
91
+ man.messenger = transceiver
89
92
  # set for entity checker
90
93
  checker = self.facebook.checker
91
94
  assert isinstance(checker, ClientChecker), 'entity checker error: %s' % checker
@@ -130,7 +133,7 @@ class GlobalVariable:
130
133
  visa = Document.parse(document=visa.copy_dictionary())
131
134
  visa.sign(private_key=sign_key)
132
135
  await facebook.save_document(document=visa)
133
- facebook.set_current_user(user=user)
136
+ await facebook.set_current_user(user=user)
134
137
 
135
138
 
136
139
  def create_redis_connector(config: Config) -> Optional[RedisConnector]:
@@ -178,7 +181,7 @@ async def create_database(config: Config) -> Tuple[AccountDBI, MessageDBI, Sessi
178
181
  found = True
179
182
  break
180
183
  if not found:
181
- print('removing neighbor station: %s' % old)
184
+ print('removing neighbor station: %s, %s' % (old, provider))
182
185
  await sdb.remove_station(host=old.host, port=old.port, provider=provider)
183
186
  # 2. add new neighbors
184
187
  for node in neighbors:
@@ -188,8 +191,9 @@ async def create_database(config: Config) -> Tuple[AccountDBI, MessageDBI, Sessi
188
191
  found = True
189
192
  break
190
193
  if not found:
191
- print('adding neighbor node: %s' % node)
194
+ print('adding neighbor node: %s -> %s' % (node, provider))
192
195
  await sdb.add_station(identifier=None, host=node.host, port=node.port, provider=provider)
196
+ # OK
193
197
  return adb, mdb, sdb
194
198
 
195
199
 
@@ -34,6 +34,7 @@ from typing import Optional, List
34
34
 
35
35
  from dimsdk import ID, User
36
36
 
37
+ from ..common import BroadcastUtils
37
38
  from ..common import CommonFacebook
38
39
 
39
40
 
@@ -67,16 +68,31 @@ class ServerFacebook(CommonFacebook):
67
68
 
68
69
  # Override
69
70
  async def get_founder(self, identifier: ID) -> Optional[ID]:
71
+ assert identifier.is_group, 'group ID error: %s' % identifier
72
+ # check broadcast group
73
+ if identifier.is_broadcast:
74
+ # founder of broadcast group
75
+ return BroadcastUtils.broadcast_founder(group=identifier)
70
76
  self.error(msg='DO NOT CALL ME: %s' % identifier)
71
77
  return None
72
78
 
73
79
  # Override
74
80
  async def get_owner(self, identifier: ID) -> Optional[ID]:
81
+ assert identifier.is_group, 'group ID error: %s' % identifier
82
+ # check broadcast group
83
+ if identifier.is_broadcast:
84
+ # owner of broadcast group
85
+ return BroadcastUtils.broadcast_owner(group=identifier)
75
86
  self.error(msg='DO NOT CALL ME: %s' % identifier)
76
87
  return None
77
88
 
78
89
  # Override
79
90
  async def get_members(self, identifier: ID) -> List[ID]:
91
+ assert identifier.is_group, 'group ID error: %s' % identifier
92
+ # check broadcast group
93
+ if identifier.is_broadcast:
94
+ # members of broadcast group
95
+ return BroadcastUtils.broadcast_members(group=identifier)
80
96
  self.error(msg='DO NOT CALL ME: %s' % identifier)
81
97
  return []
82
98
 
@@ -90,6 +90,9 @@ class GlobalVariable:
90
90
  @messenger.setter
91
91
  def messenger(self, transceiver: ServerMessenger):
92
92
  self.__messenger = transceiver
93
+ # set for group manager
94
+ man = SharedGroupManager()
95
+ man.messenger = transceiver
93
96
  # set for entity checker
94
97
  checker = self.facebook.checker
95
98
  assert isinstance(checker, ServerChecker), 'entity checker error: %s' % checker
@@ -128,6 +131,12 @@ class GlobalVariable:
128
131
  dispatcher.facebook = facebook
129
132
  dispatcher.deliver = deliver
130
133
  dispatcher.roamer = roamer
134
+ # this messenger is only for encryption, so don't need a session
135
+ messenger = create_messenger(facebook=facebook, database=mdb, session=None)
136
+ self.__messenger = messenger
137
+ checker = facebook.checker
138
+ assert isinstance(checker, ServerChecker), 'entity checker error: %s' % checker
139
+ checker.messenger = messenger
131
140
 
132
141
  async def login(self, current_user: ID):
133
142
  facebook = self.facebook
@@ -145,7 +154,7 @@ class GlobalVariable:
145
154
  visa = Document.parse(document=visa.copy_dictionary())
146
155
  visa.sign(private_key=sign_key)
147
156
  await facebook.save_document(document=visa)
148
- facebook.set_current_user(user=user)
157
+ await facebook.set_current_user(user=user)
149
158
 
150
159
 
151
160
  def create_redis_connector(config: Config) -> Optional[RedisConnector]:
@@ -205,6 +214,7 @@ async def create_database(config: Config) -> Tuple[AccountDBI, MessageDBI, Sessi
205
214
  if not found:
206
215
  print('adding neighbor node: %s' % node)
207
216
  await sdb.add_station(identifier=None, host=node.host, port=node.port, provider=provider)
217
+ # OK
208
218
  return adb, mdb, sdb
209
219
 
210
220
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dimples
3
- Version: 1.3.1
3
+ Version: 1.3.3
4
4
  Summary: DIMP Library for Edges and Stations
5
5
  Home-page: https://github.com/dimchat/demo-py
6
6
  Author: Albert Moky
@@ -30,16 +30,16 @@ Description: # DIMP Library for Edges and Stations (Python version)
30
30
  # 'pycryptodome', # 3.14.1
31
31
  # 'base58', # 1.0.3
32
32
  # 'ecdsa', # 0.16.1
33
- 'dimplugins>=2.2.1',
33
+ 'dimplugins>=2.2.2',
34
34
 
35
- 'dimsdk>=2.2.1',
36
- # 'dimp>=2.2.1',
37
- # 'dkd>=2.2.1',
38
- # 'mkm>=2.2.1',
35
+ 'dimsdk>=2.2.2',
36
+ # 'dimp>=2.2.2',
37
+ # 'dkd>=2.2.2',
38
+ # 'mkm>=2.2.2',
39
39
 
40
- 'startrek>=2.2.1',
41
- 'tcp>=2.2.1',
42
- 'udp>=2.2.1',
40
+ 'startrek>=2.2.2',
41
+ 'tcp>=2.2.2',
42
+ 'udp>=2.2.2',
43
43
 
44
44
  'aiou>=0.3.0',
45
45
  ]
@@ -0,0 +1,6 @@
1
+ dimplugins>=2.2.2
2
+ dimsdk>=2.2.2
3
+ startrek>=2.2.2
4
+ tcp>=2.2.2
5
+ udp>=2.2.2
6
+ aiou>=0.3.0
@@ -14,7 +14,7 @@ import io
14
14
 
15
15
  from setuptools import setup, find_packages
16
16
 
17
- __version__ = '1.3.1'
17
+ __version__ = '1.3.3'
18
18
  __author__ = 'Albert Moky'
19
19
  __contact__ = 'albert.moky@gmail.com'
20
20
 
@@ -51,16 +51,16 @@ setup(
51
51
  # 'pycryptodome', # 3.14.1
52
52
  # 'base58', # 1.0.3
53
53
  # 'ecdsa', # 0.16.1
54
- 'dimplugins>=2.2.1',
54
+ 'dimplugins>=2.2.2',
55
55
 
56
- 'dimsdk>=2.2.1',
57
- # 'dimp>=2.2.1',
58
- # 'dkd>=2.2.1',
59
- # 'mkm>=2.2.1',
56
+ 'dimsdk>=2.2.2',
57
+ # 'dimp>=2.2.2',
58
+ # 'dkd>=2.2.2',
59
+ # 'mkm>=2.2.2',
60
60
 
61
- 'startrek>=2.2.1',
62
- 'tcp>=2.2.1',
63
- 'udp>=2.2.1',
61
+ 'startrek>=2.2.2',
62
+ 'tcp>=2.2.2',
63
+ 'udp>=2.2.2',
64
64
 
65
65
  'aiou>=0.3.0',
66
66
  ]
@@ -1,6 +0,0 @@
1
- dimplugins>=2.2.1
2
- dimsdk>=2.2.1
3
- startrek>=2.2.1
4
- tcp>=2.2.1
5
- udp>=2.2.1
6
- aiou>=0.3.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes