int client_init(t_client *clt, char **av) { if (init_func_name(clt) == -1) return (-1); clt->ret_att = 0; if (!(clt->pe = getprotobyname("TCP"))) return (err_msg("Err: getprotobyname")); if (av != NULL) { clt->ip = av[1]; clt->port = atoi(av[2]); clt->log = 1; clt->ret_att = 1; if (client_reconnect(clt) < 0) return (-1); } if ((clt->chanel = malloc(sizeof(char) * 4096)) == NULL) return (err_msg(": malloc fail")); clt->chanel = ""; clt->pass = ""; clt->nick = ""; clt->user = ""; return (0); }
void client_process(void) { fd_set readfds; int ret; int num_read_from_socket; int num_to_send; int res = -1; struct timeval tv; sys_log(FUNC, LOG_MSG, "start"); while (1) { heartbeat_timeout ++; sys_log(FUNC, LOG_DBG, "heartbeat_timeout = %d heartbeat_s=%d",heartbeat_timeout, heartbeat_s); if (heartbeat_timeout > heartbeat_s){ sys_log(FUNC, LOG_ERR, "heartbeat timeout --> reconnect"); set_heartbeat(HEARTBEAT_OFFLINE, HEARTBEAT_TIMEOUT); } sleep(1); if (g_reconnect_flag == RECONNECT_ON || g_reconnect_flag == HEARTBEAT_OFFLINE){ if (SUCCESS == client_reconnect()){ g_reconnect_flag = RECONNECT_OFF; } } if (g_sockfd_client <=0){ //sys_log(FUNC, LOG_WARN, "g_sockfd_client"); g_reconnect_flag = RECONNECT_ON; continue; } FD_ZERO(&readfds); FD_SET(g_sockfd_client, &readfds); tv.tv_sec = 0; tv.tv_usec = 1000; res = select(g_sockfd_client + 1, &readfds, NULL, NULL, &tv); if (res < 0){ continue; }else if (res > 0){ if (FD_ISSET(g_sockfd_client, &readfds)) num_read_from_socket = read(g_sockfd_client, buf, 100); }else{ continue; } if(num_read_from_socket <= 0){ continue; } sys_log(FUNC, LOG_WARN, "recv %d bytes!\n",num_read_from_socket); printf_hex(buf,num_read_from_socket); if (check_head(buf) == -1 ){ continue; } g_sockfd_client_status = SOCKFD_CLIENT_OK; switch (buf[2]){ case PROTOCOL_GET_DEVICE_ATTR: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_DEVICE_ATTR"); if(!check_for_get_device_attr(buf,num_read_from_socket)) { num_to_send = make_ack_get_device_attr(buf_send); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_SET_DEVICE_ATTR: sys_log(FUNC, LOG_DBG, "PROTOCOL_SET_DEVICE_ATTR"); if(!check_for_set_device_attr(buf,num_read_from_socket)) { /*todo set device attr 传感器有好几类,此处只处理报警传感器 */ set_alarmin_device_attr(buf); num_to_send = make_ack_set_device_attr(buf_send); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_GET_ALARM_STATUS: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_ALARM_STATUS"); if(!check_for_get_alarm_status(buf,num_read_from_socket)) { /*alarmin*/ num_to_send = make_ack_get_alarm_status(buf_send, g_alarm_in); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_GET_TIME: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_TIME"); /*TODO ?*/ break; case PROTOCOL_SET_TIME: sys_log(FUNC, LOG_DBG, "PROTOCOL_SET_TIME"); if(!check_for_set_time(buf,num_read_from_socket)) { /* TODO */ /*set time*/ num_to_send = make_ack_set_time(buf_send); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_SET_HEARTBEAT: sys_log(FUNC, LOG_DBG, "PROTOCOL_SET_HEARTBEAT"); if(!check_for_set_heartbeat(buf,num_read_from_socket)) { num_to_send = make_ack_set_heartbeat(buf_send,heartbeat_s); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); set_heartbeat(HEARTBEAT_ONLINE, buf[4]); led_ctrl(LED_D3_ALARM_SERVER_STATUS, LED_ON); } break; case PROTOCOL_GET_UART_QTY: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_UART_QTY"); if(!check_for_get_uart_qty(buf,num_read_from_socket)) { num_to_send = make_ack_get_uart_qty(buf_send); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_GET_UART_ATTR: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_UART_ATTR"); if (!check_for_get_uart_attr(buf, num_read_from_socket)){ num_to_send = make_ack_get_uart_attr(buf_send, buf); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_SET_UART_ATTR: sys_log(FUNC, LOG_DBG, "PROTOCOL_SET_UART_ATTR"); if (!check_for_set_uart_attr(buf, num_read_from_socket)){ num_to_send=make_ack_set_uart_attr(buf_send,buf); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_QUERY_UART_SENDBUF: sys_log(FUNC, LOG_DBG, "PROTOCOL_QUERY_UART_SENDBUF"); if (!check_for_query_uart_sendbuf(buf, num_read_from_socket)){ num_to_send = make_ack_query_uart_sendbuf(buf_send); /*TODO :buf*/ ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_UART_SEND_DATA: sys_log(FUNC, LOG_DBG, "PROTOCOL_UART_SEND_DATA"); if (!check_for_uart_send_data(buf, num_read_from_socket)){ num_to_send = make_ack_uart_send_data(buf_send); /*TODO*/ ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_SET_UART_RECV_ATTR: sys_log(FUNC, LOG_DBG, "PROTOCOL_SET_UART_RECV_ATTR"); if (!check_for_set_uart_recv_attr(buf, num_read_from_socket)){ /*TODO*/ } break; case PROTOCOL_QUERY_UART_RECV_DATA: sys_log(FUNC, LOG_DBG, "PROTOCOL_QUERY_UART_RECV_DATA"); if (!check_for_query_uart_recv_data(buf, num_read_from_socket)){ num_to_send = make_ack_query_uart_recv_data(buf_send); /*TODO*/ ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_GET_IO_NUM: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_IO_NUM"); if (!check_for_get_io_num(buf, num_read_from_socket)){ num_to_send = make_ack_get_io_num(buf_send); /*TODO*/ ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_SET_IO: sys_log(FUNC, LOG_DBG, "PROTOCOL_SET_IO"); if (!check_for_set_io(buf, num_read_from_socket)){ /*TODO*/ set_io_out(buf); } break; case PROTOCOL_GET_IO_STATUS: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_IO_STATUS"); if (!check_for_get_io_status(buf, num_read_from_socket)){ num_to_send = make_ack_get_io_status(buf_send, buf); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_GET_TEMP_NUM: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_TEMP_NUM"); if (!check_for_get_temp_num(buf, num_read_from_socket)){ num_to_send = make_ack_get_temp_num(buf_send); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_SET_TEMP: sys_log(FUNC, LOG_DBG, "PROTOCOL_SET_TEMP"); set_temp(buf); break; case PROTOCOL_GET_TEMP_STATUS: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_TEMP_STATUS"); if (!check_for_get_temp_status(buf, num_read_from_socket)){ num_to_send = make_ack_get_temp_status(buf_send); ret = write(g_sockfd_client, buf_send, num_to_send); if(ret != num_to_send) printf("write socket error!\n"); sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; #if 0 case PROTOCOL_GET_SENSOR_TYPE: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_SENSOR_TYPE"); if (!check_for_get_sensor_type(buf, num_read_from_socket)){ num_to_send = make_ack_get_sensor_type(buf_send); ret = write(g_sockfd_client, buf_send, num_to_send); if (ret != num_to_send){ printf("write socket error!\n"); } sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; case PROTOCOL_GET_SENSOR_DATA: sys_log(FUNC, LOG_DBG, "PROTOCOL_GET_SENSOR_DATA"); if (!check_for_get_sensor_data(buf, num_read_from_socket)){ num_to_send = make_ack_get_sensor_data(buf_send); ret = write(g_sockfd_client, buf_send, num_to_send); if (ret != num_to_send){ printf("write socket error!\n"); } sys_log(FUNC, LOG_DBG, "send %d bytes", num_to_send); printf_hex(buf_send, num_to_send); } break; #endif default: sys_log(FUNC, LOG_ERR, "wrong cmd from server "); break; } } }