示例#1
0
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);
	}

}
示例#2
0
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;
		}
	};

}
示例#3
0
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;
    }
  }
}