socket.d 2.4.11__tar.gz → 2.4.11.1__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. {socket.d-2.4.11 → socket.d-2.4.11.1}/PKG-INFO +1 -1
  2. {socket.d-2.4.11 → socket.d-2.4.11.1}/setup.py +1 -1
  3. {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/PKG-INFO +1 -1
  4. {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/SOURCES.txt +5 -1
  5. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/SocketD.py +3 -57
  6. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/cluster/ClusterClientSession.py +6 -6
  7. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/Client.py +2 -2
  8. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientBase.py +4 -4
  9. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientChannel.py +1 -1
  10. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientSession.py +3 -6
  11. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Channel.py +1 -1
  12. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/FragmentHandler.py +1 -1
  13. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/FragmentHandlerBase.py +1 -1
  14. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/ChannelDefault.py +2 -2
  15. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/ProcessorDefault.py +1 -1
  16. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/SessionDefault.py +14 -9
  17. socket.d-2.4.11.1/socketd/transport/stream/RequestStream.py +34 -0
  18. socket.d-2.4.11.1/socketd/transport/stream/SendStream.py +22 -0
  19. socket.d-2.4.11/socketd/transport/stream/StreamManger.py → socket.d-2.4.11.1/socketd/transport/stream/Stream.py +17 -16
  20. socket.d-2.4.11.1/socketd/transport/stream/StreamManger.py +13 -0
  21. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/stream/StreamMangerDefault.py +2 -1
  22. socket.d-2.4.11.1/socketd/transport/stream/SubscribeStream.py +30 -0
  23. socket.d-2.4.11.1/socketd/transport/stream/impl/RequestStreamImpl.py +47 -0
  24. socket.d-2.4.11.1/socketd/transport/stream/impl/SendStreamImpl.py +25 -0
  25. {socket.d-2.4.11/socketd/transport/stream → socket.d-2.4.11.1/socketd/transport/stream/impl}/StreamBase.py +27 -15
  26. socket.d-2.4.11.1/socketd/transport/stream/impl/SubscribeStreamImpl.py +36 -0
  27. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/utils/CompletableFuture.py +1 -1
  28. socket.d-2.4.11.1/socketd/utils/__init__.py +0 -0
  29. socket.d-2.4.11/socketd/transport/stream/RequestStream.py +0 -36
  30. socket.d-2.4.11/socketd/transport/stream/SendStream.py +0 -14
  31. socket.d-2.4.11/socketd/transport/stream/Stream.py +0 -32
  32. socket.d-2.4.11/socketd/transport/stream/SubscribeStream.py +0 -28
  33. {socket.d-2.4.11 → socket.d-2.4.11.1}/README.md +0 -0
  34. {socket.d-2.4.11 → socket.d-2.4.11.1}/setup.cfg +0 -0
  35. {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/dependency_links.txt +0 -0
  36. {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/requires.txt +0 -0
  37. {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/top_level.txt +0 -0
  38. {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/zip-safe +0 -0
  39. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/__init__.py +0 -0
  40. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/broker/BrokerFragmentHandler.py +0 -0
  41. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/broker/BrokerListener.py +0 -0
  42. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/broker/BrokerListenerBase.py +0 -0
  43. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/broker/__init__.py +0 -0
  44. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/cluster/ClusterClient.py +0 -0
  45. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/cluster/LoadBalancer.py +0 -0
  46. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/cluster/__init__.py +0 -0
  47. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/exception/SocketDExecption.py +0 -0
  48. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/exception/__init__.py +0 -0
  49. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/__init__.py +0 -0
  50. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConfig.py +0 -0
  51. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConfigHandler.py +0 -0
  52. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConnectHandler.py +0 -0
  53. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConnector.py +0 -0
  54. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConnectorBase.py +0 -0
  55. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientHandshakeResult.py +0 -0
  56. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientHeartbeatHandler.py +0 -0
  57. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientProvider.py +0 -0
  58. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/__init__.py +0 -0
  59. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Asserts.py +0 -0
  60. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/ChannelAssistant.py +0 -0
  61. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/ChannelInternal.py +0 -0
  62. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/ChannelSupporter.py +0 -0
  63. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Codec.py +0 -0
  64. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Config.py +0 -0
  65. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Costants.py +0 -0
  66. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Entity.py +0 -0
  67. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/EntityMetas.py +0 -0
  68. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Flags.py +0 -0
  69. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/FragmentAggregator.py +0 -0
  70. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Frame.py +0 -0
  71. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Frames.py +0 -0
  72. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/HandshakeDefault.py +0 -0
  73. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/IdGenerator.py +0 -0
  74. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Listener.py +0 -0
  75. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Message.py +0 -0
  76. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Processor.py +0 -0
  77. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Session.py +0 -0
  78. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/__init__.py +0 -0
  79. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/Buffer.py +0 -0
  80. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/ByteBufferCodecReader.py +0 -0
  81. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/ByteBufferCodecWriter.py +0 -0
  82. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/CodecDefault.py +0 -0
  83. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/__init__.py +0 -0
  84. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/EntityDefault.py +0 -0
  85. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/FileEntity.py +0 -0
  86. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/MessageBuilder.py +0 -0
  87. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/MessageDefault.py +0 -0
  88. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/StringEntity.py +0 -0
  89. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/__init__.py +0 -0
  90. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/FragmentAggregatorDefault.py +0 -0
  91. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/FragmentHandlerDefault.py +0 -0
  92. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/FragmentHolder.py +0 -0
  93. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/__init__.py +0 -0
  94. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/ChannelBase.py +0 -0
  95. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/ConfigBase.py +0 -0
  96. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/LogConfig.py +0 -0
  97. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/SessionBase.py +0 -0
  98. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/__init__.py +0 -0
  99. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/EventListener.py +0 -0
  100. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/PathListener.py +0 -0
  101. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/PipelineListener.py +0 -0
  102. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/RouteSelector.py +0 -0
  103. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/RouteSelectorDefault.py +0 -0
  104. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/SimpleListener.py +0 -0
  105. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/__init__.py +0 -0
  106. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/Server.py +0 -0
  107. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/ServerBase.py +0 -0
  108. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/ServerConfig.py +0 -0
  109. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/ServerProvider.py +0 -0
  110. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/__init__.py +0 -0
  111. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/stream/__init__.py +0 -0
  112. {socket.d-2.4.11/socketd/transport/utils → socket.d-2.4.11.1/socketd/transport/stream/impl}/__init__.py +0 -0
  113. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/utils/AsyncUtils.py +0 -0
  114. {socket.d-2.4.11/socketd/transport/utils/async_api → socket.d-2.4.11.1/socketd/transport/utils}/__init__.py +0 -0
  115. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/utils/async_api/AtomicRefer.py +0 -0
  116. {socket.d-2.4.11/socketd/transport/utils/sync_api → socket.d-2.4.11.1/socketd/transport/utils/async_api}/__init__.py +0 -0
  117. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/utils/sync_api/AtomicRefer.py +0 -0
  118. {socket.d-2.4.11/socketd/utils → socket.d-2.4.11.1/socketd/transport/utils/sync_api}/__init__.py +0 -0
  119. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/utils/RunUtils.py +0 -0
  120. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/utils/StrUtils.py +0 -0
  121. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TCPAIOServer.py +0 -0
  122. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TCPStreamIO.py +0 -0
  123. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TcpAIOChannelAssistant.py +0 -0
  124. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TcpAioClient.py +0 -0
  125. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TcpAioClientConnector.py +0 -0
  126. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TcpAioProvider.py +0 -0
  127. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/__init__.py +0 -0
  128. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioChannelAssistant.py +0 -0
  129. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioClient.py +0 -0
  130. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioClientConnector.py +0 -0
  131. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioProvider.py +0 -0
  132. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioServer.py +0 -0
  133. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/__init__.py +0 -0
  134. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/AIOConnect.py +0 -0
  135. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/AIOServe.py +0 -0
  136. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/AIOWebSocketClientImpl.py +0 -0
  137. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/AIOWebSocketServerImpl.py +0 -0
  138. {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: socket.d
3
- Version: 2.4.11
3
+ Version: 2.4.11.1
4
4
  Summary: @noear/socket.d python project
5
5
  Home-page: https://socketd.noear.org/
6
6
  Author: noear,bai
@@ -4,7 +4,7 @@ from setuptools import setup,find_packages
4
4
 
5
5
  setup(
6
6
  name='socket.d',
7
- version='2.4.11',
7
+ version='2.4.11.1',
8
8
  description='@noear/socket.d python project',
9
9
  author='noear,bai',
10
10
  url='https://socketd.noear.org/',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: socket.d
3
- Version: 2.4.11
3
+ Version: 2.4.11.1
4
4
  Summary: @noear/socket.d python project
5
5
  Home-page: https://socketd.noear.org/
6
6
  Author: noear,bai
@@ -93,11 +93,15 @@ socketd/transport/server/__init__.py
93
93
  socketd/transport/stream/RequestStream.py
94
94
  socketd/transport/stream/SendStream.py
95
95
  socketd/transport/stream/Stream.py
96
- socketd/transport/stream/StreamBase.py
97
96
  socketd/transport/stream/StreamManger.py
98
97
  socketd/transport/stream/StreamMangerDefault.py
99
98
  socketd/transport/stream/SubscribeStream.py
100
99
  socketd/transport/stream/__init__.py
100
+ socketd/transport/stream/impl/RequestStreamImpl.py
101
+ socketd/transport/stream/impl/SendStreamImpl.py
102
+ socketd/transport/stream/impl/StreamBase.py
103
+ socketd/transport/stream/impl/SubscribeStreamImpl.py
104
+ socketd/transport/stream/impl/__init__.py
101
105
  socketd/transport/utils/AsyncUtils.py
102
106
  socketd/transport/utils/CompletableFuture.py
103
107
  socketd/transport/utils/__init__.py
@@ -24,65 +24,11 @@ def protocol_version() -> str:
24
24
  client_factory_map: Dict[str, ClientProvider] = {}
25
25
  server_factory_map: Dict[str, ServerProvider] = {}
26
26
 
27
- def create_server(schemaOrConfig: str | ServerConfig) -> Server:
28
- Asserts.assert_null("schemaOrConfig", schemaOrConfig)
29
- config:ServerConfig
30
-
31
- if isinstance(schemaOrConfig, str):
32
- config = ServerConfig(schemaOrConfig)
33
- else:
34
- config = schemaOrConfig
35
-
36
- server = create_server_or_null(config)
37
-
38
- if server is None:
39
- raise RuntimeError(f"No socketd server providers were found: {config.get_schema()}")
40
- else:
41
- return server
42
-
43
- def create_server_or_null(config: ServerConfig) -> Server:
44
- factory = server_factory_map.get(config.get_schema())
45
-
46
- if factory is None:
47
- return None
48
- else:
49
- return factory.create_server(config)
50
-
51
-
52
- def create_client(urlOrConfig: str | ClientConfig) -> Client:
53
- Asserts.assert_null("urlOrConfig", urlOrConfig)
54
- config:ClientConfig
55
-
56
- if isinstance(urlOrConfig, str):
57
- config = ClientConfig(urlOrConfig)
58
- else:
59
- config = urlOrConfig
60
-
61
- client = create_client_or_null(config)
62
-
63
- if client is None:
64
- raise RuntimeError(f"No socketd client providers were found: {config.get_schema()}")
65
- else:
66
- return client
67
-
68
- def create_client_or_null(config: ClientConfig) -> Client:
69
- Asserts.assert_null("config", config)
70
-
71
- factory = client_factory_map.get(config.get_schema())
72
- if factory is None:
73
- return None
74
- else:
75
- return factory.create_client(config)
76
-
77
-
78
- def create_cluster_client(*urls):
79
- return ClusterClient(*urls)
80
-
81
-
82
27
  def load_factories(factories: list[ClientProvider | ServerProvider], factory_map: Dict[str, object]) -> None:
83
28
  for factory in factories:
84
29
  for schema in factory.schema():
85
30
  factory_map[schema] = factory
31
+
86
32
  def create_server(schemaOrConfig: str | ServerConfig) -> Server:
87
33
  Asserts.assert_null("schemaOrConfig", schemaOrConfig)
88
34
  config:ServerConfig
@@ -124,7 +70,7 @@ def create_client(urlOrConfig: str | ClientConfig) -> Client:
124
70
  else:
125
71
  return client
126
72
 
127
- def create_client_or_null(config: ClientConfig) -> Client:
73
+ def create_client_or_null(config: ClientConfig) -> Client | None:
128
74
  Asserts.assert_null("config", config)
129
75
 
130
76
  factory = client_factory_map.get(config.get_schema())
@@ -134,7 +80,7 @@ def create_client_or_null(config: ClientConfig) -> Client:
134
80
  return factory.create_client(config)
135
81
 
136
82
 
137
- def create_cluster_client(*urls):
83
+ def create_cluster_client(*urls) -> Client:
138
84
  return ClusterClient(*urls)
139
85
 
140
86
 
@@ -45,20 +45,20 @@ class ClusterClientSession(ClientSession):
45
45
  def session_id(self) -> str:
46
46
  return self.__sessionId
47
47
 
48
- async def send(self, event: str, content: Entity) -> SendStream:
48
+ def send(self, event: str, content: Entity) -> SendStream:
49
49
  sender = self.get_session_any(None)
50
50
 
51
- return await sender.send(event, content)
51
+ return sender.send(event, content)
52
52
 
53
- async def send_and_request(self, event: str, content: Entity, timeout: int) -> RequestStream:
53
+ def send_and_request(self, event: str, content: Entity, timeout: int) -> RequestStream:
54
54
  sender = self.get_session_any(None)
55
55
 
56
- return await sender.send_and_request(event, content, timeout)
56
+ return sender.send_and_request(event, content, timeout)
57
57
 
58
- async def send_and_subscribe(self, event: str, content: Entity, timeout: int = 0) -> SubscribeStream:
58
+ def send_and_subscribe(self, event: str, content: Entity, timeout: int = 0) -> SubscribeStream:
59
59
  sender = self.get_session_any(None)
60
60
 
61
- return await sender.send_and_subscribe(event, content, timeout)
61
+ return sender.send_and_subscribe(event, content, timeout)
62
62
 
63
63
  async def preclose(self):
64
64
  for session in self.__sessionSet:
@@ -33,11 +33,11 @@ class Client(ABC):
33
33
 
34
34
  # 打开会话
35
35
  @abstractmethod
36
- def open(self) -> Session | Future: ...
36
+ async def open(self) -> Session: ...
37
37
 
38
38
  # 打开会话或出异常(即要求第一次是连接成功的)
39
39
  @abstractmethod
40
- def open_or_throw(self) -> Session | Future: ...
40
+ async def open_or_throw(self) -> Session: ...
41
41
 
42
42
 
43
43
  class ClientInternal(Client):
@@ -86,11 +86,11 @@ class ClientBase(ClientInternal, ABC):
86
86
 
87
87
  return clientChannel.get_session()
88
88
 
89
- def open(self) -> Awaitable[Session]:
90
- return self._open_do(False)
89
+ async def open(self) -> Session:
90
+ return await self._open_do(False)
91
91
 
92
- def open_or_throw(self) -> Awaitable[Session]:
93
- return self._open_do(True)
92
+ async def open_or_throw(self) -> Session:
93
+ return await self._open_do(True)
94
94
 
95
95
  @abstractmethod
96
96
  def create_connector(self):
@@ -8,7 +8,7 @@ from socketd.transport.core.ChannelInternal import ChannelInternal
8
8
  from socketd.transport.core.Costants import Constants
9
9
  from socketd.transport.core.impl.LogConfig import log
10
10
  from socketd.transport.core.impl.SessionDefault import SessionDefault
11
- from socketd.transport.stream.StreamManger import StreamInternal
11
+ from socketd.transport.stream.Stream import StreamInternal
12
12
  from socketd.transport.core.impl.ChannelBase import ChannelBase
13
13
  from socketd.transport.client.ClientConnector import ClientConnector
14
14
 
@@ -21,20 +21,17 @@ class ClientSession:
21
21
  ...
22
22
 
23
23
  @abc.abstractmethod
24
- async def send(self, event: str, content: Entity) -> SendStream:
24
+ def send(self, event: str, content: Entity) -> SendStream:
25
25
  ...
26
26
 
27
27
  @abc.abstractmethod
28
- async def send_and_request(self, event: str, content: Entity, timeout: int = 0) -> RequestStream:
28
+ def send_and_request(self, event: str, content: Entity, timeout: int = 0) -> RequestStream:
29
29
  ...
30
30
 
31
31
  @abc.abstractmethod
32
- async def send_and_subscribe(self, event: str, content: Entity, timeout: int = 0) -> SubscribeStream:
32
+ def send_and_subscribe(self, event: str, content: Entity, timeout: int = 0) -> SubscribeStream:
33
33
  ...
34
34
 
35
- async def close_starting(self):
36
- self.preclose()
37
-
38
35
  @abc.abstractmethod
39
36
  async def preclose(self):
40
37
  ...
@@ -9,7 +9,7 @@ from socketd.transport.core.Frame import Frame
9
9
  from socketd.transport.core.Message import Message
10
10
  from abc import abstractmethod, ABC
11
11
 
12
- from socketd.transport.stream.StreamManger import StreamInternal
12
+ from socketd.transport.stream.Stream import StreamInternal
13
13
 
14
14
 
15
15
  class Channel(ABC):
@@ -3,7 +3,7 @@ from typing import Callable
3
3
 
4
4
  from socketd.transport.core.Frame import Frame
5
5
  from socketd.transport.core.Message import MessageInternal
6
- from socketd.transport.stream.StreamManger import StreamInternal
6
+ from socketd.transport.stream.Stream import StreamInternal
7
7
  from socketd.transport.core import Channel
8
8
 
9
9
 
@@ -10,7 +10,7 @@ from socketd.transport.core.entity.EntityDefault import EntityDefault
10
10
  from socketd.transport.core.FragmentAggregator import FragmentAggregator
11
11
  from socketd.transport.core.fragment.FragmentAggregatorDefault import FragmentAggregatorDefault
12
12
  from socketd.transport.core.FragmentHandler import FragmentHandler
13
- from socketd.transport.stream.StreamManger import StreamInternal
13
+ from socketd.transport.stream.Stream import StreamInternal
14
14
 
15
15
 
16
16
  class FragmentHandlerBase(FragmentHandler, ABC):
@@ -9,8 +9,8 @@ from socketd.transport.core.ChannelSupporter import ChannelSupporter
9
9
  from socketd.transport.core.Message import MessageInternal, Message
10
10
  from socketd.transport.core.entity.MessageBuilder import MessageBuilder
11
11
  from socketd.transport.core.impl.LogConfig import log
12
- from socketd.transport.stream.Stream import Stream
13
- from socketd.transport.stream.StreamManger import StreamManger, StreamInternal
12
+ from socketd.transport.stream.Stream import Stream, StreamInternal
13
+ from socketd.transport.stream.StreamManger import StreamManger
14
14
  from socketd.transport.core.impl.ChannelBase import ChannelBase
15
15
  from socketd.transport.core.Costants import Constants
16
16
  from socketd.transport.core.Flags import Flags
@@ -12,7 +12,7 @@ from socketd.transport.core.EntityMetas import EntityMetas
12
12
  from socketd.transport.core.Frame import Frame
13
13
  from socketd.transport.core.impl.LogConfig import log
14
14
  from socketd.transport.core.listener.SimpleListener import SimpleListener
15
- from socketd.transport.stream.StreamManger import StreamInternal
15
+ from socketd.transport.stream.Stream import StreamInternal
16
16
  from socketd.utils.RunUtils import RunUtils
17
17
 
18
18
 
@@ -16,6 +16,11 @@ from socketd.transport.stream.SubscribeStream import SubscribeStream
16
16
 
17
17
  from loguru import logger
18
18
 
19
+ from socketd.transport.stream.impl.RequestStreamImpl import RequestStreamImpl
20
+ from socketd.transport.stream.impl.SendStreamImpl import SendStreamImpl
21
+ from socketd.transport.stream.impl.SubscribeStreamImpl import SubscribeStreamImpl
22
+ from socketd.utils.RunUtils import RunUtils
23
+
19
24
 
20
25
  class SessionDefault(SessionBase):
21
26
 
@@ -41,27 +46,27 @@ class SessionDefault(SessionBase):
41
46
  async def send_ping(self):
42
47
  await self._channel.send_ping()
43
48
 
44
- async def send(self, topic: str, content: Entity) -> SendStream:
49
+ def send(self, topic: str, content: Entity) -> SendStream:
45
50
  message = MessageBuilder().sid(self.generate_id()).event(topic).entity(content).build()
46
51
 
47
- stream: SendStream = SendStream(message.sid())
48
- await self._channel.send(Frame(Flags.Message, message), stream)
52
+ stream: SendStream = SendStreamImpl(message.sid())
53
+ RunUtils.taskTry(self._channel.send(Frame(Flags.Message, message), stream))
49
54
  return stream
50
55
 
51
- async def send_and_request(self, event: str, content: Entity,
56
+ def send_and_request(self, event: str, content: Entity,
52
57
  timeout: int = 100) -> RequestStream:
53
58
 
54
59
  if timeout < 100:
55
60
  timeout = self._channel.get_config().get_request_timeout() / 1000
56
61
  message = MessageBuilder().sid(self.generate_id()).event(event).entity(content).build()
57
- stream = RequestStream(message.sid(), timeout)
58
- await self._channel.send(Frame(Flags.Request, message), stream)
62
+ stream:RequestStream = RequestStreamImpl(message.sid(), timeout)
63
+ RunUtils.taskTry(self._channel.send(Frame(Flags.Request, message), stream))
59
64
  return stream
60
65
 
61
- async def send_and_subscribe(self, event: str, content: Entity, timeout: int = 0):
66
+ def send_and_subscribe(self, event: str, content: Entity, timeout: int = 0):
62
67
  message = MessageBuilder().sid(self.generate_id()).event(event).entity(content).build()
63
- stream = SubscribeStream(message.sid(), timeout)
64
- await self._channel.send(Frame(Flags.Subscribe, message), stream)
68
+ stream:SubscribeStream = SubscribeStreamImpl(message.sid(), timeout)
69
+ RunUtils.taskTry(self._channel.send(Frame(Flags.Subscribe, message), stream))
65
70
  return stream
66
71
 
67
72
  async def reply(self, from_msg: Message, content: Entity):
@@ -0,0 +1,34 @@
1
+ from abc import abstractmethod
2
+ from typing import Callable
3
+ from socketd.transport.stream.Stream import Stream
4
+ from socketd.transport.core.Entity import Reply
5
+
6
+
7
+ class RequestStream(Stream):
8
+ @abstractmethod
9
+ async def get(self) -> Reply:
10
+ ...
11
+
12
+ @abstractmethod
13
+ def then_error(self, onError: Callable[[Exception], None]) -> 'SendStream':
14
+ """
15
+ 异常发生
16
+ :param onError: 当异常发生时执行的函数,接受一个异常参数
17
+ """
18
+ ...
19
+
20
+ @abstractmethod
21
+ def then_progress(self, onProgress: Callable[[bool, int, int], None]) -> 'SendStream':
22
+ """
23
+ 进度发生时
24
+ :param onProgress (isSend, val, max)
25
+ """
26
+ ...
27
+
28
+ @abstractmethod
29
+ def then_reply(self, onReply: Callable[[Reply], None]) -> 'SendStream':
30
+ """
31
+ 答复发生时
32
+ """
33
+ ...
34
+
@@ -0,0 +1,22 @@
1
+ from abc import abstractmethod
2
+ from typing import Callable
3
+
4
+ from socketd.transport.stream.Stream import Stream
5
+
6
+
7
+ class SendStream(Stream):
8
+ @abstractmethod
9
+ def then_error(self, onError: Callable[[Exception], None]) -> 'SendStream':
10
+ """
11
+ 异常发生
12
+ :param onError: 当异常发生时执行的函数,接受一个异常参数
13
+ """
14
+ ...
15
+
16
+ @abstractmethod
17
+ def then_progress(self, onProgress: Callable[[bool, int, int], None]) -> 'SendStream':
18
+ """
19
+ 进度发生时
20
+ :param onProgress (isSend, val, max)
21
+ """
22
+ ...
@@ -1,7 +1,21 @@
1
1
  import asyncio
2
2
  from abc import ABC, abstractmethod
3
3
 
4
- from socketd.transport.stream.Stream import Stream
4
+ from socketd.transport.stream.StreamManger import StreamManger
5
+
6
+
7
+ class Stream(ABC):
8
+
9
+ @abstractmethod
10
+ def sid(self) -> str:
11
+ """流ID"""
12
+ ...
13
+
14
+ @abstractmethod
15
+ def is_done(self):
16
+ """是否结束接收"""
17
+ ...
18
+
5
19
 
6
20
 
7
21
  class StreamInternal(Stream, ABC):
@@ -13,7 +27,7 @@ class StreamInternal(Stream, ABC):
13
27
  def timeout(self) -> float: ...
14
28
 
15
29
  @abstractmethod
16
- def insurance_start(self, streamManger: 'StreamManger', streamTimeout: float) -> None: ...
30
+ def insurance_start(self, streamManger: StreamManger, streamTimeout: float) -> None: ...
17
31
 
18
32
  @abstractmethod
19
33
  def insurance_cancel(self) -> None: ...
@@ -25,17 +39,4 @@ class StreamInternal(Stream, ABC):
25
39
  def on_error(self, error): ...
26
40
 
27
41
  @abstractmethod
28
- def on_progress(self, is_send, val, max_val): ...
29
-
30
-
31
- class StreamManger(ABC):
32
-
33
- @abstractmethod
34
- def add_stream(self, sid: str, stream: StreamInternal): ...
35
-
36
- @abstractmethod
37
- def get_stream(self, sid: str) -> StreamInternal: ...
38
-
39
- @abstractmethod
40
- def remove_stream(self, sid: str): ...
41
-
42
+ def on_progress(self, is_send, val, max_val): ...
@@ -0,0 +1,13 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ class StreamManger(ABC):
4
+
5
+ @abstractmethod
6
+ def add_stream(self, sid: str, stream: 'StreamInternal'): ...
7
+
8
+ @abstractmethod
9
+ def get_stream(self, sid: str) -> 'StreamInternal': ...
10
+
11
+ @abstractmethod
12
+ def remove_stream(self, sid: str): ...
13
+
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
 
3
- from socketd.transport.stream.StreamManger import StreamManger, StreamInternal
3
+ from socketd.transport.stream.Stream import StreamInternal
4
+ from socketd.transport.stream.StreamManger import StreamManger
4
5
 
5
6
  logger = logging.getLogger(__name__)
6
7
 
@@ -0,0 +1,30 @@
1
+ from abc import abstractmethod
2
+ from typing import Callable
3
+
4
+ from socketd.transport.core.Entity import Reply
5
+ from socketd.transport.stream.Stream import Stream
6
+
7
+
8
+ class SubscribeStream(Stream):
9
+ @abstractmethod
10
+ def then_error(self, onError: Callable[[Exception], None]) -> 'SubscribeStream':
11
+ """
12
+ 异常发生
13
+ :param onError: 当异常发生时执行的函数,接受一个异常参数
14
+ """
15
+ ...
16
+
17
+ @abstractmethod
18
+ def then_progress(self, onProgress: Callable[[bool, int, int], None]) -> 'SubscribeStream':
19
+ """
20
+ 进度发生时
21
+ :param onProgress (isSend, val, max)
22
+ """
23
+ ...
24
+
25
+ @abstractmethod
26
+ def then_reply(self, onReply: Callable[[Reply], None]) -> 'SubscribeStream':
27
+ """
28
+ 答复发生时
29
+ """
30
+ ...
@@ -0,0 +1,47 @@
1
+ import asyncio
2
+ from typing import Callable
3
+
4
+ from socketd.exception.SocketDExecption import SocketDTimeoutException, SocketDException
5
+ from socketd.transport.core.Costants import Constants
6
+ from socketd.transport.core.Entity import Reply
7
+ from socketd.transport.core.Message import MessageInternal
8
+ from socketd.transport.stream.RequestStream import RequestStream
9
+ from socketd.transport.stream.impl.StreamBase import StreamBase
10
+ from socketd.transport.utils.CompletableFuture import CompletableFuture
11
+
12
+
13
+ class RequestStreamImpl(StreamBase, RequestStream):
14
+ def __init__(self, sid: str, timeout: int):
15
+ super().__init__(sid, Constants.DEMANDS_SINGLE, timeout)
16
+ self.__future: CompletableFuture = CompletableFuture()
17
+
18
+ def is_done(self):
19
+ return self.__future.done()
20
+
21
+ def __await__(self):
22
+ try:
23
+ return self.__future.get(self.timeout() / 1000.0)
24
+ except asyncio.TimeoutError as _e:
25
+ raise SocketDTimeoutException(f"Request reply timeout>{self.timeout()} sid={self.sid()}")
26
+ except Exception as _e:
27
+ raise SocketDException(f"Request failed, sid= sid={self.sid()} {str(_e)}")
28
+
29
+ async def get(self) -> Reply:
30
+ if self.__future.done():
31
+ return self.__future.get_result()
32
+ return await self.__await__()
33
+
34
+ async def on_reply(self, reply: MessageInternal):
35
+ return await self.__future.set_result(reply)
36
+
37
+ def then_reply(self, onReply: Callable[[MessageInternal], None]) -> RequestStream:
38
+ self.__future.then_callback(onReply)
39
+ return self
40
+
41
+ def then_error(self, onError: Callable[[Exception], None]) -> RequestStream:
42
+ super().then_error_do(onError)
43
+ return self
44
+
45
+ def then_progress(self, onProgress: Callable[[bool, int, int], None]) -> RequestStream:
46
+ super().then_progress_do(onProgress)
47
+ return self
@@ -0,0 +1,25 @@
1
+ from typing import Callable
2
+
3
+ from socketd.transport.core.Costants import Constants
4
+ from socketd.transport.stream.SendStream import SendStream
5
+ from socketd.transport.stream.impl.StreamBase import StreamBase
6
+
7
+
8
+ class SendStreamImpl(StreamBase, SendStream):
9
+ def __init__(self, sid: str):
10
+ super().__init__(sid, Constants.DEMANDS_ZERO, 0)
11
+
12
+ def is_done(self):
13
+ return True
14
+
15
+ async def on_reply(self, reply):
16
+ ...
17
+
18
+ def then_error(self, onError: Callable[[Exception], None]) -> 'SendStream':
19
+ super().then_error_do(onError)
20
+ return self
21
+
22
+
23
+ def then_progress(self, onProgress: Callable[[bool, int, int], None]) -> 'SendStream':
24
+ super().then_progress(onProgress)
25
+ return self
@@ -3,7 +3,9 @@ from abc import ABC
3
3
  from typing import Callable, Optional
4
4
 
5
5
  from socketd.exception.SocketDExecption import SocketDTimeoutException
6
- from socketd.transport.stream.StreamManger import StreamInternal, StreamManger
6
+ from socketd.transport.core.Message import MessageInternal
7
+ from socketd.transport.stream.Stream import StreamInternal
8
+ from socketd.transport.stream.StreamManger import StreamManger
7
9
  from socketd.transport.utils.CompletableFuture import CompletableFuture
8
10
 
9
11
 
@@ -11,36 +13,35 @@ class StreamBase(StreamInternal, ABC):
11
13
  """流接收器基类"""
12
14
 
13
15
  def __init__(self, sid: str, demands: int, timeout: int):
14
- self.__onError: Callable[[Exception], None] = None
15
16
  self.__sid = sid
16
17
  self.__timeout = timeout
17
18
  self.__demands = demands
19
+
20
+ self.__onError: Callable[[Exception], None] = None
18
21
  self.__doOnError: Callable[[Exception], None] = None
19
22
  self.__doOnProgress: Callable[[bool, int, int], None] = None
23
+
20
24
  self.__insuranceFuture: Optional[asyncio.Future] = None
21
25
 
22
- def on_error(self, error: Exception):
23
- if error:
24
- self.__doOnError(error)
26
+ def sid(self) -> str:
27
+ return self.__sid
25
28
 
26
29
  def is_done(self):
27
30
  return True
28
31
 
29
- def then_progress(self, on_progress: Callable[[bool, int, int], None]):
30
- pass
31
-
32
- def get_sid(self) -> str:
33
- return self.__sid
34
-
35
- def timeout(self):
36
- return self.__timeout
37
-
38
- def then_error(self, onError: Callable[[Exception], None]):
32
+ def then_error_do(self, onError: Callable[[Exception], None]):
39
33
  self.__onError = onError
40
34
 
35
+ def then_progress_do(self, onProgress: Callable[[bool, int, int], None]):
36
+ self.__doOnProgress = onProgress
37
+
41
38
  def demands(self) -> int:
42
39
  return self.__demands
43
40
 
41
+ def timeout(self):
42
+ return self.__timeout
43
+
44
+ # 保险开始(避免永久没有回调,造成内存不能释放)
44
45
  def insurance_start(self, streamManger: StreamManger, streamTimeout: float) -> None:
45
46
  if self.__insuranceFuture:
46
47
  return
@@ -53,10 +54,21 @@ class StreamBase(StreamInternal, ABC):
53
54
  self.__insuranceFuture = CompletableFuture(__insuranceFuture())
54
55
  asyncio.run_coroutine_threadsafe(self.__insuranceFuture.get(streamTimeout), asyncio.get_running_loop())
55
56
 
57
+ # 保险取消
56
58
  def insurance_cancel(self) -> None:
57
59
  if self.__insuranceFuture:
58
60
  self.__insuranceFuture.cancel()
59
61
 
62
+ def on_reply(self, reply:MessageInternal):
63
+ ...
64
+
65
+ def on_error(self, error: Exception):
66
+ if error:
67
+ self.__doOnError(error)
68
+
60
69
  def on_progress(self, is_send, val, max_val):
61
70
  if self.__doOnProgress:
62
71
  self.__doOnProgress(is_send, val, max_val)
72
+
73
+
74
+