class MazeServer

Public Class Methods

new(hostname = 'localhost', port = 9999, number_of_players = 1) click to toggle source
# File lib/maze/server/maze_server.rb, line 9
def initialize(hostname = 'localhost', port = 9999, number_of_players = 1)
  @hostname = hostname
  @port = port
  @players = Hash.new
  @number_of_players = number_of_players
end

Public Instance Methods

players() click to toggle source
# File lib/maze/server/maze_server.rb, line 35
def players
  @players
end
start() click to toggle source
# File lib/maze/server/maze_server.rb, line 16
def start
  puts "start server on port #{@port} with hostname #{@hostname}"
  connected_player = 0
  server = TCPServer.open(@hostname, @port)
  while connected_player < @number_of_players
    connected_player += 1
    puts 'wait for player'
    socket = server.accept
    socket.puts('{"operation" : "PLAYER_NAME", "messageId": 1, "type": "REQUEST"}')
    player_name = JSON.parse(socket.gets.chop)['playerName']
    @players[connected_player] = Client.new(player_name, socket, connected_player)
    puts "player #{player_name} connected"
  end
  puts 'all player are connected'
  puts 'start game'
  @maze_game = MazeGame.new(@players)
  @maze_game.print_current_maze
end
start_game() click to toggle source
# File lib/maze/server/maze_server.rb, line 39
def start_game
  until @maze_game.all_players_reached_exit?
    do_moves
  end
  puts @maze_game.moves
  confirm_clients
end

Private Instance Methods

confirm_clients() click to toggle source
# File lib/maze/server/maze_server.rb, line 61
def confirm_clients
  @players.each do |player_number, client|
    client.socket.puts('{"operation" : "PLAYER_MOVES", "messageId" : 3, "type": "NOTIFICATION", "data" : ' + @maze_game.moves.to_json + '}')
    client_msg = client.socket.gets.chop
    puts "#{client.name} send message #{client_msg}"
  end
end
do_moves() click to toggle source
# File lib/maze/server/maze_server.rb, line 48
def do_moves
  @players.each do |player_number, client|
    unless @maze_game.player_reached_exit?(client)
      puts "Print maze for player #{client.name}"
      puts @maze_game.maze(client)
      next_moves = @maze_game.show_next_moves(client).map { |move| move.to_s }
      client.socket.puts('{"operation" : "NEXT_MOVE", "messageId" : 2, "type": "REQUEST", "data" : ' + next_moves.to_s + '}')
      move = JSON.parse(client.socket.gets.chop)['move'].to_sym
      @maze_game.move(client, move)
    end
  end
end