2016-04-07 15 views
0

kullanarak otomatik yeniden bağlan, bağlantıyı kaybettiğimde otomatik olarak yeniden bağlanabilir miyim.XmpP libstrophe kullanarak libstrophe

istemci ilk kez, i "DEBUG: bağlı" mesajı alıyorum için bağlandığında
void conn_handler(xmpp_conn_t * const conn, const xmpp_conn_event_t status, 
const int error, xmpp_stream_error_t * const stream_error, 
void * const userdata) 
{ 
    if (status == XMPP_CONN_CONNECT) { 
     fprintf(stderr, "DEBUG: connected\n");  
    } 
    else { 
     fprintf(stderr, "DEBUG: disconnected\n"); 
    } 
} 
void main() 
{ 
    xmpp_log_t *log; 
    char  *jid;  
    jid = strdup("[email protected]") 
    xmpp_initialize(); 
    log = xmpp_get_default_logger(XMPP_LEVEL_ERROR);  
    cwmp->xmpp_ctx = xmpp_ctx_new(NULL, log); 
    cwmp->xmpp_conn = xmpp_conn_new(cwmp->xmpp_ctx); 
    xmpp_conn_set_jid(cwmp->xmpp_conn, jid); 
    xmpp_conn_set_pass(cwmp->xmpp_conn, cwmp->xmpp_param.password); 
    xmpp_connect_client(cwmp->xmpp_conn, NULL, 0, conn_handler, cwmp->xmpp_ctx); 
xmpp_run(cwmp->xmpp_ctx); 
} 

: Sunucu yapılır gittiğinde i mesaj olsun "DEBUG ben istemci tarafında aşağıdaki kodu kullanılmış : bağlantı kesildi". ancak sunucu ikinci kez hazır olduğunda, istemci otomatik olarak yeniden bağlanmaz.

cevap

0

Libstrophe otomatik olarak yeniden bağlanmıyor. libstrophe-0.9.0 xmpp_conn_t nesneden başlayarak kaybetmeden giriş bilgileri ve kullanıcı işleyicileri olmadan yeniden bağlanabilir: bağlantı kesildikten sonra xmpp_conn_t nesneyi yeniden ve yeni bir tane oluşturmak gerekiyor olamaz sürümlerinde

#include <stdio.h> 
#include <strophe.h> 

void conn_handler(xmpp_conn_t * const conn, const xmpp_conn_event_t status, 
        const int error, xmpp_stream_error_t * const stream_error, 
        void * const userdata) 
{ 
    if (status == XMPP_CONN_CONNECT) { 
     fprintf(stderr, "DEBUG: connected\n"); 
    } else { 
     fprintf(stderr, "DEBUG: disconnected, reconnecting...\n"); 
     xmpp_connect_client(conn, NULL, 0, conn_handler, userdata); 
    } 
} 

int main() 
{ 
    xmpp_log_t *log; 
    xmpp_ctx_t *ctx; 
    xmpp_conn_t *conn; 
    const char *jid = "[email protected]"; 
    const char *pass = "password"; 

    xmpp_initialize(); 
    log = xmpp_get_default_logger(XMPP_LEVEL_ERROR); 
    ctx = xmpp_ctx_new(NULL, log); 
    conn = xmpp_conn_new(ctx); 
    xmpp_conn_set_jid(conn, jid); 
    xmpp_conn_set_pass(conn, pass); 
    xmpp_connect_client(conn, NULL, 0, conn_handler, NULL); 
    xmpp_run(ctx); 

    xmpp_conn_release(conn); 
    xmpp_ctx_free(ctx); 
    xmpp_shutdown(); 

    return 0; 
} 

kullanıcı 0.9.0 önce. Libstrophe-0.8.8 ve üzeri için örnek:

#include <stdio.h> 
#include <strophe.h> 

#define TIMEOUT 1000 

void conn_handler(xmpp_conn_t * const conn, const xmpp_conn_event_t status, 
        const int error, xmpp_stream_error_t * const stream_error, 
        void * const userdata) 
{ 
    int *reconnect = userdata; 

    if (status == XMPP_CONN_CONNECT) { 
     fprintf(stderr, "DEBUG: connected\n"); 
    } else { 
     fprintf(stderr, "DEBUG: disconnected, reconnecting...\n"); 
     *reconnect = 1; 
    } 
} 

int main() 
{ 
    xmpp_log_t *log; 
    xmpp_ctx_t *ctx; 
    xmpp_conn_t *conn; 
    const char *jid = "[email protected]"; 
    const char *pass = "password"; 
    int   reconnect; 

    xmpp_initialize(); 
    log = xmpp_get_default_logger(XMPP_LEVEL_ERROR); 
    ctx = xmpp_ctx_new(NULL, log); 
    while (1) { 
     conn = xmpp_conn_new(ctx); 
     xmpp_conn_set_jid(conn, jid); 
     xmpp_conn_set_pass(conn, pass); 
     xmpp_connect_client(conn, NULL, 0, conn_handler, &reconnect); 
     reconnect = 0; 
     while (!reconnect) 
      xmpp_run_once(ctx, TIMEOUT); 
     xmpp_conn_release(conn); 
    } 
    xmpp_ctx_free(ctx); 
    xmpp_shutdown(); 

    return 0; 
} 
İlgili konular