void client_loop_on_registererror(void *_suplaclient, void *sthread, int code) { if ( code == SUPLA_RESULTCODE_BAD_CREDENTIALS ) { st_app_terminate = 1; sthread_terminate(sthread); } else { usleep(5000000); } }
void svr_ipcctrl::execute(void *sthread) { if ( sfd == -1 ) return; int len; struct timeval last_action; gettimeofday(&last_action, NULL); send(sfd, hello, sizeof(hello), 0); while(sthread_isterminated(sthread) == 0) { eh_wait(eh, 1000000); if ( (len = recv(sfd, buffer, sizeof(buffer), 0)) != 0 ) { if ( len > 0 ) { buffer[255] = 0; if ( match_command(cmd_is_iodev_connected, len) ) { int UserID = 0; int DeviceID = 0; sscanf (&buffer[strlen(cmd_is_iodev_connected)], "%i,%i", &UserID, &DeviceID); if ( UserID && DeviceID && supla_user::is_device_online(UserID, DeviceID) ) { send_result("CONNECTED:",DeviceID); } else { send_result("DISCONNECTED:",DeviceID); } } else if ( match_command(cmd_user_reconnect, len) ) { int UserID = 0; sscanf (&buffer[strlen(cmd_user_reconnect)], "%i", &UserID); if ( UserID && supla_user::reconnect(UserID) ) { send_result("OK:", UserID); } else { send_result("USER_UNKNOWN:", UserID); } } else if ( match_command(cmd_get_double_value, len) ) { int UserID = 0; int DeviceID = 0; int ChannelID = 0; double Value; sscanf (&buffer[strlen(cmd_get_double_value)], "%i,%i,%i", &UserID, &DeviceID, &ChannelID); if ( UserID && DeviceID && ChannelID && supla_user::get_channel_double_value(UserID, DeviceID, ChannelID, &Value) ) { send_result("VALUE:", Value); } else { send_result("UNKNOWN:", ChannelID); } } } } else { sthread_terminate(sthread); } struct timeval now; gettimeofday(&now, NULL); if ( now.tv_sec-last_action.tv_sec >= 5 ) { sthread_terminate(sthread); break; } }; }
void svr_ipcctrl::execute(void *sthread) { if (sfd == -1) return; int len; struct timeval last_action; gettimeofday(&last_action, NULL); send(sfd, hello, sizeof(hello), 0); while (sthread_isterminated(sthread) == 0) { eh_wait(eh, 1000000); if ((len = recv(sfd, buffer, sizeof(buffer), 0)) != 0) { if (len > 0) { buffer[255] = 0; if (match_command(cmd_channel_get_hivalue, len)) { char hi; int number = 255; sscanf(&buffer[strlen(cmd_channel_get_hivalue)], "%i", &number); if (channelio_get_hi_value(number, &hi) == 1) { send_result("HIVALUE:", hi == 1 ? 1 : 0); } else { send_result("ERR", number); } } else if (match_command(cmd_channel_get_type, len)) { int number = 255; sscanf(&buffer[strlen(cmd_channel_get_type)], "%i", &number); send_result("TYPE:", channelio_get_type(number)); } else if (match_command(cmd_channel_set_hivalue, len)) { int hi = 0; int number = 255; unsigned int timems = 0; sscanf(&buffer[strlen(cmd_channel_set_hivalue)], "%i,%i,%i", &number, &hi, &timems); if (channelio_set_hi_value(number, hi == 1 ? 1 : 0, timems) == 1) { send_result("OK"); } else { send_result("ERR", number); } } } } else { sthread_terminate(sthread); } struct timeval now; gettimeofday(&now, NULL); if (now.tv_sec - last_action.tv_sec >= 5) { sthread_terminate(sthread); break; } } }