Ruby - programita en "listening"

 
Vista:

programita en "listening"

Publicado por Luis Felipe (1 intervención) el 16/04/2009 00:55:07
saben que guardo esto en .rb pero al poner en el command promto ruby chatserver.rb , me regresa al command prompt :( , que le agrego para que se quede en listenging mode, algo asi...

require "socket"
class ChatServer
def initialize( port )
@descriptors = Array::new
@serverSocket = TCPServer.new( "", port )
@serverSocket.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 )
printf("Chatserver started on port %d ", port)
@descriptors.push( @serverSocket )
end # initialize
def run
end
private
def broadcast_string( str, omit_sock )
end
def accept_new_connection
end # accept_new_connection
end #server

def run
while 1
res = select( @descriptors, nil, nil, nil )
if res != nil then
# Iterate through the tagged read descriptors
for sock in res[0]
# Received a connect to the server (listening) socket
if sock == @serverSocket then
accept_new_connection
else
# Received something on a client socket
if sock.eof? then
str = sprintf("Client left %s:%s ",
sock.peeraddr[2], sock.peeraddr[1])
broadcast_string( str, sock )
sock.close
@descriptors.delete(sock)
else
str = sprintf("[%s|%s]: %s",
sock.peeraddr[2], sock.peeraddr[1], sock.gets())
broadcast_string( str, sock )
end
end
end
end
end
end #run

def accept_new_connection
newsock = @serverSocket.accept
@descriptors.push( newsock )
newsock.write("You're connected to the Ruby chatserver ")
str = sprintf("Client joined %s:%s ",
newsock.peeraddr[2], newsock.peeraddr[1])
broadcast_string( str, newsock )
end # accept_new_connection

def broadcast_string( str, omit_sock )
@descriptors.each do |clisock|
if clisock != @serverSocket && clisock != omit_sock
clisock.write(str)
end
end
print(str)
end # broadcast_string

myChatServer = ChatServer.new( 2626 ).run
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder