Skip to content

Instantly share code, notes, and snippets.

@genericpenguin
Created March 11, 2018 20:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save genericpenguin/df13cc583bdd5b74cc60a92f7e2155d4 to your computer and use it in GitHub Desktop.
Save genericpenguin/df13cc583bdd5b74cc60a92f7e2155d4 to your computer and use it in GitHub Desktop.
require "socket"
require "./player"
module BSAF
class ConnectionManager
def initialize(@host : String, @port : Int32)
@server = TCPServer.new @host, @port
@players = [] of Player
end
def run
loop { spawn handle(@server.accept) }
end
def msg_players(msg)
spawn do
loop do
@players.each do |player|
player.send(msg)
end
sleep 10.seconds
puts "ending loop"
puts "players: #{@players.size}"
end
end
end
def handle(conn)
ch = Channel(String).new
player = Player.new(conn, ch)
@players << player
remote_address = conn.remote_address
puts "#{remote_address} connected"
# Handle messages from world
spawn do
world_msg = ch.receive
conn.puts world_msg
end
while msg = conn.read_line
puts "#{remote_address} msg '#{msg}'"
conn.puts msg
end
rescue IO::EOFError
puts "#{remote_address} disconnected"
ensure
@players.delete(player)
conn.close
end
end
end
include BSAF
cm = ConnectionManager.new("127.0.0.1", 9000)
cm.msg_players("ping")
cm.run
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment