mirror of
https://github.com/tiennm99/BSK-All-in-One-Clinic-Management-System.git
synced 2026-10-15 00:16:48 +00:00
[update] Remove unused Times New Roman font dependency from pom.xml. Enhance Client and ClientHandler classes with improved network resilience features, including IdleStateHandler for better timeout management and user-friendly error dialogs for connection issues. Update Server class to include IdleStateHandler for improved tolerance of network delays.
This commit is contained in:
1 parent
ae96a1a4da
commit
4ebce2b32a
9 files changed
+642
-13
No files matched your search
@@ -0,0 +1,175 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Checks for a new version of the server JAR application, downloads it, and replaces the old version.
|
||||
|
||||
.DESCRIPTION
|
||||
This script is dedicated to updating the server application.
|
||||
It reads a local version_server.json file to determine the current version.
|
||||
It then fetches a remote latest_server.json file from a specified URL to see if a newer version is available.
|
||||
If an update is found, it stops the running server, downloads the new JAR,
|
||||
backs it up, installs the new one, and restarts the server.
|
||||
|
||||
.NOTES
|
||||
Author: Dat Le
|
||||
Date: 2025-09-07
|
||||
Version: 1.1.0 (Server Only)
|
||||
#>
|
||||
|
||||
# --- CONFIGURATION ---
|
||||
# IMPORTANT: This URL should now point to your 'latest_server.json' file on GitHub.
|
||||
$remoteVersionInfoUrl = "https://github.com/lds217/BSK-All-in-One-Clinic-Management-System/releases/download/v1.1.0/latest.json"
|
||||
|
||||
# --- SCRIPT START ---
|
||||
$ProgressPreference = 'Continue'
|
||||
|
||||
# Get the directory where this script is located.
|
||||
$scriptPath = $PSScriptRoot
|
||||
# Get the directory where this script is located.
|
||||
$scriptPath = $PSScriptRoot
|
||||
|
||||
# Define the paths for the local files (now server-specific)
|
||||
$localVersionFile = Join-Path $scriptPath "version_server.json"
|
||||
$jarFileName = "server.jar"
|
||||
$localJarFile = Join-Path $scriptPath $jarFileName
|
||||
$backupJarFile = Join-Path $scriptPath "$($jarFileName).old"
|
||||
|
||||
# --- Step 1: Read the local version information ---
|
||||
Write-Host "Reading local server version info from '$localVersionFile'..."
|
||||
if (-not (Test-Path $localVersionFile)) {
|
||||
Write-Error "Error: Local version file not found at '$localVersionFile'. Cannot proceed."
|
||||
Read-Host "Press Enter to exit"
|
||||
exit 1
|
||||
}
|
||||
|
||||
try {
|
||||
$localVersionInfo = Get-Content $localVersionFile | ConvertFrom-Json
|
||||
Write-Host " - Local Server Version: $($localVersionInfo.currentVersion)"
|
||||
}
|
||||
catch {
|
||||
Write-Error "Error: Could not read or parse the local version_server.json file. Is it valid JSON?"
|
||||
Read-Host "Press Enter to exit"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# --- Step 2: Fetch the remote version information ---
|
||||
Write-Host "Fetching remote server version info from '$remoteVersionInfoUrl'..."
|
||||
try {
|
||||
$remoteVersionInfo = Invoke-RestMethod -Uri $remoteVersionInfoUrl
|
||||
Write-Host " - Latest Remote Version: $($remoteVersionInfo.latestVersion)"
|
||||
}
|
||||
catch {
|
||||
Write-Error "Error: Failed to fetch or parse remote version info. Check the URL and your internet connection."
|
||||
Read-Host "Press Enter to exit"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# --- Step 3: Compare versions ---
|
||||
if ([version]$localVersionInfo.currentVersion -ge [version]$remoteVersionInfo.latestVersion) {
|
||||
Write-Host "`nResult: Your server application is up-to-date! (Version $($localVersionInfo.currentVersion))"
|
||||
}
|
||||
else {
|
||||
Write-Host "`nResult: New version available! (Version $($remoteVersionInfo.latestVersion)). Starting update process."
|
||||
Write-Host "Release Notes: $($remoteVersionInfo.releaseNotes)"
|
||||
|
||||
# Get the correct download URL (now simplified)
|
||||
$downloadUrl = $remoteVersionInfo.files.server
|
||||
if (-not $downloadUrl) {
|
||||
Write-Error "Error: 'downloadUrl' not found in remote JSON."
|
||||
Read-Host "Press Enter to exit"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Download URL: $downloadUrl"
|
||||
|
||||
# --- Step 4: Stop the application ---
|
||||
Write-Host "`nStopping application..."
|
||||
try {
|
||||
# This command finds the java process running 'server.jar' and stops it.
|
||||
Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -like "*$jarFileName*" } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }
|
||||
Write-Host " - Application stopped successfully."
|
||||
Start-Sleep -Seconds 3 # Give the OS time to release file locks
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Could not automatically stop the application. Please stop it manually before continuing."
|
||||
Read-Host "Press Enter to continue after stopping the application"
|
||||
}
|
||||
|
||||
|
||||
# --- Step 5: Download and Replace ---
|
||||
$tempDownloadPath = Join-Path $scriptPath "server.jar.download"
|
||||
|
||||
Write-Host "`nDownloading new version..."
|
||||
try {
|
||||
# First, get the file size for progress calculation
|
||||
$response = Invoke-WebRequest -Uri $downloadUrl -Method Head
|
||||
$totalSize = [int64]$response.Headers.'Content-Length'
|
||||
|
||||
Write-Host "File size: $([math]::Round($totalSize/1MB, 2)) MB"
|
||||
Write-Host "Starting download with progress indicator..."
|
||||
|
||||
# Use Start-BitsTransfer for better progress display if available
|
||||
if (Get-Command Start-BitsTransfer -ErrorAction SilentlyContinue) {
|
||||
Start-BitsTransfer -Source $downloadUrl -Destination $tempDownloadPath -DisplayName "Downloading server.jar" -Description "BSK Server Update"
|
||||
}
|
||||
else {
|
||||
# Fallback: Custom progress implementation
|
||||
$webClient = New-Object System.Net.WebClient
|
||||
|
||||
# Register progress event
|
||||
Register-ObjectEvent -InputObject $webClient -EventName DownloadProgressChanged -Action {
|
||||
$percent = $Event.SourceEventArgs.ProgressPercentage
|
||||
$received = $Event.SourceEventArgs.BytesReceived
|
||||
$total = $Event.SourceEventArgs.TotalBytesToReceive
|
||||
$speed = [math]::Round($received / 1MB, 2)
|
||||
|
||||
Write-Progress -Activity "Downloading server.jar" -Status "$percent% Complete" -PercentComplete $percent -CurrentOperation "Downloaded: $speed MB / $([math]::Round($total/1MB, 2)) MB"
|
||||
} | Out-Null
|
||||
|
||||
try {
|
||||
$webClient.DownloadFile($downloadUrl, $tempDownloadPath)
|
||||
Write-Progress -Activity "Downloading server.jar" -Completed
|
||||
}
|
||||
finally {
|
||||
$webClient.Dispose()
|
||||
Get-EventSubscriber | Unregister-Event
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "Download completed successfully!"
|
||||
}
|
||||
catch {
|
||||
Write-Error "Error: Download failed. Please check the URL and your connection."
|
||||
if (Test-Path $tempDownloadPath) { Remove-Item $tempDownloadPath }
|
||||
Read-Host "Press Enter to exit"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "`nInstalling update..."
|
||||
if (Test-Path $localJarFile) {
|
||||
Write-Host " - Backing up old version to '$backupJarFile'..."
|
||||
Move-Item -Path $localJarFile -Destination $backupJarFile -Force
|
||||
}
|
||||
|
||||
Write-Host " - Installing new version..."
|
||||
Move-Item -Path $tempDownloadPath -Destination $localJarFile -Force
|
||||
|
||||
|
||||
# --- Step 6: Update the local version file ---
|
||||
Write-Host " - Updating local version number..."
|
||||
# Create a new JSON object to ensure the file is clean
|
||||
@{ currentVersion = $remoteVersionInfo.latestVersion } | ConvertTo-Json -Depth 1 | Set-Content $localVersionFile
|
||||
|
||||
|
||||
# --- Step 7: Restart the application ---
|
||||
# !! CRITICAL !! You MUST customize this step.
|
||||
Write-Host "`nRestarting application (you may need to customize this step)..."
|
||||
# Example: Start-Process "java" -ArgumentList "-jar", $localJarFile
|
||||
# Example: Start-Process ".\start_server.bat"
|
||||
|
||||
Write-Host "`nUpdate complete! Now running version $($remoteVersionInfo.latestVersion)."
|
||||
}
|
||||
|
||||
# Pause at the end
|
||||
Read-Host "`nPress Enter to exit."
|
||||
Reference in new issue
Block a user