APUE Learning Example Source Code
guowenxue
2023-11-06 d241def81514078e2f3650218781bc4353c4d4bd
prj1_tlv/tlv_client.c
@@ -22,6 +22,7 @@
#include "ds18b20.h"
#include "socket.h"
#include "tlv_pack.h"
#include "sqlite_cli.h"
#define PROG_VERSION     "1.0.0"
#define RPI_SN           "RPI00001"
@@ -130,15 +131,11 @@
        } 
    }
#if 1
    if( !host )
    {
        printf("ERROR: No argument specify host server address and port, please refer to usage\n");
    //    return 1;
        return 1;
    }
#endif
    /* check program already running or not, if already running then exit, or set running as daemon */
    snprintf(pid_file, sizeof(pid_file), "/tmp/%s.pid", progname);
@@ -150,7 +147,7 @@
            return -1;
        }
        daemon(1, 1);
        set_daemon_running(pid_file);
    }
    record_daemon_pid(pid_file);
@@ -162,18 +159,16 @@
        return 2;
    }
    log_nrml("Program start running\n");
    /* install signal proc handler */
    install_proc_signal();
    log_nrml("Program start running\n");
#if 0
    if( initial_db(&sqldb, db_file) < 0)
    if( clidb_init("./tlv_client.db")< 0)
    {
        log_err("initialise sqlite database failure\n");
        log_err("initial sqlite database failure\n");
        return 3;
    }
#endif
    last_time = 0;
@@ -181,7 +176,7 @@
    while( !g_signal.stop )
    {
        time(&cur_time);
        if( cur_time-last_time > 3)
        if( cur_time-last_time > 10)
        {
            log_nrml("start sample temperature now.\n");
            rv = 0;
@@ -213,44 +208,49 @@
            }
        }
        if( (tlv.flag&TLV_FLAG_TX) && SOCK_STAT_CONNECTED==sock.status )
        if( SOCK_STAT_CONNECTED == sock.status )
        {
            if(0 == socket_send_tlv_pack(&sock, &tlv, DEF_ACK_TIMEOUT, DEF_RETRYTIMES) )
            {
                tlv.flag = 0;
            /* send current new sample TLV packet  */
            if( tlv.flag&TLV_FLAG_TX )
            {
                if(0 == socket_send_tlv_pack(&sock, &tlv, DEF_ACK_TIMEOUT, DEF_RETRYTIMES) )
                {
                    tlv.flag = 0;
                }
            }
        }
#if 0
        /* need to send TLV packet in database now  */
        for(i=0; i<5; i++)
        {
            /* get a TLV record from DB and send it by socket  */
            /* rv<0: Erorr  rv=0: No record  >0: record count  */
            rv = get_db_tlv_pack(sqldb, tlv, size) ;
            if( rv <= 0)
                break;
            if( 0 == socket_send_tlv_pack() )
            /* get TLV apcket from database and send it by socket, maxim 5 records  */
            for(i=0; i<5; i++)
            {
                /* delete the record from DB */
                del_db_tlv_pack();
                int            id;
                tlv_buf_t      tmp;
                if( clidb_pop_tlvpack(&tmp, &id) <= 0 )
                {
                    break;
                }
                /* send the TLV packet from database */
                if(0 == socket_send_tlv_pack(&sock, &tmp, DEF_ACK_TIMEOUT, DEF_RETRYTIMES) )
                {
                    /* delete the record from DB */
                    clidb_del_tlvpack(id);
                }
            }
        }
SAVE_DB:
        if( tlv_buf.flag & TLV_FLAG_DB)
        if( tlv.flag & TLV_FLAG_DB )
        {
            record_db_tlv(sqldb, tlv_buf, tlv_len);
            clidb_push_tlvpack(&tlv);
            tlv.flag = 0;
        }
#endif
        sleep(1);
    }
    logger_term();
    //db_term();
    clidb_term();
    return 0;
@@ -309,6 +309,9 @@
    int            rv = 0; 
    char           buf[128];
    if( sock->status != SOCK_STAT_CONNECTED )
        return -1;
    log_info("start to send tlv packet from socket now\n");
    for(i=0; i<retry_times; i++)
@@ -322,8 +325,12 @@
        if( (rv=socket_recv(sock, buf, sizeof(buf), timeout)) < 0 )
        {
            log_err("read ACK from server failure, rv=%d\n", rv);
            return -2;
            return 0;
        }
        /* todo: parser ACK from buf  */
        if( ACK )
            break;
    }
    return 0;