2019-10-20 18:05:31 +02:00
|
|
|
require "file_utils"
|
|
|
|
require "./config.cr"
|
|
|
|
|
|
|
|
START_PORT = 49152
|
|
|
|
PORTS_CACHE_DIRECTORY = "#{CACHE_DIRECTORY}/ports/"
|
|
|
|
|
|
|
|
service = ARGV[0]
|
|
|
|
wanted_default_port = ARGV[1]?.try &.to_i
|
|
|
|
|
2019-10-24 15:48:03 +02:00
|
|
|
service_port_file = "#{PORTS_CACHE_DIRECTORY}/#{service.gsub /\//, ":"}"
|
2019-10-20 18:05:31 +02:00
|
|
|
|
|
|
|
begin
|
|
|
|
if File.exists? service_port_file
|
|
|
|
puts File.read service_port_file
|
|
|
|
exit 0
|
|
|
|
end
|
|
|
|
|
|
|
|
FileUtils.mkdir_p PORTS_CACHE_DIRECTORY
|
|
|
|
|
|
|
|
used_ports = Dir.children(PORTS_CACHE_DIRECTORY)
|
|
|
|
.map { |x| "#{PORTS_CACHE_DIRECTORY}/#{x}" }
|
|
|
|
.map { |x| File.read(x).to_i }
|
|
|
|
.sort
|
|
|
|
|
|
|
|
port = START_PORT
|
|
|
|
if wanted_default_port && ! used_ports.any? &.==(wanted_default_port)
|
|
|
|
port = wanted_default_port
|
|
|
|
else
|
|
|
|
while used_ports.any? &.==(port)
|
|
|
|
port = port + 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
File.write service_port_file, port
|
|
|
|
|
|
|
|
puts port
|
|
|
|
rescue e
|
|
|
|
STDERR.puts "error: #{e.message}"
|
|
|
|
exit 1
|
|
|
|
end
|
|
|
|
|