8.gloox 之 ClientBase

gloox 之 ClientBase

是Client类和Component类的公共基类
它继承了TagHandler,ConnectionDataHandler,CompressionDataHandler,TLSHandler这四类。

此类管理连接的建立,认证,注册过虑器和调用

构造和析构函数:
ClientBase(  const std::string & ns,
                   const std::string & server,
                   int                        port = -1
)
构造一个ClientBase对象,你不必直接使用此类,而是使用Client 或 Component 代替
参数:
        ns         合适的流命名空间,不是jabber:client ,就是jabber:component
        server    连接到的服务器
        port       连接到服务器的端口,默认值-1,经由服务位置(DNS SRV)查找到端口或使用XMPP核心协议定义的默认端口5222

ClientBase (  const std::string  & ns,
                    const std::string  & password,
                    const std::string  & server,
                    int                          port = -1
)
构造一个ClientBase对象,你不必直接使用此类,而是使用Client 或 Component 代替
参数:
       ns         合适的流命名空间,不是jabber:client ,就是jabber:component
       password  进一步验证的密码
       server    连接到的服务器
       port       连接到服务器的端口,默认值-1,经由服务位置(DNS SRV)查找到端口或使用XMPP核心协议定义的默认端口5222

成员函数:

bool    authed() const
确定是否发生认证和认证成功。
返回值: true  认证己经发生,并且认证通过; 否则false 

AuthenticationError  authError() const
当你从ConnectionListener收到一个类型ConnAuthenticationFailed的连接错误(ConnectionError)时,可以使用此函数接收认证错误的类型。(译注  此错误类型是 枚举类型,)
返回值:认证的类型,否则为AuthErrorUndefined

bool  compression () const
返回 当前流(Stream)的压缩效果是否有效(非必须)

CompressionBase* compressionImpl() const
此函数返回当前正在使用的压缩具体实现。

bool connect(bool block = true)         
初始化一个到服务器的连接。当连接建立起来后,此函数会一直阻塞。你可以用一个阻塞状态的连接或你可以让它连接建立后立即返回。如果是后者,你必须担付起调用recv()函数接收数据并把数据传给解析器的责任。
参数:
      block   true为阻塞(默认);false非阻塞。
返回值:
     false,服务器没有设置或拒绝连接;否则true
注意: 从0.9版开始,添加了一个附助函数,onDisconnect(),当连接返回false时,此函数被调用。

ConnectionBase* connectionImpl() const
此函数返回一个当前正在使用的具体的连接实现

virtual  Disco* disco() const
此函数给出了一个得到Disco对象的接口。(译注:Disco 实现了服务发现功能)

void  disposeMessageSession( MessageSession* session )
从MessageSession列表中移除并释放一个指定的 MessageSession

TLSBase* encryptionImpl() const
此函数返回当前正在使用的具体加密实现

const std::string getID()
创建一个当前实列中唯一的字符序列,作为查询的ID值(query节)
返回值:查询节使用的唯一ID值

StatisticsStruct   getStatistics()
返回一个StatisticsStruct结构,此结构统计当前活动连接的字节数和节数(stanza counts)

void handleCompressedData( const std::string & data )  (虚函数)
当压缩完毕时,此函数被调用
参数:
     data   压缩后的数据
    须实现  CompressionDataHandler 接口

void handleConnect( const ConnectionBase* connection ) (虚函数)
当原始TCP连接建立起来后,此函数被调用
须实现 ConnectionDataHandler接口

void handleDecompressedData( const std::string & data ) (虚函数)
解压缩完毕时,此函数被调用
须实现CompressionDataHandler接口

void handleDecryptedData( const TLSBase*  base ,
                                         const std::string  & data
)  (虚函数)
重新实现此函数从TLSBase实例接收解密过的数据
参数:
      base   函数调用的加密实现
      data    解密过的数据(比如,准备解析)
须实现TLSHandler接口

void handleDisconnect( const ConnectionBase* connection,
                                   ConnectionError             reason )    (虚函数)
当一个原始的TCP连接断开时,此函数被调用
参数:  connection   一个连接
          reason        断开的原因
须实现ConnectionDataHandler接口


