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 = { @hooks = {
chat: [] chat: []
} }
@thread_running = false
end end
def on_chat(&block) def on_chat(&block)
@hooks[:chat].push(block) @hooks[:chat].push(block)
end end
def run(ip, port) def main_loop
@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)
loop do loop do
tick tick
# TODO: proper tick speed sleep # TODO: proper tick speed sleep
@ -107,6 +97,34 @@ class TeeworldsServer
end end
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) def on_message(chunk, packet)
puts "got game chunk: #{chunk}" puts "got game chunk: #{chunk}"
case chunk.msg case chunk.msg

View file

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