Ruby Installation Einführung Zahlenraten Simpler Greeter Erweiterter Greeter Simpler Chat Erweiterter Chat
Pfad: Startseite / Fächer / Informatik / Ruby / Erweiterter Chat
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
    }

Valid XHTML 1.0! lokal