Files
rubbs/lib/bbs/server.rb
2026-05-12 22:15:07 +02:00

38 lines
924 B
Ruby

# frozen_string_literal: true
require 'socket'
module BBS
class Server
def initialize(port:)
@port = port
end
def run
server = TCPServer.new('0.0.0.0', @port)
puts "BBS listening on port #{@port} — connect with: telnet localhost #{@port}"
loop do
client = begin
server.accept
rescue Errno::ECONNABORTED, Errno::EMFILE, Errno::ENFILE, IOError => e
warn "BBS accept error: #{e.class}: #{e.message}"
next
end
Thread.new(client) do |c|
session = Session.new(c)
begin
session.run
rescue StandardError => e
warn "BBS session error: #{e.class}: #{e.message}\n#{e.backtrace.first(3).join("\n")}"
ensure
BBS.config.on_session_end&.call(session)
end
end
end
rescue Interrupt
puts "\nServer stopped."
end
end
end