void handleEncryptedData ( const TLSBase*  base,
                                          const std::string & data ) (虚函数)
实现此函数从一个TLSBase实例接收加密过的数据
参数: 
       base    此函数需要的一个加密实现
       data     加密后的数据(比如,将要在线路发送的数据)
 须实现 TLSHandler


void  handleHandshakeResult(   const TLSBase*  base,
                                                bool                   success,
                                                CertInfo &           certinfo
) (虚函数)
实现此函数接收一个TLS握手的结果
参数:
      base    此函数需要的加密实现
      success  握手是否成功
      certinfo    服务器的认证信息
须实现TLSHandler接口


void   handleReceivedData( const ConnectionBase*  connection,
                                         const  std::string & data ) (虚函数)
此函数处理从层传输接收数据
参数:
      connection   接收数据的那个连接
      data             接收到的数据
须实现ConnectionDataHandler


void handleTag ( Tag* tag ) (虚函数)
当一个己被注册过的XML元素到达时此函数被调用。与gloox中的众多处理器(handlers)一样,在此函数返回后,tag数据将被释放(deleted),如果此后你需要一个复本,调用Tag::clone()函数来创建。
参数:  tag   完整的标签
须实现 TagHandler

const JID& jid()
返回当前JID,如果使用setAuthzid()设置了一个认证ID,则返回此认证ID
注意:如果你更改了JID的服务器部分,处于连接中的服务器不会与你同步,你不得不自己调用setServer()设置。

LogSink& logInstance()
返回ClientBase对象及其所有相关对象的LogSink实例
返回值:当前ClientBase对象使用的LogSink实例

virtual  const std::string& password()const
返回当前连接使用的密码


int port()const
返回连接的端口,-1即经由查找服务记录得到的,或者XMPP定义的5222

ConnectionError   recv(int timeout = -1)
调用它,从套接字上循环接收数据并且传给解析器。唯一用到的地方就是使用了非阻塞连接。
参数:
      timeout  超时毫秒数。-1即一直阻塞,只到收到一些数据。
返回值: 连接的状态


void  registerConnectionListener( ConnectionListener* cl )
把ConnectionListener对象注册进去,用来接收连接通告


void registerIqHandler( IqHandler* ih,
                                  const std::string& xmlns)
把IqHandler注册进去为xmlns名空间接收Iq节通告。一个名空间只有一个处理器(handler)是有可能的。
参数: ih    接收Iq节通知的对象
           xmlns  上述对象处理的名空间


void registerMessageHandler( MessageHandler * mh)
把MessageHandler对象注册进去,用来接收消息节(Message stanza)通告


void registerMessageSession( MessageSession* session )
注册一个指定的MessageSession对象,此对象用来接收从会话(一个MessageSession代表一个会话)目标JID发来的消息。
注意 :ClientBase对象会成为MessageSession对象的宿主,当ClientBase对象的析构函数被调用时,MessageSession对象跟着消亡。如果你想在ClientBase对象消亡之前避免MessageSession对象被释放,就要利用disposeMessageSession()函数。
因为一个MessageSession对象会自动注册自己,所以不必直接调用此函数。

void registerMessageSessionHandler( MessageSessionHandler* msh,
                                                         int                                    types  =0 )
利用此函数,你可以在Client对象中注册一个MessageSessionHandler对象,
(可选择地)MessageSessionHandler可以只收到消息会话(MessageSessions)中给定的消息类型。也可以成为每一种消息类型的唯一处理器。
如果没有为远程JID注册一个MessageHandler对象,那么当每一个消息节到达时,就会为那个JID创建一个MessageSession对象。
参数: msh     接收最新创建的MessageSession对象的那个对象
           types  处理器将要收到的消息类型描述。只有StanzaMessage* 类型是有效的,取0值即所有类型。


void registerMUCInvitationHandler( MUCInvitationHandler * mih )
向ClientBase注册一个 MUCInvitationHandler处理器


void registerPresenceHandler( const JID& jid, PresenceHandler* ph)
为指定的JID注册一个新的PresenceHandler(出席处理器)。此JID的出席消息不会再传递到共同的 PresenceHandler中了。这个功能最初的想法是为了MUC实现考虑的。


