class Server

Public Class Methods

new(parent = nil) click to toggle source
Calls superclass method
# File examples/network/fortuneserver/server.rb, line 30
def initialize(parent = nil)
    super(parent)
    @statusLabel = Qt::Label.new
    @quitButton = Qt::PushButton.new(tr("Quit"))
    @quitButton.autoDefault = false

    @tcpServer = Qt::TcpServer.new(self)
    if !@tcpServer.listen
        Qt::MessageBox.critical(self, tr("Fortune Server"),
            tr("Unable to start the server: %s." % @tcpServer.errorString))
        close()
        return
    end

    @statusLabel.text = tr("The server is running on port %d.\nRun the Fortune Client example now." %
                         @tcpServer.serverPort)

    @fortunes = []
    @fortunes << tr("You've been leading a dog's life. Stay off the furniture.") <<
             tr("You've got to think about tomorrow.") <<
             tr("You will be surprised by a loud noise.") <<
             tr("You will feel hungry again in another hour.") <<
             tr("You might have mail.") <<
             tr("You cannot kill time without injuring eternity.") <<
             tr("Computers are not intelligent. They only think they are.")

    connect(@quitButton, SIGNAL(:clicked), self, SLOT(:close))
    connect(@tcpServer, SIGNAL(:newConnection), self, SLOT(:sendFortune))

    buttonLayout = Qt::HBoxLayout.new do |b|
        b.addStretch(1)
        b.addWidget(@quitButton)
    end

    self.layout = Qt::VBoxLayout.new do |m|
        m.addWidget(@statusLabel)
        m.addLayout(buttonLayout)
    end

    self.windowTitle = tr("Fortune Server")
end

Public Instance Methods

sendFortune() click to toggle source
# File examples/network/fortuneserver/server.rb, line 72
def sendFortune
    block = Qt::ByteArray.new
    outf = Qt::DataStream.new(block, Qt::IODevice::WriteOnly)
    outf.version = Qt::DataStream::Qt_4_0
    outf << 0  # Write a 4 byte integer
    outf << @fortunes[rand(@fortunes.length)]
    outf.device.seek(0)
    outf << (block.length - 4)  # 4 bytes is the size of an integer

    clientConnection = @tcpServer.nextPendingConnection()
    connect(clientConnection, SIGNAL(:disconnected),
            clientConnection, SLOT(:deleteLater))

    clientConnection.write(block)
    clientConnection.disconnectFromHost
end