Class: ServerPort
- Inherits:
-
Object
- Object
- ServerPort
- Defined in:
- lib/game_2d/server_port.rb
Instance Method Summary collapse
- #_create_enet_server(*args) ⇒ Object
-
#broadcast_player_action(hash, channel) ⇒ Object
Re-broadcast to everyone except the original sender.
- #deregister_player(player_id) ⇒ Object
-
#initialize(game, port_number, max_clients) ⇒ ServerPort
constructor
A new instance of ServerPort.
- #new_players ⇒ Object
- #on_connection(id, ip) ⇒ Object
- #on_disconnection(id) ⇒ Object
- #on_packet_receive(id, data, channel) ⇒ Object
- #player_connection(player_id) ⇒ Object
- #register_player(player_id, conn) ⇒ Object
-
#update(timeout = 0) ⇒ Object
non-blocking by default.
- #update_until(stop_time) ⇒ Object
Constructor Details
#initialize(game, port_number, max_clients) ⇒ ServerPort
Returns a new instance of ServerPort.
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/game_2d/server_port.rb', line 7 def initialize(game, port_number, max_clients) @game = game @server = _create_enet_server port_number, max_clients, 2, 0, 0 puts "ENet server listening on #{port_number}" @clients = {} @player_connections = {} @new_players = Set.new @server.on_connection method(:on_connection) @server.on_packet_receive method(:on_packet_receive) @server.on_disconnection method(:on_disconnection) end |
Instance Method Details
#_create_enet_server(*args) ⇒ Object
21 22 23 |
# File 'lib/game_2d/server_port.rb', line 21 def _create_enet_server(*args) ENet::Server.new *args end |
#broadcast_player_action(hash, channel) ⇒ Object
Re-broadcast to everyone except the original sender
61 62 63 64 65 66 67 68 69 |
# File 'lib/game_2d/server_port.rb', line 61 def broadcast_player_action(hash, channel) sender_player_id = hash[:player_id] fail "No player_id in #{hash.inspect}" unless sender_player_id data = hash.to_json @player_connections.each do |player_id, conn| @server.send_packet(conn.id, data, false, channel) unless player_id == sender_player_id end @server.flush end |
#deregister_player(player_id) ⇒ Object
46 47 48 |
# File 'lib/game_2d/server_port.rb', line 46 def deregister_player(player_id) @player_connections.delete player_id end |
#new_players ⇒ Object
50 51 52 53 54 |
# File 'lib/game_2d/server_port.rb', line 50 def new_players copy = @new_players.dup @new_players.clear copy end |
#on_connection(id, ip) ⇒ Object
25 26 27 28 |
# File 'lib/game_2d/server_port.rb', line 25 def on_connection(id, ip) puts "New ENet connection #{id} from #{ip}" @clients[id] = ServerConnection.new(self, @game, @server, id, ip) end |
#on_disconnection(id) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/game_2d/server_port.rb', line 34 def on_disconnection(id) puts "ENet connection #{id} disconnected" gone = @clients.delete id gone.close puts "Remaining connection IDs: #{@clients.keys.sort.join(', ')}" end |
#on_packet_receive(id, data, channel) ⇒ Object
30 31 32 |
# File 'lib/game_2d/server_port.rb', line 30 def on_packet_receive(id, data, channel) @clients[id].on_packet(data, channel) end |
#player_connection(player_id) ⇒ Object
56 57 58 |
# File 'lib/game_2d/server_port.rb', line 56 def player_connection(player_id) @player_connections[player_id] end |
#register_player(player_id, conn) ⇒ Object
41 42 43 44 |
# File 'lib/game_2d/server_port.rb', line 41 def register_player(player_id, conn) @player_connections[player_id] = conn @new_players << player_id end |
#update(timeout = 0) ⇒ Object
non-blocking by default
71 72 73 |
# File 'lib/game_2d/server_port.rb', line 71 def update(timeout=0) # non-blocking by default @server.update(timeout) end |
#update_until(stop_time) ⇒ Object
75 76 77 78 79 |
# File 'lib/game_2d/server_port.rb', line 75 def update_until(stop_time) while Time.now.to_r < stop_time do update end end |