Files
leonwww/flumi/Scripts/ClientPool.gd

48 lines
1.4 KiB
GDScript3
Raw Normal View History

2025-09-25 20:53:56 +03:00
class_name ClientPool
extends RefCounted
static var gurt_clients: Dictionary = {}
static var client_last_used: Dictionary = {}
static var client_timeout_ms: int = 30000
static func _cleanup_idle_clients():
var current_time = Time.get_ticks_msec()
var to_remove = []
for domain in client_last_used:
if current_time - client_last_used[domain] > client_timeout_ms:
to_remove.append(domain)
for domain in to_remove:
if gurt_clients.has(domain):
gurt_clients[domain].disconnect()
gurt_clients.erase(domain)
client_last_used.erase(domain)
static func get_or_create_gurt_client(domain: String) -> GurtProtocolClient:
_cleanup_idle_clients()
if gurt_clients.has(domain):
client_last_used[domain] = Time.get_ticks_msec()
return gurt_clients[domain]
var client = GurtProtocolClient.new()
for ca_cert in CertificateManager.trusted_ca_certificates:
client.add_ca_certificate(ca_cert)
if not client.create_client_with_dns(30, GurtProtocol.DNS_SERVER_IP, GurtProtocol.DNS_SERVER_PORT):
return null
gurt_clients[domain] = client
client_last_used[domain] = Time.get_ticks_msec()
return client
static func extract_domain_from_url(gurt_url: String) -> String:
var host_domain = gurt_url
2025-11-06 20:02:53 +08:00
if host_domain.begins_with("lw://"):
2025-09-25 20:53:56 +03:00
host_domain = host_domain.right(-7)
var slash_pos = host_domain.find("/")
if slash_pos != -1:
host_domain = host_domain.left(slash_pos)
return host_domain