Class: ServerPort

Inherits:
Object
  • Object
show all
Defined in:
lib/game_2d/server_port.rb

Instance Method Summary collapse

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