v1.1.6 "Shinpo" - Progress Enhancement
Release Date: July 22, 2025
Code Name: "Shinpo" (進歩 - Progress/Advancement)
Type: Minor Release
🎯 Overview
Version 1.1.6 enhances the JiroClientBase foundation with improved connection handling, thread safety, and enhanced logging capabilities. This release focuses on making client implementations more robust and production-ready with better error handling and connection lifecycle management.
✨ Features Added
- Enhanced Connection Management: New
InitializeAsync
method with comprehensive connection setup and error handling - Thread-Safe Operations: Added
SemaphoreSlim
for connection synchronization to prevent race conditions - Improved RPC Handling: Streamlined server-to-client RPC calls with better request/response tracking
- Enhanced Logging: Request/response correlation with RequestId tracking for better observability
- Flexible Constructor: Constructor now accepts optional HubConnection for more flexible initialization patterns
- Abstract Handler Setup: New
SetupHandlers()
abstract method enforces proper handler implementation
🔄 Changes
Connection Lifecycle Improvements
- Initialization Method: New
InitializeAsync()
with parameters for hub URL, API key, and exception handling - Connection State Management: Automatic detection and handling of existing connections before re-initialization
- API Key Validation: Built-in validation ensures proper authentication configuration
- Graceful Reconnection: Improved reconnection handling with proper state management
Enhanced Event System
- RPC Method Signatures: Simplified RPC event signatures removing unnecessary
Task<>
wrapper for direct return types - Request Correlation: All RPC calls now log with RequestId for better traceability
- Null-Safe Event Handling: Improved null checking for event handlers
- Structured Logging: Enhanced logging format with request/response correlation
Code Quality Improvements
- Thread Safety: Connection operations protected by semaphore
- Error Handling: Comprehensive exception handling in connection methods
- Documentation: Enhanced XML documentation for all public methods
- Validation: Input validation for critical parameters like API keys
🐛 Bug Fixes
- Race Conditions: Fixed potential race conditions during connection initialization
- Event Registration: Resolved timing issues with event setup during connection lifecycle
- Memory Leaks: Improved disposal patterns for connection resources
🛠️ Technical Details
Breaking Changes
- SetupHandlers(): Now abstract method - derived classes must implement this method
- Constructor Changes: HubConnection parameter is now optional (nullable)
Non-Breaking Changes
- All existing IJiroClient interface methods remain unchanged
- Existing event signatures are backward compatible
- Legacy initialization patterns continue to work
Performance Improvements
- Reduced memory allocations in event handling
- Optimized logging with null-checked conditional execution
- Improved connection pooling with semaphore-based synchronization
💻 Usage Example
// Enhanced client implementation with new initialization pattern
public class MyJiroClient : JiroClientBase
{
public MyJiroClient(ILogger<MyJiroClient> logger)
: base(logger: logger) // HubConnection now optional
{
}
protected override void SetupHandlers()
{
// Required implementation for event handlers
CommandReceived += async command =>
{
// Handle command with enhanced logging
};
LogsRequested += async request =>
{
// RequestId automatically logged for correlation
return new LogsResponse { RequestId = request.RequestId };
};
}
// Enhanced initialization with error handling
public async Task ConnectAsync(string hubUrl, string apiKey)
{
await InitializeAsync(
hubUrl: hubUrl,
apiKey: apiKey,
exceptionHandler: (ex, context) => Console.WriteLine($"Error in {context}: {ex.Message}")
);
}
}
🚀 Deployment
- Version 1.1.6 has been built, tested, and is ready for deployment to NuGet.org
- All tests pass on .NET 9.0 runtime
- Package metadata updated with latest version information
- Enhanced thread safety validated under load testing
Note: This release significantly improves the robustness and production-readiness of JiroClientBase, making it easier to build reliable, thread-safe Jiro clients with comprehensive logging and error handling capabilities.