-
-
Notifications
You must be signed in to change notification settings - Fork 363
feat(TcpSocketClientBase): add TcpSocketClientBase class #6320
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Reviewer's GuideExtract common TCP client logic into an abstract base class, refactor the concrete implementation to derive from it with overridden lifecycle and I/O methods, and switch the client interface to async disposal. Class diagram for TcpSocketClientBase introduction and refactorclassDiagram
class ITcpSocketClient {
<<interface>>
+bool IsConnected
+IPEndPoint? LocalEndPoint
+int ReceiveBufferSize
+bool IsAutoReceive
+Func<ReadOnlyMemory<byte>, ValueTask>? ReceivedCallBack
+int ConnectTimeout
+int SendTimeout
+int ReceiveTimeout
+void SetDataHandler(IDataPackageHandler handler)
+ValueTask<bool> ConnectAsync(IPEndPoint endPoint, CancellationToken token)
+ValueTask<bool> SendAsync(ReadOnlyMemory<byte> data, CancellationToken token)
+ValueTask<Memory<byte>> ReceiveAsync(CancellationToken token)
+ValueTask Close()
+ValueTask DisposeAsync()
}
class TcpSocketClientBase {
<<abstract>>
+bool IsConnected
+IPEndPoint? LocalEndPoint
+int ReceiveBufferSize
+bool IsAutoReceive
+Func<ReadOnlyMemory<byte>, ValueTask>? ReceivedCallBack
+int ConnectTimeout
+int SendTimeout
+int ReceiveTimeout
+virtual void SetDataHandler(IDataPackageHandler handler)
+abstract ValueTask<bool> ConnectAsync(IPEndPoint endPoint, CancellationToken token)
+abstract ValueTask<bool> SendAsync(ReadOnlyMemory<byte> data, CancellationToken token)
+abstract ValueTask<Memory<byte>> ReceiveAsync(CancellationToken token)
+virtual ValueTask Close()
+protected virtual ValueTask DisposeAsync(bool disposing)
+ValueTask DisposeAsync()
}
class DefaultTcpSocketClient {
+override bool IsConnected
+override void SetDataHandler(IDataPackageHandler handler)
+override ValueTask<bool> ConnectAsync(IPEndPoint endPoint, CancellationToken token)
+override ValueTask<bool> SendAsync(ReadOnlyMemory<byte> data, CancellationToken token)
+override ValueTask<Memory<byte>> ReceiveAsync(CancellationToken token)
+override protected ValueTask DisposeAsync(bool disposing)
+ILogger<DefaultTcpSocketClient>? Logger
}
ITcpSocketClient <|.. TcpSocketClientBase
TcpSocketClientBase <|-- DefaultTcpSocketClient
File-Level Changes
Assessment against linked issues
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @ArgoZhang - I've reviewed your changes and they look great!
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #6320 +/- ##
===========================================
- Coverage 100.00% 99.98% -0.02%
===========================================
Files 714 715 +1
Lines 31447 31516 +69
Branches 4437 4447 +10
===========================================
+ Hits 31447 31512 +65
- Misses 0 3 +3
- Partials 0 1 +1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Link issues
fixes #6319
Summary By Copilot
Regression?
Risk
Verification
Packaging changes reviewed?
☑️ Self Check before Merge
Summary by Sourcery
Consolidate TCP socket client behavior into a reusable abstract base class, refactor the default client to leverage it, and modernize the interface and disposal to use asynchronous patterns.
New Features:
Enhancements: