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.
- {socket.d-2.4.11 → socket.d-2.4.11.1}/PKG-INFO +1 -1
- {socket.d-2.4.11 → socket.d-2.4.11.1}/setup.py +1 -1
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/PKG-INFO +1 -1
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/SOURCES.txt +5 -1
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/SocketD.py +3 -57
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/cluster/ClusterClientSession.py +6 -6
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/Client.py +2 -2
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientBase.py +4 -4
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientChannel.py +1 -1
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientSession.py +3 -6
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Channel.py +1 -1
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/FragmentHandler.py +1 -1
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/FragmentHandlerBase.py +1 -1
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/ChannelDefault.py +2 -2
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/ProcessorDefault.py +1 -1
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/SessionDefault.py +14 -9
- socket.d-2.4.11.1/socketd/transport/stream/RequestStream.py +34 -0
- socket.d-2.4.11.1/socketd/transport/stream/SendStream.py +22 -0
- socket.d-2.4.11/socketd/transport/stream/StreamManger.py → socket.d-2.4.11.1/socketd/transport/stream/Stream.py +17 -16
- socket.d-2.4.11.1/socketd/transport/stream/StreamManger.py +13 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/stream/StreamMangerDefault.py +2 -1
- socket.d-2.4.11.1/socketd/transport/stream/SubscribeStream.py +30 -0
- socket.d-2.4.11.1/socketd/transport/stream/impl/RequestStreamImpl.py +47 -0
- socket.d-2.4.11.1/socketd/transport/stream/impl/SendStreamImpl.py +25 -0
- {socket.d-2.4.11/socketd/transport/stream → socket.d-2.4.11.1/socketd/transport/stream/impl}/StreamBase.py +27 -15
- socket.d-2.4.11.1/socketd/transport/stream/impl/SubscribeStreamImpl.py +36 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/utils/CompletableFuture.py +1 -1
- socket.d-2.4.11.1/socketd/utils/__init__.py +0 -0
- socket.d-2.4.11/socketd/transport/stream/RequestStream.py +0 -36
- socket.d-2.4.11/socketd/transport/stream/SendStream.py +0 -14
- socket.d-2.4.11/socketd/transport/stream/Stream.py +0 -32
- socket.d-2.4.11/socketd/transport/stream/SubscribeStream.py +0 -28
- {socket.d-2.4.11 → socket.d-2.4.11.1}/README.md +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/setup.cfg +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/dependency_links.txt +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/requires.txt +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/top_level.txt +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socket.d.egg-info/zip-safe +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/broker/BrokerFragmentHandler.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/broker/BrokerListener.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/broker/BrokerListenerBase.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/broker/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/cluster/ClusterClient.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/cluster/LoadBalancer.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/cluster/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/exception/SocketDExecption.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/exception/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConfig.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConfigHandler.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConnectHandler.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConnector.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientConnectorBase.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientHandshakeResult.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientHeartbeatHandler.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/ClientProvider.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/client/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Asserts.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/ChannelAssistant.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/ChannelInternal.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/ChannelSupporter.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Codec.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Config.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Costants.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Entity.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/EntityMetas.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Flags.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/FragmentAggregator.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Frame.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Frames.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/HandshakeDefault.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/IdGenerator.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Listener.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Message.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Processor.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/Session.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/Buffer.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/ByteBufferCodecReader.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/ByteBufferCodecWriter.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/CodecDefault.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/codec/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/EntityDefault.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/FileEntity.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/MessageBuilder.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/MessageDefault.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/StringEntity.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/entity/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/FragmentAggregatorDefault.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/FragmentHandlerDefault.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/FragmentHolder.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/ChannelBase.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/ConfigBase.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/LogConfig.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/SessionBase.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/impl/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/EventListener.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/PathListener.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/PipelineListener.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/RouteSelector.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/RouteSelectorDefault.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/SimpleListener.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/listener/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/Server.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/ServerBase.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/ServerConfig.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/ServerProvider.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/server/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/stream/__init__.py +0 -0
- {socket.d-2.4.11/socketd/transport/utils → socket.d-2.4.11.1/socketd/transport/stream/impl}/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/utils/AsyncUtils.py +0 -0
- {socket.d-2.4.11/socketd/transport/utils/async_api → socket.d-2.4.11.1/socketd/transport/utils}/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/utils/async_api/AtomicRefer.py +0 -0
- {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
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/utils/sync_api/AtomicRefer.py +0 -0
- {socket.d-2.4.11/socketd/utils → socket.d-2.4.11.1/socketd/transport/utils/sync_api}/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/utils/RunUtils.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/utils/StrUtils.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TCPAIOServer.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TCPStreamIO.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TcpAIOChannelAssistant.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TcpAioClient.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TcpAioClientConnector.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/TcpAioProvider.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_aio_tcp/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioChannelAssistant.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioClient.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioClientConnector.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioProvider.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/WsAioServer.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/__init__.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/AIOConnect.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/AIOServe.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/AIOWebSocketClientImpl.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/AIOWebSocketServerImpl.py +0 -0
- {socket.d-2.4.11 → socket.d-2.4.11.1}/socketd_websocket/impl/__init__.py +0 -0
@@ -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
|
-
|
48
|
+
def send(self, event: str, content: Entity) -> SendStream:
|
49
49
|
sender = self.get_session_any(None)
|
50
50
|
|
51
|
-
return
|
51
|
+
return sender.send(event, content)
|
52
52
|
|
53
|
-
|
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
|
56
|
+
return sender.send_and_request(event, content, timeout)
|
57
57
|
|
58
|
-
|
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
|
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
|
36
|
+
async def open(self) -> Session: ...
|
37
37
|
|
38
38
|
# 打开会话或出异常(即要求第一次是连接成功的)
|
39
39
|
@abstractmethod
|
40
|
-
def open_or_throw(self) -> Session
|
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) ->
|
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) ->
|
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.
|
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
|
-
|
24
|
+
def send(self, event: str, content: Entity) -> SendStream:
|
25
25
|
...
|
26
26
|
|
27
27
|
@abc.abstractmethod
|
28
|
-
|
28
|
+
def send_and_request(self, event: str, content: Entity, timeout: int = 0) -> RequestStream:
|
29
29
|
...
|
30
30
|
|
31
31
|
@abc.abstractmethod
|
32
|
-
|
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.
|
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.
|
6
|
+
from socketd.transport.stream.Stream import StreamInternal
|
7
7
|
from socketd.transport.core import Channel
|
8
8
|
|
9
9
|
|
{socket.d-2.4.11 → socket.d-2.4.11.1}/socketd/transport/core/fragment/FragmentHandlerBase.py
RENAMED
@@ -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.
|
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
|
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.
|
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
|
-
|
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 =
|
48
|
-
|
52
|
+
stream: SendStream = SendStreamImpl(message.sid())
|
53
|
+
RunUtils.taskTry(self._channel.send(Frame(Flags.Message, message), stream))
|
49
54
|
return stream
|
50
55
|
|
51
|
-
|
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 =
|
58
|
-
|
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
|
-
|
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 =
|
64
|
-
|
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.
|
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:
|
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.
|
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.
|
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
|
23
|
-
|
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
|
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
|
+
|