void registerPresenceHandler( PresenceHandler* ph)
把PresenceHandler对象注册进去,用来接收出席消息节。

void  registerStatistcsHandler( StatisticsHandler* sh)
把StatisticsHandler对象注册进去,用来统计最近连接上的每个时间段的消息节的收和发。
你也可以手动调用getStatistics()函数。每一个ClientBase对象同一时间只有一个StatisticsHandler是有可能的。


registerSubscriptionHandler( SubscriptionHandler* sh )
把SubscriptionHandler对象注册进去,接收订阅节通告


void registerTagHandler( TagHandler*  th,
                                     const std::string & tag,
                                     const std::string & xmlns )
把TagHandler对象注册进去,接收符合指定名空间内给定的根标签的数据包

void removeConnectionListener( ConnectionListener * cl )
从连接监听列表中移除一个监听对象


void removeIDHandler( IqHandler* ih)
从未决操作的处理器列表中移除一个指定的IqHandler对象,别外使用trackID()函数。必需的,举例,在关闭一个GUI元素时,发生了未决操作。

void removeIqHandler( const std::string & xmlns )
从Iq处理器列表中移除一个指定名空间的处理器


void removeMessageHandler( MessageHandler * mh )
从消息处理器列表中除除指定的对象

void removeMUCInvitationHandler()
移除当前注册的MUCInvitationHandler对象


void removePresenceHandler( const JID&  jid, PresenceHandler * ph )
为一个指定的 JID 从出席处理器列表中移除一个指定的处理器对象
参数:
    jid     移除那个JID的出席处理对象(可能多个)
    ph     从列表中移除的PresenceHandler对象,如果取0值,指定JID的所有出席处理器都会被移除


void  removePresenceHandler( PresenceHandler* ph )
移除一个指定的出席处理器对象


void removeStatisticsHandler()
移除当前的StatisticsHandler对象


 void removeSubscriptionHandler( SubscriptionHandler* sh )
从订阅处理器列表中移除一个指定的处理器


 void removeTagHandler ( TagHandler*  th,
                                      const std::string & tag,
                                     const std::string & xmlns )
从标签处理器列表中移除一个符合指定元素和名空间的处理器对象


bool  sasl() const
返回SASL当前是否有效(不是必需调用的)


void  send( Tag* tag )(虚函数)
在己建立的连接上发送指定的标签。ClientBase对象成为此Tag对象的宿主,发送之后会删除它。
你不应该在此Tag被发送之后还使用它,如果你确实想使用,请调用Tag::clone进行深度复制。

const std::string& server()const
返回当前连接到的服务器


void setAuthzid( const JID & zuthzid )
设定一个认证ID(authzid),如果服务支持此ID并且此ID有足够的权限,可能发生这样的情况,以[email protected] 认证,却像[email protected] 的行为。

void setCACerts( const StringList& cacerts)
向ClientBase 设置一些可信赖用于验证一个服务器证书的根证书
参数:  cacerts   保存增强保密格式的根证书文件一个绝对路径列表


void setClientCert( const std::string & clientKey,
                           const std::string & clientCerts )
使用此函数设定用户的证书和密钥。证书将在服务发出需要时被提供和用于SASL 外部证书(SASL EXTERNAL)。用户的所有证书应该是捆在一起保存在增强保密文件格式中。第一个证书应该是用户的证书,接下来的每个证书应该标记为更以前的。
注意: 这些证书不需要和那些用于认证服务器的证书一样。


void setCompression( bool compression )
用于变换流的压缩开关。默认:开,如果可以的话。流压缩唯一不需要时就是用它会产生错误,否则,就要保持 开的状态。


void setCompressionImpl( CompressionBase * cb )
如果你有其它的压缩算法类,用此函数设置进去。这样你的类会在connect()之前被调用。如果己经设定了一个压缩实现,则以前的会被删除。


void setConnectionImpl( ConnectionBase* cb)
如果你有其它的实现 UDP,SCTP(诸如此类)连接的实现类,用此函数设定进去,这样你的类会在connect()之前被调用。如果己经设定了这样的一个实现类,那么以前的会被删除。


