socket.d 2.4.10.4__tar.gz → 2.4.10.6__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/PKG-INFO +1 -1
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/setup.py +1 -1
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socket.d.egg-info/PKG-INFO +1 -1
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientBase.py +3 -3
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientChannel.py +7 -7
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Channel.py +1 -1
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/impl/ChannelDefault.py +4 -4
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/impl/LogConfig.py +4 -2
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/impl/ProcessorDefault.py +13 -17
- socket.d-2.4.10.6/socketd/transport/core/listener/EventListener.py +57 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/server/Server.py +8 -1
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_aio_tcp/TcpAioClientConnector.py +1 -1
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/WsAioClientConnector.py +1 -1
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/impl/AIOWebSocketClientImpl.py +2 -1
- socket.d-2.4.10.4/socketd/transport/core/listener/EventListener.py +0 -57
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/README.md +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/setup.cfg +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socket.d.egg-info/SOURCES.txt +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socket.d.egg-info/dependency_links.txt +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socket.d.egg-info/requires.txt +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socket.d.egg-info/top_level.txt +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socket.d.egg-info/zip-safe +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/SocketD.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/broker/BrokerFragmentHandler.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/broker/BrokerListener.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/broker/BrokerListenerBase.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/broker/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/cluster/ClusterClient.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/cluster/ClusterClientSession.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/cluster/LoadBalancer.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/cluster/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/exception/SocketDExecption.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/exception/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/Client.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientConfig.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientConfigHandler.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientConnectHandler.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientConnector.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientConnectorBase.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientHandshakeResult.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientHeartbeatHandler.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientProvider.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/ClientSession.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/client/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Asserts.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/ChannelAssistant.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/ChannelInternal.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/ChannelSupporter.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Codec.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Config.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Costants.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Entity.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/EntityMetas.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Flags.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/FragmentAggregator.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/FragmentHandler.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Frame.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Frames.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/HandshakeDefault.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/IdGenerator.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Listener.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Message.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Processor.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/Session.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/codec/Buffer.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/codec/ByteBufferCodecReader.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/codec/ByteBufferCodecWriter.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/codec/CodecDefault.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/codec/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/entity/EntityDefault.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/entity/FileEntity.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/entity/MessageBuilder.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/entity/MessageDefault.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/entity/StringEntity.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/entity/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/fragment/FragmentAggregatorDefault.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/fragment/FragmentHandlerBase.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/fragment/FragmentHandlerDefault.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/fragment/FragmentHolder.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/fragment/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/impl/ChannelBase.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/impl/ConfigBase.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/impl/SessionBase.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/impl/SessionDefault.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/impl/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/listener/PathListener.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/listener/PathMapper.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/listener/PipelineListener.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/listener/SimpleListener.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/listener/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/server/ServerBase.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/server/ServerConfig.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/server/ServerProvider.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/server/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/stream/RequestStream.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/stream/SendStream.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/stream/Stream.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/stream/StreamBase.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/stream/StreamManger.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/stream/StreamMangerDefault.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/stream/SubscribeStream.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/stream/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/utils/AsyncUtil.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/utils/CompletableFuture.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/utils/StrUtil.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/utils/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/utils/async_api/AtomicRefer.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/utils/async_api/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/utils/sync_api/AtomicRefer.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/utils/sync_api/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_aio_tcp/TCPAIOServer.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_aio_tcp/TCPStreamIO.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_aio_tcp/TcpAIOChannelAssistant.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_aio_tcp/TcpAioClient.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_aio_tcp/TcpAioProvider.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_aio_tcp/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/WsAioChannelAssistant.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/WsAioClient.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/WsAioProvider.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/WsAioServer.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/__init__.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/impl/AIOConnect.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/impl/AIOServe.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/impl/AIOWebSocketServerImpl.py +0 -0
- {socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd_websocket/impl/__init__.py +0 -0
@@ -11,10 +11,10 @@ from socketd.transport.core.ChannelAssistant import ChannelAssistant
|
|
11
11
|
from socketd.transport.core.Costants import Constants
|
12
12
|
from socketd.transport.core.Session import Session
|
13
13
|
from socketd.transport.client.ClientHeartbeatHandler import ClientHeartbeatHandler
|
14
|
+
from socketd.transport.core.impl.LogConfig import log
|
14
15
|
from socketd.transport.core.impl.ProcessorDefault import ProcessorDefault
|
15
16
|
from socketd.transport.client.ClientConfig import ClientConfig
|
16
17
|
|
17
|
-
from loguru import logger
|
18
18
|
|
19
19
|
|
20
20
|
class ClientBase(ClientInternal, ABC):
|
@@ -76,13 +76,13 @@ class ClientBase(ClientInternal, ABC):
|
|
76
76
|
|
77
77
|
try:
|
78
78
|
await clientChannel.connect()
|
79
|
-
|
79
|
+
log.info(f"Socket.D client successfully connected: link={self.get_config().get_link_url()}")
|
80
80
|
except Exception as e:
|
81
81
|
if isThrow:
|
82
82
|
await clientChannel.close(code=Constants.CLOSE2008_OPEN_FAIL)
|
83
83
|
raise SocketDException(f"Socket.D client Connection failed {e}")
|
84
84
|
else:
|
85
|
-
|
85
|
+
log.info(f"Socket.D client Connection failed: link={self.get_config().get_link_url()}")
|
86
86
|
|
87
87
|
return clientChannel.get_session()
|
88
88
|
|
@@ -6,11 +6,11 @@ from socketd.transport.client.Client import ClientInternal
|
|
6
6
|
from socketd.transport.core.Asserts import Asserts
|
7
7
|
from socketd.transport.core.ChannelInternal import ChannelInternal
|
8
8
|
from socketd.transport.core.Costants import Constants
|
9
|
+
from socketd.transport.core.impl.LogConfig import log
|
9
10
|
from socketd.transport.core.impl.SessionDefault import SessionDefault
|
10
11
|
from socketd.transport.stream.StreamManger import StreamInternal
|
11
12
|
from socketd.transport.core.impl.ChannelBase import ChannelBase
|
12
13
|
from socketd.transport.client.ClientConnector import ClientConnector
|
13
|
-
from loguru import logger
|
14
14
|
|
15
15
|
from socketd.transport.client.ClientHeartbeatHandler import ClientHeartbeatHandlerDefault
|
16
16
|
from socketd.transport.utils.sync_api.AtomicRefer import AtomicRefer
|
@@ -40,7 +40,7 @@ class ClientChannel(ChannelBase):
|
|
40
40
|
if not self.__heartbeatScheduledFuture.done():
|
41
41
|
self.__heartbeatScheduledFuture.cancel()
|
42
42
|
except Exception as e:
|
43
|
-
|
43
|
+
log.warning(e)
|
44
44
|
|
45
45
|
async def __heartbeatScheduled(self) -> None:
|
46
46
|
while True:
|
@@ -60,7 +60,7 @@ class ClientChannel(ChannelBase):
|
|
60
60
|
return
|
61
61
|
|
62
62
|
if Asserts.is_closed_and_end(self.__real):
|
63
|
-
|
63
|
+
log.debug("Client channel is closed (pause heartbeat), sessionId=" + self.get_session().session_id())
|
64
64
|
await self.close(self.__real.is_closed())
|
65
65
|
return
|
66
66
|
|
@@ -136,7 +136,7 @@ class ClientChannel(ChannelBase):
|
|
136
136
|
if self.__real:
|
137
137
|
await self.__real.close(code)
|
138
138
|
except Exception as e:
|
139
|
-
|
139
|
+
log.error(e)
|
140
140
|
finally:
|
141
141
|
await super().close(code)
|
142
142
|
|
@@ -150,7 +150,7 @@ class ClientChannel(ChannelBase):
|
|
150
150
|
self.init_heartbeat()
|
151
151
|
await self.internalCheck()
|
152
152
|
|
153
|
-
@
|
153
|
+
@log.catch
|
154
154
|
async def connect(self):
|
155
155
|
with self.__isConnecting as isConnected:
|
156
156
|
if isConnected:
|
@@ -166,9 +166,9 @@ class ClientChannel(ChannelBase):
|
|
166
166
|
self.__real.set_session(self.__sessionShell)
|
167
167
|
self.set_handshake(self.__real.get_handshake())
|
168
168
|
except TimeoutError as t:
|
169
|
-
|
169
|
+
log.error(f"socketD connect timed out: {t}")
|
170
170
|
except Exception as e:
|
171
|
-
|
171
|
+
log.error(e)
|
172
172
|
raise SocketDChannelException(f"socketD connect")
|
173
173
|
finally:
|
174
174
|
self.__isConnecting.set(False)
|
@@ -106,7 +106,7 @@ class ChannelDefault(ChannelBase, ChannelInternal):
|
|
106
106
|
if stream is not None:
|
107
107
|
stream.on_progress(True, 1, 1)
|
108
108
|
|
109
|
-
def retrieve(self, frame: Frame, stream: StreamInternal) -> None:
|
109
|
+
async def retrieve(self, frame: Frame, stream: StreamInternal) -> None:
|
110
110
|
"""接收(接收答复帧)"""
|
111
111
|
if stream is not None:
|
112
112
|
if stream.demands() < Constants.DEMANDS_MULTIPLE or frame.flag() == Flags.ReplyEnd:
|
@@ -115,11 +115,11 @@ class ChannelDefault(ChannelBase, ChannelInternal):
|
|
115
115
|
|
116
116
|
if stream.demands() < Constants.DEMANDS_MULTIPLE:
|
117
117
|
# 单收时,内部已经是异步机制
|
118
|
-
stream.on_reply(frame.message())
|
118
|
+
await stream.on_reply(frame.message())
|
119
119
|
else:
|
120
|
-
#stream.on_reply(frame.message())
|
121
120
|
# 改为异步处理,避免卡死Io线程
|
122
|
-
asyncio.get_running_loop().run_in_executor(self.get_config().get_exchange_executor(),
|
121
|
+
asyncio.get_running_loop().run_in_executor(self.get_config().get_exchange_executor(),
|
122
|
+
lambda _m: asyncio.run(stream.on_reply(_m)), frame.message())
|
123
123
|
else:
|
124
124
|
log.debug(
|
125
125
|
f"{self.get_config().get_role_name()} stream not found, sid={frame.message().sid()}, sessionId={self.get_session().session_id()}")
|
@@ -2,10 +2,12 @@
|
|
2
2
|
from loguru import logger as _logger
|
3
3
|
|
4
4
|
import logging
|
5
|
+
|
5
6
|
# socket.d 默认
|
6
7
|
logger = logging.getLogger("socketD")
|
7
8
|
# 异步默认日志
|
8
9
|
logging.getLogger("asyncio").setLevel(logging.WARNING)
|
9
10
|
# 少用默认logging ,因为他会阻塞你的线程
|
10
|
-
|
11
|
-
|
11
|
+
# 删除原本的处理器
|
12
|
+
_logger.remove()
|
13
|
+
log = _logger.opt(colors=True)
|
@@ -1,8 +1,6 @@
|
|
1
1
|
import asyncio
|
2
2
|
from abc import ABC
|
3
|
-
from typing import Optional
|
4
|
-
|
5
|
-
from loguru import logger
|
3
|
+
from typing import Optional
|
6
4
|
|
7
5
|
from socketd.exception.SocketDExecption import SocketDAlarmException, SocketDConnectionException
|
8
6
|
from socketd.transport.core.ChannelInternal import ChannelInternal
|
@@ -13,17 +11,15 @@ from socketd.transport.core.Costants import Constants
|
|
13
11
|
from socketd.transport.core.Flags import Flags
|
14
12
|
from socketd.transport.core.EntityMetas import EntityMetas
|
15
13
|
from socketd.transport.core.Frame import Frame
|
14
|
+
from socketd.transport.core.impl.LogConfig import log
|
16
15
|
from socketd.transport.core.listener.SimpleListener import SimpleListener
|
17
|
-
from socketd.transport.stream.Stream import Stream
|
18
16
|
from socketd.transport.stream.StreamManger import StreamInternal
|
19
|
-
from socketd.transport.utils.AsyncUtil import AsyncUtil
|
20
17
|
|
21
18
|
|
22
19
|
class ProcessorDefault(Processor, ABC):
|
23
20
|
|
24
21
|
def __init__(self):
|
25
22
|
self.listener = SimpleListener()
|
26
|
-
self.log = logger.opt()
|
27
23
|
|
28
24
|
def set_listener(self, listener):
|
29
25
|
if listener is not None:
|
@@ -31,9 +27,9 @@ class ProcessorDefault(Processor, ABC):
|
|
31
27
|
|
32
28
|
async def on_receive(self, channel: ChannelInternal, frame):
|
33
29
|
if channel.get_config().client_mode():
|
34
|
-
|
30
|
+
log.debug(f"C-REV:{frame}")
|
35
31
|
else:
|
36
|
-
|
32
|
+
log.debug(f"S-REV:{frame}")
|
37
33
|
|
38
34
|
if frame.flag() == Flags.Connect:
|
39
35
|
# if server
|
@@ -42,7 +38,7 @@ class ProcessorDefault(Processor, ABC):
|
|
42
38
|
|
43
39
|
async def _future(r: bool, e: Exception):
|
44
40
|
if r:
|
45
|
-
|
41
|
+
# 如果无异常
|
46
42
|
if channel.is_valid():
|
47
43
|
try:
|
48
44
|
await channel.send_connack(connectMessage)
|
@@ -67,7 +63,8 @@ class ProcessorDefault(Processor, ABC):
|
|
67
63
|
if frame.flag() == Flags.Close:
|
68
64
|
raise SocketDConnectionException("Connection request was rejected")
|
69
65
|
|
70
|
-
|
66
|
+
log.warning("{} channel handshake is None, sessionId={}", channel.get_config().get_role_name(),
|
67
|
+
channel.get_session().session_id())
|
71
68
|
return
|
72
69
|
|
73
70
|
# 更新最后活动时间
|
@@ -79,9 +76,9 @@ class ProcessorDefault(Processor, ABC):
|
|
79
76
|
elif frame.flag() == Flags.Pong:
|
80
77
|
pass
|
81
78
|
elif frame.flag() == Flags.Close:
|
82
|
-
code:int = 0
|
79
|
+
code: int = 0
|
83
80
|
|
84
|
-
if frame.message()
|
81
|
+
if frame.message() is not None:
|
85
82
|
code = frame.message().meta_as_int("code")
|
86
83
|
|
87
84
|
if code == 0:
|
@@ -141,7 +138,7 @@ class ProcessorDefault(Processor, ABC):
|
|
141
138
|
if isReply:
|
142
139
|
if stream:
|
143
140
|
stream.on_progress(False, streamIndex, streamTotal)
|
144
|
-
channel.retrieve(frame, stream)
|
141
|
+
await channel.retrieve(frame, stream)
|
145
142
|
else:
|
146
143
|
self.on_message(channel, frame.message())
|
147
144
|
|
@@ -153,7 +150,7 @@ class ProcessorDefault(Processor, ABC):
|
|
153
150
|
await self.listener.on_open(channel.get_session())
|
154
151
|
channel.do_open_future(True, None)
|
155
152
|
except Exception as e:
|
156
|
-
|
153
|
+
log.warning("{} channel listener onOpen error", channel.get_config().get_role_name(), e)
|
157
154
|
channel.do_open_future(False, e)
|
158
155
|
|
159
156
|
def on_message(self, channel: ChannelInternal, message: Message):
|
@@ -163,12 +160,12 @@ class ProcessorDefault(Processor, ABC):
|
|
163
160
|
try:
|
164
161
|
await self.listener.on_message(channel.get_session(), message)
|
165
162
|
except Exception as e:
|
166
|
-
|
163
|
+
log.warning("{} channel listener onMessage error", channel.get_config().get_role_name(), e)
|
167
164
|
self.on_error(channel, e)
|
168
165
|
|
169
166
|
def on_close(self, channel: ChannelInternal):
|
170
167
|
if channel.is_closed() <= Constants.CLOSE1000_PROTOCOL_CLOSE_STARTING:
|
171
|
-
self.on_close_internal(channel, Constants.CLOSE2003_DISCONNECTION)
|
168
|
+
asyncio.create_task(self.on_close_internal(channel, Constants.CLOSE2003_DISCONNECTION))
|
172
169
|
|
173
170
|
async def on_close_internal(self, channel: ChannelInternal, code: int):
|
174
171
|
await channel.close(code)
|
@@ -178,4 +175,3 @@ class ProcessorDefault(Processor, ABC):
|
|
178
175
|
|
179
176
|
def on_error(self, channel: ChannelInternal, error):
|
180
177
|
self.listener.on_error(channel.get_session(), error)
|
181
|
-
|
@@ -0,0 +1,57 @@
|
|
1
|
+
from typing import Callable, Union, Dict
|
2
|
+
|
3
|
+
from socketd.transport.core.Listener import Listener
|
4
|
+
from socketd.transport.core.Session import Session
|
5
|
+
from socketd.transport.core.Message import Message
|
6
|
+
|
7
|
+
|
8
|
+
class EventListener(Listener):
|
9
|
+
"""
|
10
|
+
@author bai
|
11
|
+
@since 2.0
|
12
|
+
"""
|
13
|
+
|
14
|
+
def __init__(self):
|
15
|
+
self._doOnOpenHandler: Union[Callable[[Session], None], None] = None
|
16
|
+
self._doOnMessageHandler: Union[Callable[[Session, Message], None], None] = None
|
17
|
+
self._doOnCloseHandler: Union[Callable[[Session], None], None] = None
|
18
|
+
self._doOnErrorHandler: Union[Callable[[Session, Exception], None], None] = None
|
19
|
+
self._eventRouteSelector: Union[Dict[str, Callable[[Session, Message], None]], None] = None
|
20
|
+
|
21
|
+
def do_on_open(self, _on_open_handler: Callable[[Session, Message], None]) -> 'EventListener':
|
22
|
+
self._doOnOpenHandler = _on_open_handler
|
23
|
+
return self
|
24
|
+
|
25
|
+
def do_on_message(self, _on_message_handler: Callable[[Session], None]) -> 'EventListener':
|
26
|
+
self._doOnMessageHandler = _on_message_handler
|
27
|
+
return self
|
28
|
+
|
29
|
+
def do_on_close(self, _on_close_handler: Callable[[Session, Exception], None]) -> 'EventListener':
|
30
|
+
self._doOnCloseHandler = _on_close_handler
|
31
|
+
return self
|
32
|
+
|
33
|
+
def do_on_error_handler(self, _on_error_handler: Callable[[Session, Exception], None]) -> 'EventListener':
|
34
|
+
self._doOnErrorHandler = _on_error_handler
|
35
|
+
return self
|
36
|
+
|
37
|
+
def do_on(self, event: str, handler: Callable[[Session, Message], None]):
|
38
|
+
self._eventRouteSelector[event] = handler
|
39
|
+
|
40
|
+
async def on_open(self, session: Session):
|
41
|
+
if self._doOnOpenHandler:
|
42
|
+
self._doOnOpenHandler(session)
|
43
|
+
|
44
|
+
async def on_message(self, session: Session, message: Message):
|
45
|
+
if self._doOnMessageHandler:
|
46
|
+
self._doOnMessageHandler(session, message)
|
47
|
+
|
48
|
+
if message_handler := self._eventRouteSelector.get(message.event()):
|
49
|
+
message_handler(session, message)
|
50
|
+
|
51
|
+
def on_close(self, session: Session):
|
52
|
+
if self._doOnCloseHandler:
|
53
|
+
self._doOnCloseHandler(session)
|
54
|
+
|
55
|
+
def on_error(self, session: Session, error: Exception):
|
56
|
+
if self._doOnErrorHandler:
|
57
|
+
self._doOnErrorHandler(session, error)
|
@@ -7,18 +7,25 @@ from websockets.sync.server import WebSocketServer
|
|
7
7
|
from socketd.transport.server.ServerConfig import ServerConfig
|
8
8
|
from socketd.transport.core.Listener import Listener
|
9
9
|
|
10
|
-
|
10
|
+
#服务端接口
|
11
11
|
class Server:
|
12
|
+
#获取台头
|
12
13
|
def get_title(self): ...
|
13
14
|
|
15
|
+
#获取配置
|
14
16
|
def get_config(self) -> ServerConfig: ...
|
15
17
|
|
18
|
+
#配置
|
16
19
|
def config(self, consumer: Callable[[ServerConfig], None]) -> Server: ...
|
17
20
|
|
21
|
+
#监听
|
18
22
|
def listen(self, listener: Listener) -> Server: ...
|
19
23
|
|
24
|
+
#启动
|
20
25
|
def start(self) -> WebSocketServer | Coroutine: ...
|
21
26
|
|
27
|
+
#预停止
|
22
28
|
def prestop(self) -> Coroutine: ...
|
23
29
|
|
30
|
+
#停止
|
24
31
|
def stop(self) -> Coroutine: ...
|
@@ -36,7 +36,7 @@ class TcpAioClientConnector(ClientConnectorBase):
|
|
36
36
|
async def connect(self):
|
37
37
|
# 处理自定义架构的影响
|
38
38
|
loop = asyncio.get_running_loop()
|
39
|
-
tcp_url = self.client.get_config().get_url().replace("
|
39
|
+
tcp_url = self.client.get_config().get_url().replace("-python", "")
|
40
40
|
_sch, _host, _port = tcp_url.replace("//", "").split(":")
|
41
41
|
_port = int(_port.split("/")[0])
|
42
42
|
if self.__top is None:
|
@@ -128,7 +128,8 @@ class AIOWebSocketClientImpl(WebSocketClientProtocol):
|
|
128
128
|
async def on_close(self):
|
129
129
|
await self.client.get_processor().on_close(self.channel)
|
130
130
|
if self.handshake_future is not None:
|
131
|
-
|
131
|
+
if self.__on_receive_tasks:
|
132
|
+
await asyncio.wait(self.__on_receive_tasks, timeout=10)
|
132
133
|
await asyncio.wait([self._handler_future], timeout=10)
|
133
134
|
|
134
135
|
def on_error(self, e):
|
@@ -1,57 +0,0 @@
|
|
1
|
-
from typing import Callable, Union, Dict
|
2
|
-
|
3
|
-
from socketd.transport.core.Listener import Listener
|
4
|
-
from socketd.transport.core.Session import Session
|
5
|
-
from socketd.transport.core.Message import Message
|
6
|
-
|
7
|
-
|
8
|
-
class EventListener(Listener):
|
9
|
-
"""
|
10
|
-
@author bai
|
11
|
-
@since 2.0
|
12
|
-
"""
|
13
|
-
|
14
|
-
def __init__(self):
|
15
|
-
self._do_on_open_handler: Union[Callable[[Session], None], None] = None
|
16
|
-
self._do_on_message_handler: Union[Callable[[Session, Message], None], None] = None
|
17
|
-
self._do_on_close_handler: Union[Callable[[Session], None], None] = None
|
18
|
-
self._do_on_error_handler: Union[Callable[[Session, Exception], None], None] = None
|
19
|
-
self._do_on_message_routing: Union[Dict[str, Callable[[Session, Message], None]], None] = None
|
20
|
-
|
21
|
-
def do_on_open_handler(self, _on_open_handler: Callable[[Session, Message], None]) -> 'EventListener':
|
22
|
-
self._do_on_open_handler = _on_open_handler
|
23
|
-
return self
|
24
|
-
|
25
|
-
def do_on_message_handler(self, _on_message_handler: Callable[[Session], None]) -> 'EventListener':
|
26
|
-
self._do_on_message_handler = _on_message_handler
|
27
|
-
return self
|
28
|
-
|
29
|
-
def do_on_close_handler(self, _on_close_handler: Callable[[Session, Exception], None]) -> 'EventListener':
|
30
|
-
self._do_on_close_handler = _on_close_handler
|
31
|
-
return self
|
32
|
-
|
33
|
-
def do_on_error_handler(self, _on_error_handler: Callable[[Session, Exception], None]) -> 'EventListener':
|
34
|
-
self._do_on_error_handler = _on_error_handler
|
35
|
-
return self
|
36
|
-
|
37
|
-
def do_on(self, event: str, handler: Callable[[Session, Message], None]):
|
38
|
-
self._do_on_message_routing[event] = handler
|
39
|
-
|
40
|
-
async def on_open(self, session: Session):
|
41
|
-
if self._do_on_open_handler:
|
42
|
-
self._do_on_open_handler(session)
|
43
|
-
|
44
|
-
async def on_message(self, session: Session, message: Message):
|
45
|
-
if self._do_on_message_handler:
|
46
|
-
self._do_on_message_handler(session, message)
|
47
|
-
|
48
|
-
if message_handler := self._do_on_message_routing.get(message.event()):
|
49
|
-
message_handler(session, message)
|
50
|
-
|
51
|
-
def on_close(self, session: Session):
|
52
|
-
if self._do_on_close_handler:
|
53
|
-
self._do_on_close_handler(session)
|
54
|
-
|
55
|
-
def on_error(self, session: Session, error: Exception):
|
56
|
-
if self._do_on_error_handler:
|
57
|
-
self._do_on_error_handler(session, error)
|
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
|
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
|
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
|
{socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/codec/ByteBufferCodecReader.py
RENAMED
File without changes
|
{socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/codec/ByteBufferCodecWriter.py
RENAMED
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
|
{socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/fragment/FragmentAggregatorDefault.py
RENAMED
File without changes
|
{socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/fragment/FragmentHandlerBase.py
RENAMED
File without changes
|
{socket.d-2.4.10.4 → socket.d-2.4.10.6}/socketd/transport/core/fragment/FragmentHandlerDefault.py
RENAMED
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|