GuoWenxue
2022-04-22 0fd2ff9f9aca1f30d6b4620f90802223cc221fe0
apue/project_socket/main/client_main.c
@@ -15,6 +15,7 @@
#include "socket.h"
#include "sqlite_blob.h"
#include "util_proc.h"
#include "util_time.h"
void print_usage(char *progname)
@@ -35,12 +36,12 @@
int main(int argc, char **argv)
{
   int                  rv = -1;
   int                  pr_times = 0;
   int                  port;
   char                *serverip;
   int                  interval = 30; /* default report termperature every 30 seconds */
   int                  sn = 1;        /* default serial number for device ID */
   int                  debug = 0;     /* running in debug mode or not */
   int                  loglevel = LOG_LEVEL_INFO;
   char                *logfile="client.log";
   socket_ctx_t         sock;
@@ -76,6 +77,8 @@
         case 'd':
            debug=1;
                logfile="stdout";
                loglevel=LOG_LEVEL_DEBUG;
            break;
         case 'I':
@@ -97,23 +100,17 @@
   {
      print_usage(argv[0]);
      return 0;
   }
    }
   if( debug )
   {
      /* set logger to standard output with level debug */
      logger_init(NULL, LOG_LEVEL_DEBUG);
      log_info("set program running on debug now.\n");
   }
   else
   {
      /* set logger to $logfile with level info */
      if( logger_init(logfile, LOG_LEVEL_INFO) < 0 )
      {
         fprintf(stderr, "Initial logger file '%s' failure: %s\n", strerror(errno));
         return 1;
      }
    /* set logger to $logfile with level info */
    if( logger_init(logfile, loglevel) < 0 )
    {
        fprintf(stderr, "Initial logger file '%s' failure: %s\n", logfile, strerror(errno));
        return 1;
    }
   if( !debug )
   {
      log_info("set program running on background now.\n");
      daemon(1, 1); /* don't change work path, don't close opened file descriptor */
   }
@@ -163,70 +160,66 @@
      /* start connect to server if not connected */
      if( sock.fd < 0 )
      {
         if( 0 == (pr_times % 10) )
         {
            log_info("socket not connect, start connect it now.\n");
         }
         socket_connect(&sock);
      }
      /* check socket connected or not  */
      if( sock_check_connect(sock.fd) < 0 )
      {
         pr_times ++;
         if( 0 == (pr_times % 10) )
         if( sock.fd > 0 )
         {
            log_error("socket got disconnected, terminate it and reconnect now.\n");
            pr_times = 0;
         }
         socket_term(&sock); /* close the soket */
      }
      /* socket disconnected */
      if( sock.fd < 0 )
      {
         if( sample_flag )
         {
            blobdb_push_packet(pack_buf, pack_bytes);
         }
      }
      else /* socket connected */
      {
         /* +---------------------------------+
          * |   socket send sample packet     |
          * +---------------------------------+*/
         if( sample_flag )
         {
            log_debug("socket send sample packet bytes[%d]: %s\n", pack_bytes, pack_buf);
            if( socket_send(&sock, pack_buf, pack_bytes) < 0 )
            {
               log_warn("socket send sample packet failure, save it in database now.\n");
               blobdb_push_packet(pack_buf, pack_bytes);
               socket_term(&sock); /* close the soket */
            }
         }
         /* +---------------------------------+
          * | socket send packet in database  |
          * +---------------------------------+*/
         if( !blobdb_pop_packet(pack_buf, sizeof(pack_buf), &pack_bytes) )
         {
            log_debug("socket send database packet bytes[%d]: %s\n", pack_bytes, pack_buf);
            if( socket_send(&sock, pack_buf, pack_bytes) < 0 )
            {
               log_error("socket send database packet failure");
               socket_term(&sock); /* close the soket */
            }
            else
            {
               log_warn("socket send database packet okay, remove it from database now.\n");
               blobdb_del_packet();
            }
                socket_term(&sock); /* close the soket */
         }
      }
      sleep(1);
   }
        /* +-------------------------------+
         * |      socket disconnect        |
         * +-------------------------------+*/
        if( sock.fd < 0 )
        {
            if( sample_flag )
            {
                blobdb_push_packet(pack_buf, pack_bytes);
            }
            continue;
        }
        /* +-------------------------------+
         * |      socket connected         |
         * +-------------------------------+*/
        /*  socket send sample packet */
        if( sample_flag )
        {
            log_debug("socket send sample packet bytes[%d]: %s\n", pack_bytes, pack_buf);
            if( socket_send(&sock, pack_buf, pack_bytes) < 0 )
            {
                log_warn("socket send sample packet failure, save it in database now.\n");
                blobdb_push_packet(pack_buf, pack_bytes);
                socket_term(&sock); /* close the soket */
            }
        }
        /*  socket send packet in database  */
        if( !blobdb_pop_packet(pack_buf, sizeof(pack_buf), &pack_bytes) )
        {
            log_debug("socket send database packet bytes[%d]: %s\n", pack_bytes, pack_buf);
            if( socket_send(&sock, pack_buf, pack_bytes) < 0 )
            {
                log_error("socket send database packet failure");
                socket_term(&sock); /* close the soket */
            }
            else
            {
                log_warn("socket send database packet okay, remove it from database now.\n");
                blobdb_del_packet();
            }
        }
        msleep(100);
    }
   socket_term(&sock);
   database_term();