void setEncryptionImpl( TLSBase * tb )
如果你有其它的支持硬加密的类,用此函数设置进去。这样你的类会在connect()之前被调用。如果己经设定了一个加密实现,则之前的会被删除。


void setPassword( const std::string & password )
设置连接到XMPP服务器用到的密码。

void setPort( int port )
设置连接到的服务器端口。如果 要么使用默认值5222或服务记录中存在,那么它就不是必须的。

void setSasl(bool  sasl )
 切换SASL的开关,默认:on, 唯一关闭的可能是 使用它有了问题


void setSASLMechanisms( int mechanisms )
此函数限制gloox 使用的SASL机制。默认情况下,支持gloox允许的所有机制。如果舍弃一个机制(或多个),则从SaslMechAll变量中像这样移除:
   int  mymechs = SaslMechAll ^ SaslMechDigestMd5;


void setServer ( const std::string & server )
设定要连接到的XMPP服务器
参数:   server  不是IP就是一个完全合格的域名称
注意:如果你改变了服务器,JID的服务器部分不会自动同步。你必须手动调用 jid()和JID::setServer()。
          这个函数对使用中的Connection(Base) 服务器进行同样的设定。


void setTls( TLSPolicy tls )
设置TLS策略。默认情况下:如果允许,TLS是有效的。TLS唯一无效的情况就是在使用它时产生了错误。


GLOOX_DEPRECATED   void setTls( bool tls )
切换使用TLS的开关(如果允许)。默认:开(如果允许)。TLS唯一无效的情况就是在使用它时产生了错误。


void setXmlLang( const std::string & xmllang )
在初始化流时,设置xml:lang属性的值。
参数:
     xmllang  流的语言识别码。必须符合2.12节XML的定义和RFC3066。默认是‘en’(英语)


ConnectionState  state( )const
返回当前连接的状态


StreamError  streamError() const

 此函数用来检索出流错误,(此后可以做进一步挽救)并且从ConnectionListener接收到类型为ConnStreamError 的连接错误。

注意:
此函数的返回值只有在ConnectionListener::onDisconnect()中使用才有意义。


const Tag* streamErrorAppCondition()const
此函数用来检索一个流错误中应用特有的错误情形
返回值:
返回一个流错误中应用特有的错误元素。当没有错误发生或没有找到对应的错误元素时,返回0


const std::string & streamErrorCData()const
 此函数检索一个流错误中定义的包含XML字符数据的元素。RFC3920只定义了一种有可能的情形(查看其它主机)
返回值:
流中错误元素的文本(只对查看其它主机)


const std::string streamErrorText( const std::string & lang="default" )const
如果可能,返回指定语言的一个流错误文本信息。如果要求的语言无效,那么返回默认的文本信息(xml:lang 属性除外)

参数:
lang   希望的语言标识符。它必须符合XML规格说明书中的2.12节和RFC3066。如果为空,则返回默认文本。
返回值:
   一个流错误的文术描述。如果没有流错误发生,则返回空

bool  tls( ) const
返回TLS是否在当前有效。(不必使用)
返回值:  当前TLS 状态


void trackID(  IqHandler*             ih,
                    const std::string& id,
                    int                        context
)
调用此函数,当指定id属性值IQ节到达时,应用将得到通知。因为ID都是唯一的,所以通知只有一次

参数:
     ih             此IqHandler将收到通知
     id             跟踪的ID
     context     恢复上下文准许的值

virtual const std::string& username()const
重新实现此函数向一个连接意图提供一个名称


void  whitespacePing()
向服务器发送一个空白的ping命令


 const std::string& smlLang()const
检索初始化流中xml:lang属性的值,如果没有使用setXmlLang()改变它的值,就是默认值'en'

void xmppPing(  const JID& to )
以指定的JID发送一个XMPP ping命令(XEP-0199)。没有方法知道远程实例是否回应此ping命令(除非为urn:xmpp:ping名空间注册一个IQ处理器)

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/night_cat/archive/2009/06/17/4277710.aspx

你可能感兴趣的:(IM,即时通讯,gloox)