diff options
Diffstat (limited to 'qtruby/rubylib/examples/network/clientserver/client/client.rb')
-rw-r--r-- | qtruby/rubylib/examples/network/clientserver/client/client.rb | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/qtruby/rubylib/examples/network/clientserver/client/client.rb b/qtruby/rubylib/examples/network/clientserver/client/client.rb new file mode 100644 index 00000000..1f16b0ca --- /dev/null +++ b/qtruby/rubylib/examples/network/clientserver/client/client.rb @@ -0,0 +1,88 @@ +require 'Qt' + +class Client < Qt::VBox + + def initialize( host, port ) + super() + # GUI layout + @infoText = Qt::TextView.new( self ) + hb = Qt::HBox.new( self ) + @inputText = Qt::LineEdit.new( hb ) + send = Qt::PushButton.new( tr("Send") , hb ) + close = Qt::PushButton.new( tr("Close connection") , self ) + quit = Qt::PushButton.new( tr("Quit") , self ) + + connect( send, SIGNAL('clicked()'), SLOT('sendToServer()') ) + connect( close, SIGNAL('clicked()'), SLOT('closeConnection()') ) + connect( quit, SIGNAL('clicked()'), $qApp, SLOT('quit()') ) + + # create the socket and connect various of its signals + @socket = Qt::Socket.new( self ) + connect( @socket, SIGNAL('connected()'), + SLOT('socketConnected()') ) + connect( @socket, SIGNAL('connectionClosed()'), + SLOT('socketConnectionClosed()') ) + connect( @socket, SIGNAL('readyRead()'), + SLOT('socketReadyRead()') ) + connect( @socket, SIGNAL('error(int)'), + SLOT('socketError(int)') ) + + # connect to the server + @infoText.append( tr("Trying to connect to the server\n") ) + @socket.connectToHost( host, port ) + end + + slots 'closeConnection()', 'sendToServer()', + 'socketReadyRead()', 'socketConnected()', + 'socketConnectionClosed()', 'socketClosed()', + 'socketError(int)' + + def closeConnection() + @socket.close() + if @socket.state() == Qt::Socket::Closing + # We have a delayed close. + connect( @socket, SIGNAL('delayedCloseFinished()'), + SLOT('socketClosed()') ) + else + # The socket is closed. + socketClosed() + end + end + + def sendToServer() + # write to the server + os = Qt::TextStream.new(@socket) + os << @inputText.text() << "\n" + @inputText.setText( "" ) + os.dispose() + end + + def socketReadyRead() + # read from the server + while @socket.canReadLine() do + @infoText.append( @socket.readLine() ) + end + end + + def socketConnected() + @infoText.append( tr("Connected to server\n") ) + end + + def socketConnectionClosed() + @infoText.append( tr("Connection closed by the server\n") ) + end + + def socketClosed() + @infoText.append( tr("Connection closed\n") ) + end + + def socketError( e ) + @infoText.append( tr("Error number %d occurred\n" % e) ) + end +end + +app = Qt::Application.new( ARGV ) +client = Client.new( ARGV.length < 1 ? "localhost" : ARGV[0], 4242 ) +app.mainWidget = client +client.show +app.exec |