mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-16 09:12:35 +00:00
Finished evicting Thread- probably more fiber scheduling to do while I figure out how to put Tasks into a Ractor
This commit is contained in:
17
lib/api.rb
17
lib/api.rb
@@ -126,15 +126,12 @@ class W3DHub
|
|||||||
|
|
||||||
# /apis/launcher/1/get-package-details
|
# /apis/launcher/1/get-package-details
|
||||||
# client requests package details: data={"packages":[{"category":"games","name":"apb.ico","subcategory":"apb","version":""}]}
|
# client requests package details: data={"packages":[{"category":"games","name":"apb.ico","subcategory":"apb","version":""}]}
|
||||||
def self.package_details(packages)
|
def self.package_details(internet, packages)
|
||||||
response = Excon.post(
|
body = "data=#{JSON.dump({ packages: packages })}"
|
||||||
"#{ENDPOINT}/apis/launcher/1/get-package-details",
|
response = internet.post("#{ENDPOINT}/apis/launcher/1/get-package-details", FORM_ENCODED_HEADERS, body)
|
||||||
headers: DEFAULT_HEADERS.merge({"Content-Type": "application/x-www-form-urlencoded"}),
|
|
||||||
body: "data=#{JSON.dump({ packages: packages })}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if response.status == 200
|
if response.success?
|
||||||
hash = JSON.parse(response.body, symbolize_names: true)
|
hash = JSON.parse(response.read, symbolize_names: true)
|
||||||
packages = hash[:packages].map { |pkg| Package.new(pkg) }
|
packages = hash[:packages].map { |pkg| Package.new(pkg) }
|
||||||
return packages.first if packages.size == 1
|
return packages.first if packages.size == 1
|
||||||
return packages
|
return packages
|
||||||
@@ -147,8 +144,8 @@ class W3DHub
|
|||||||
# client requests package: data={"category":"games","name":"ECW_Asteroids.zip","subcategory":"ecw","version":"1.0.0.0"}
|
# client requests package: data={"category":"games","name":"ECW_Asteroids.zip","subcategory":"ecw","version":"1.0.0.0"}
|
||||||
#
|
#
|
||||||
# server responds with download bytes, probably supports chunked download and resume
|
# server responds with download bytes, probably supports chunked download and resume
|
||||||
def self.package(package, &block)
|
def self.package(internet, package, &block)
|
||||||
Cache.fetch_package(package, block)
|
Cache.fetch_package(internet, package, block)
|
||||||
end
|
end
|
||||||
|
|
||||||
#! === Server List API === !#
|
#! === Server List API === !#
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class W3DHub
|
|||||||
@die = false
|
@die = false
|
||||||
@job = nil
|
@job = nil
|
||||||
|
|
||||||
Thread.new do
|
Async do
|
||||||
until (@die)
|
until (@die)
|
||||||
@job.process if @job && @job.waiting?
|
@job.process if @job && @job.waiting?
|
||||||
@job = nil
|
@job = nil
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class W3DHub
|
|||||||
def start
|
def start
|
||||||
@task_state = :running
|
@task_state = :running
|
||||||
|
|
||||||
Thread.new do
|
Async do
|
||||||
status = execute_task
|
status = execute_task
|
||||||
|
|
||||||
# Force free some bytes
|
# Force free some bytes
|
||||||
@@ -221,7 +221,8 @@ class W3DHub
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
package_details = Api.package_details(hashes)
|
internet = Async::HTTP::Internet.instance
|
||||||
|
package_details = Api.package_details(internet, hashes)
|
||||||
|
|
||||||
if package_details
|
if package_details
|
||||||
@packages = [package_details].flatten
|
@packages = [package_details].flatten
|
||||||
@@ -427,6 +428,8 @@ class W3DHub
|
|||||||
|
|
||||||
while (chunk = f.read(32_000_000))
|
while (chunk = f.read(32_000_000))
|
||||||
digest.update(chunk)
|
digest.update(chunk)
|
||||||
|
current = Async::Task.current?
|
||||||
|
current&.yield
|
||||||
end
|
end
|
||||||
|
|
||||||
f.close
|
f.close
|
||||||
@@ -448,7 +451,9 @@ class W3DHub
|
|||||||
|
|
||||||
def fetch_manifest(category, subcategory, name, version, &block)
|
def fetch_manifest(category, subcategory, name, version, &block)
|
||||||
# Check for and integrity of local manifest
|
# Check for and integrity of local manifest
|
||||||
package = Api.package_details([{ category: category, subcategory: subcategory, name: name, version: version }])
|
internet = Async::HTTP::Internet.instance
|
||||||
|
|
||||||
|
package = Api.package_details(internet, [{ category: category, subcategory: subcategory, name: name, version: version }])
|
||||||
|
|
||||||
if File.exist?(Cache.package_path(category, subcategory, name, version))
|
if File.exist?(Cache.package_path(category, subcategory, name, version))
|
||||||
verified = verify_package(package)
|
verified = verify_package(package)
|
||||||
@@ -465,7 +470,9 @@ class W3DHub
|
|||||||
def package_fetch(package, &block)
|
def package_fetch(package, &block)
|
||||||
puts "Downloading: #{package.category}:#{package.subcategory}:#{package.name}-#{package.version}"
|
puts "Downloading: #{package.category}:#{package.subcategory}:#{package.name}-#{package.version}"
|
||||||
|
|
||||||
Api.package(package) do |chunk, remaining_bytes, total_bytes|
|
internet = Async::HTTP::Internet.instance
|
||||||
|
|
||||||
|
Api.package(internet, package) do |chunk, remaining_bytes, total_bytes|
|
||||||
# Store progress somewhere
|
# Store progress somewhere
|
||||||
# Kernel.puts "#{name}-#{version}: #{(remaining_bytes.to_f / total_bytes).round}%"
|
# Kernel.puts "#{name}-#{version}: #{(remaining_bytes.to_f / total_bytes).round}%"
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Download a W3D Hub package
|
# Download a W3D Hub package
|
||||||
def self.fetch_package(package, block)
|
def self.fetch_package(internet, package, block)
|
||||||
path = package_path(package.category, package.subcategory, package.name, package.version)
|
path = package_path(package.category, package.subcategory, package.name, package.version)
|
||||||
headers = { "Content-Type": "application/x-www-form-urlencoded" }
|
headers = { "Content-Type": "application/x-www-form-urlencoded" }
|
||||||
start_from_bytes = package.custom_partially_valid_at_bytes
|
start_from_bytes = package.custom_partially_valid_at_bytes
|
||||||
|
|||||||
Reference in New Issue
Block a user