 |
|
|
Ruby |
|
Autor: uwe
07.07.2007 13:33 649
|
|
Erweiterter Chat
|
Server
require "socket" #Verwendung der Datei socket
class ChatServer
def initialize(hostname, port) #Erweiterung des Constructors
@server = TCPServer.new(hostname, port) #neuer Chatserver wird
erzeugt
@clients = [] #die Instanzvariable @clients wird als array
definiert
@msg = [] #die Instanzvariable @msg (message) wird
als Array definiert
end
def add_client #die Methode add_client wird definiert
client = @server.accept #neuer user wird akzeptiert und seine "Adresse" wird gespeichert
name = client.gets.chomp #die erste Eingabe des client wird in name abgespeichert
@clients.push client #die Adresse des neuen client wird im Array @clients abgespeichert
Thread.new do #Thread macht kopie von client & name
loop { #speichert Eingaben der clienten in @msg
@msg.push(name + ": " + client.gets.chomp)
}
end
end
def run #die Methode run wird definiert
Thread.new do #in einem Thread wird in einer Endlosschleife
loop{ #die Methode add_client aufgerufen,
add_client #sie fügt neue Nutzer hinzu
}
end
loop { #in der Endlosschleife werden neue Nachrichten aus @msg
if not @msg[0].nil? #an jeden client ausgegeben
s = @msg.shift
@clients.each do |client|
client.puts s
end
end
}
end
end
ChatServer.new(ARGV[0],1337).run #run wird mit der IP als Argument ausgeführt => der Server wird gestartet
Client
require "socket" #die Datei socket wird eingebunden
stream = TCPSocket.new(ARGV[0], 1337) #der client verbindet mit dem server, dessen IP als erstes Argument übergeben wird
stream.puts ARGV[1] #das zweite Argument (der Name des
client) wird sofort in den stream geschrieben
#es wird vom server dann auch als Name interpretiert
input = Thread.new do
loop {
s = stream.gets.chomp #vom Server gesendete Nachrichten werden ausgegeben
puts Time.now.hour.to_s + ":" + Time.now.min.to_s + "\t\t" + s #+ "\t" + Time.now.hour.to_s + ":" + Time.now.min.to_s
}
end
loop {
s = STDIN.gets.chomp #Nachrichten werden an den server gesendet
stream.puts s
}
lokal