⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 krfbconnection.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS and its licensors.** All rights reserved.**** This file is part of the Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.** See below for additional copyright and license information**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include <assert.h>#include <qsocket.h>#include <qtimer.h>#include <string.h>#include "krfbconnection.h"#include "krfblogin.h"#include "krfboptions.h"#include "krfbdecoder.h"#include "krfbbuffer.h"KRFBConnection::KRFBConnection( QObject *parent )    : QObject( parent, "KRFBConnection" ){  portBase_ = 5900;  currentState_ = Disconnected;  sock = 0;  minData_ = 0;  options_ = new KRFBOptions();  updater = 0;  decoder_ = 0;  buffer_ = 0;  login = 0;}KRFBConnection::~KRFBConnection(){  if ( ( currentState_ != Disconnected ) && ( currentState_ != Disconnecting ) && sock ) {    disconnectDone();  }  delete options_;}void KRFBConnection::connectTo( const QCString &host, int display ){  if ( currentState_ != Disconnected );    disconnect();  this->host_= host;  this->display_ = display;  sock = new QSocket( this, "rfbSocket" );  CHECK_PTR( sock );  // Connect to something to notice connection or error  connect( sock, SIGNAL( error(int) ), SLOT( gotSocketError(int) ) );  connect( sock, SIGNAL( connected() ), SLOT( gotSocketConnection() ) );  qWarning( "Connecting..." );  currentState_ = Connecting;  sock->connectToHost( host_, portBase_ + display_ );}void KRFBConnection::disconnect(){    qWarning( "Disconnecting from server" );  if ( ( currentState_ != Disconnected )       && ( currentState_ != Disconnecting )       && sock ) {    currentState_ = Disconnecting;    connect( sock, SIGNAL( delayedCloseFinished() ), SLOT( disconnectDone() ) );    sock->close();    if ( sock->state() != QSocket::Closing )      disconnectDone();  }}void KRFBConnection::disconnectDone(){  qWarning( "KRFBConnection disconnected" );  currentState_ = Disconnected;  delete sock;  sock = 0;  minData_ = 0;  delete updater;  delete decoder_;  delete buffer_;  delete login;  updater = 0;  decoder_ = 0;  buffer_ = 0;  login = 0;  emit disconnected();}void KRFBConnection::gotSocketConnection(){  currentState_ = LoggingIn;  qWarning( "Connected, logging in..." );  static QString statusMsg = tr( "Connected" );  emit statusChanged( statusMsg );  // Do some login stuff  login = new KRFBLogin( this );}void KRFBConnection::gotRFBConnection(){  qWarning( "Logged into server" );  currentState_ = Connected;  emit connected();  // Create the decoder and start doing stuff  decoder_ = new KRFBDecoder( this );  CHECK_PTR( decoder_ );  buffer_ = new KRFBBuffer( decoder_, this, "RFB Buffer" ); // No tr  CHECK_PTR( buffer_ );  decoder_->setBuffer( buffer_ );  connect( decoder_, SIGNAL( status(const QString&) ),           this, SIGNAL( statusChanged(const QString&) ) );  emit loggedIn();  decoder_->start();  updater = new QTimer;  connect( updater, SIGNAL( timeout() ), SLOT( updateTimer() ) );  updater->start( options_->updateRate );}void KRFBConnection::gotSocketError( int errno ){  currentState_ = Error;  // Do some error handling stuff  qWarning( "KRFBConnection: Socket error %d", errno );  static QString refused = tr( "Connection Refused" );  static QString host = tr( "Host not found" );  static QString read = tr( "Read Error: QSocket reported an error reading\n"			      "data, the remote host has probably dropped the\n"			      "connection." );  static QString confused = tr( "QSocket reported an invalid error code" );  QString msg;  switch ( errno ) {  case QSocket::ErrConnectionRefused:    msg = refused;    break;  case QSocket::ErrHostNotFound:    msg = host;    break;  case QSocket::ErrSocketRead:    msg = read;    break;  default:    msg = confused;  };  QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) );  delete sock;  sock = 0;  currentState_ = Disconnected;  emit error( msg );}int KRFBConnection::bytesAvailable() const{    return sock->size();}void KRFBConnection::gotMoreData(){  assert( minData_ > 0 );  if ( sock->size() >= minData_ ) {    minData_ = 0;    QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) );    emit gotEnoughData();  }}void KRFBConnection::waitForData( unsigned int sz ){  assert( minData_ == 0 );  assert( sz > 0 );  assert( currentState_ != Error );     if ( sock->size() >= sz ) {      //    qWarning( "No need to wait for data" );    emit gotEnoughData();  }  else {      //    qWarning( "Waiting for %u bytes", sz );        minData_ = sz;    connect( sock, SIGNAL( readyRead() ), SLOT( gotMoreData() ) );  }}int KRFBConnection::read( void *buf, int sz ){  return sock->readBlock( (char *)  buf, sz );}int KRFBConnection::write( void *buf, int sz ){  return sock->writeBlock( (const char *) buf, sz );}KRFBConnection::State KRFBConnection::state() const{  return currentState_;}void KRFBConnection::setPortBase( int base ){  portBase_ = base;}int KRFBConnection::portBase() const{  return portBase_;}void KRFBConnection::setPassword( const QCString &pass ){  this->pass_ = pass;}void KRFBConnection::updateTimer(){  decoder_->sendUpdateRequest( true );}void KRFBConnection::refresh(){  decoder_->sendUpdateRequest( false );}void KRFBConnection::sendCutText( const QString &text ){  decoder_->sendCutEvent( text );}const QUrl &KRFBConnection::url(){  url_.setProtocol( "vnc" );  url_.setPort( display() );  url_.setHost( host() );  url_.setPath( "/" );  return url_;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -