Class: ServerPort
- Inherits:
-
Object
- Object
- ServerPort
- Defined in:
- lib/game_2d/server_port.rb
Instance Method Summary collapse
- #_create_enet_server(*args) ⇒ Object
- #broadcast(data, reliable = false, channel = 1) ⇒ Object
-
#broadcast_player_action(sender_id, 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.
- #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.
6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/game_2d/server_port.rb', line 6 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 = {} @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
19 20 21 |
# File 'lib/game_2d/server_port.rb', line 19 def _create_enet_server(*args) ENet::Server.new *args end |
#broadcast(data, reliable = false, channel = 1) ⇒ Object
39 40 41 42 |
# File 'lib/game_2d/server_port.rb', line 39 def broadcast(data, reliable=false, channel=1) @server.broadcast_packet data.to_json, reliable, channel @server.flush end |
#broadcast_player_action(sender_id, hash, channel) ⇒ Object
Re-broadcast to everyone except the original sender
57 58 59 60 61 62 63 |
# File 'lib/game_2d/server_port.rb', line 57 def broadcast_player_action(sender_id, hash, channel) data = hash.to_json @clients.keys.each do |id| @server.send_packet(id, data, false, channel) unless id == sender_id end @server.flush end |
#deregister_player(player_id) ⇒ Object
48 49 50 |
# File 'lib/game_2d/server_port.rb', line 48 def deregister_player(player_id) @player_connections.delete player_id end |
#on_connection(id, ip) ⇒ Object
23 24 25 26 |
# File 'lib/game_2d/server_port.rb', line 23 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
32 33 34 35 36 37 |
# File 'lib/game_2d/server_port.rb', line 32 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
28 29 30 |
# File 'lib/game_2d/server_port.rb', line 28 def on_packet_receive(id, data, channel) @clients[id].on_packet(data, channel) end |
#player_connection(player_id) ⇒ Object
52 53 54 |
# File 'lib/game_2d/server_port.rb', line 52 def player_connection(player_id) @player_connections[player_id] end |
#register_player(player_id, conn) ⇒ Object
44 45 46 |
# File 'lib/game_2d/server_port.rb', line 44 def register_player(player_id, conn) @player_connections[player_id] = conn end |
#update(timeout = 0) ⇒ Object
non-blocking by default
65 66 67 |
# File 'lib/game_2d/server_port.rb', line 65 def update(timeout=0) # non-blocking by default @server.update(timeout) end |
#update_until(stop_time) ⇒ Object
69 70 71 72 73 |
# File 'lib/game_2d/server_port.rb', line 69 def update_until(stop_time) while Time.now.to_r < stop_time do update end end |