Add detach to server (closed #12)

This commit is contained in:
ChillerDragon 2024-01-20 21:50:55 +08:00
parent 8f647e165c
commit b8893bda6a
2 changed files with 31 additions and 13 deletions

View file

@ -72,24 +72,14 @@ class TeeworldsServer
@hooks = {
chat: []
}
@thread_running = false
end
def on_chat(&block)
@hooks[:chat].push(block)
end
def run(ip, port)
@server_token = (1..4).to_a.map { |_| rand(0..255) }
@server_token = @server_token.map { |b| b.to_s(16).rjust(2, '0') }.join
puts "server token #{@server_token}"
@netbase = NetBase.new(verbose: @verbose)
NetChunk.reset
@ip = ip
@port = port
puts "listening on #{@ip}:#{@port} .."
@s = UDPSocket.new
@s.bind(@ip, @port)
@netbase.bind(@s)
def main_loop
loop do
tick
# TODO: proper tick speed sleep
@ -107,6 +97,34 @@ class TeeworldsServer
end
end
def run(ip, port, options = {})
options[:detach] = options[:detach] || false
if options[:detach] && @thread_running
puts 'Error: server already running in a thread'
return
end
@server_token = (1..4).to_a.map { |_| rand(0..255) }
@server_token = @server_token.map { |b| b.to_s(16).rjust(2, '0') }.join
puts "server token #{@server_token}"
@netbase = NetBase.new(verbose: @verbose)
NetChunk.reset
@ip = ip
@port = port
puts "listening on #{@ip}:#{@port} .."
@s = UDPSocket.new
@s.bind(@ip, @port)
@netbase.bind(@s)
if options[:detach]
@thread_running = true
Thread.new do
main_loop
end
else
main_loop
end
end
def on_message(chunk, packet)
puts "got game chunk: #{chunk}"
case chunk.msg

View file

@ -11,4 +11,4 @@ srv.on_chat do |context, msg|
puts "[chat] #{msg.author.name}: #{msg.message}"
end
srv.run('127.0.0.1', 8303)
srv.run('127.0.0.1', 8303, detach: false)