39 lines
643 B
Crystal
39 lines
643 B
Crystal
|
require "socket"
|
||
|
|
||
|
server = UNIXServer.new("/tmp/myapp.sock")
|
||
|
CLIENTS = [] of UNIXSocket
|
||
|
|
||
|
Signal::INT.trap {
|
||
|
puts "closing server..."
|
||
|
server.close
|
||
|
exit
|
||
|
}
|
||
|
|
||
|
def on_message(client)
|
||
|
loop {
|
||
|
msg = client.gets
|
||
|
if msg == "quit"
|
||
|
puts "deleting client..."
|
||
|
CLIENTS.delete client
|
||
|
pp CLIENTS.size
|
||
|
break
|
||
|
else
|
||
|
yield msg
|
||
|
end
|
||
|
}
|
||
|
end
|
||
|
|
||
|
loop {
|
||
|
puts "waiting for client on /tmp/myapp.sock"
|
||
|
new_client = server.accept
|
||
|
spawn {
|
||
|
on_message(new_client) { |msg|
|
||
|
CLIENTS.each { |client|
|
||
|
client.puts msg unless client == new_client
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
CLIENTS << new_client
|
||
|
pp CLIENTS.size
|
||
|
}
|