Witam forumowiczów.
Dawno mnie tu nie było ;)
Ostatnio powróciłem do programowania i pomyślałem sobie o aplikacji serwer-klient(-ów kilku).
Chcę kilkoma programami klientowymi podpiąć się do serwera.
Ten ostatni napisałem póki co dość prosto w Ruby. Generalnie wysyłanie i komunikatów idzie dobrze, do pojedynczego klienta, jednak mam problem, bo nie wiem jak przerobić skrypt Ruby, by wysyłał komunikat od klienta nie tylko do niego samego jako echo, ale do wszystkich podłączonych.
require 'socket'
portnumber = 2000
sock = TCPServer.open(portnumber)
while true
Thread.new(sock.accept) do |connection|
puts "Accepting connection from: #{connection.peeraddr[2]}"
begin
while connection
incomingData = connection.gets("\0")
if incomingData != nil
incomingData = incomingData.chomp
end
puts "Incoming: #{incomingData}"
if incomingData == "DISCONNECT\0"
puts "Received: DISCONNECT, closed connection"
connection.close
break
else
connection.puts "#{incomingData}"
connection.flush
end
end
rescue Exception => e
# Displays Error Message
puts "#{ e } (#{ e.class })"
ensure
connection.close
puts "ensure: Closing"
end
end
end
Próbuje podmieniać:
connection.puts "#{incomingData}"
connection.flush
Na coś takiego:
Thread.list.each { |aThread|
if aThread != Thread.current
aThread.puts "#{msg}\0"
end
}
Bez skutku. Dostaję error w ruby, że nie ma takiej funkcji jak "puts".
Z Ruby zaczynam, więc jeszcze w pełni nie ogarniam, dlatego będę wdzięczny za jakieś wskazówki.
Pozdrawiam
AW