Class: Termfront::Network::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/termfront/network/server.rb

Constant Summary collapse

TEAM_SIZES =
[1, 2, 4].freeze
PVP_MAP =
[
  "####################",
  "#........##........#",
  "#........##........#",
  "#..................#",
  "#..##........##....#",
  "#..##........##....#",
  "#..................#",
  "#..................#",
  "#....##........##..#",
  "#....##........##..#",
  "#..................#",
  "#........##........#",
  "#........##........#",
  "####################"
].freeze
PVP_SPAWN_CANDIDATES =
[
  [2.5, 2.5, 0.0],
  [2.5, 11.5, 0.0],
  [5.5, 5.5, 0.0],
  [4.5, 9.5, 0.0],
  [17.5, 11.5, Math::PI],
  [17.5, 2.5, Math::PI],
  [14.5, 8.5, Math::PI],
  [15.5, 4.5, Math::PI]
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(port: Config::PVP_PORT) ⇒ Server

Returns a new instance of Server.



38
39
40
41
42
43
# File 'lib/termfront/network/server.rb', line 38

def initialize(port: Config::PVP_PORT)
  @port = port
  @queue_mutex = Mutex.new
  @queues = TEAM_SIZES.to_h { |team_size| [team_size, []] }
  @wavesfight_queues = Hash.new { |hash, key| hash[key] = [] }
end

Instance Method Details

#runObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/termfront/network/server.rb', line 45

def run
  cert, key = load_or_create_cert

  ctx = OpenSSL::SSL::SSLContext.new
  ctx.cert = cert
  ctx.key  = key

  tcp_server = TCPServer.new("0.0.0.0", @port)
  ssl_server = OpenSSL::SSL::SSLServer.new(tcp_server, ctx)
  ssl_server.start_immediately = true

  puts "Termfront PvP server listening on 0.0.0.0:#{@port}"

  loop do
    begin
      client = ssl_server.accept
      configure_client(client)
      enqueue_player(client)
    rescue OpenSSL::SSL::SSLError => e
      puts "SSL handshake failed: #{e.message}"
    rescue StandardError => e
      puts "Accept error: #{e.message}"
    end
  end
end