void *client_loop_init(void *sthread) { TSuplaClientCfg scc; supla_client_cfginit(&scc); snprintf(scc.Name, SUPLA_CLIENT_NAME_MAXSIZE, "Console client"); snprintf(scc.SoftVer, SUPLA_SOFTVER_MAXSIZE, "1.0-Linux"); if ( cfg_pwd != NULL ) snprintf(scc.AccessIDpwd, SUPLA_ACCESSID_PWD_MAXSIZE, "%s", cfg_pwd); scc.AccessID = cfg_aid; memcpy(scc.clientGUID, cfg_client_GUID, SUPLA_GUID_SIZE); scc.host = cfg_host; if ( cfg_ssl_enabled ) { scc.ssl_port = cfg_port; } else { scc.tcp_port = cfg_port; } scc.ssl_enabled = cfg_ssl_enabled; scc.user_data = sthread; scc.cb_on_registererror = &client_loop_on_registererror; scc.cb_location_update = &client_loop_location_update; scc.cb_channel_update = &client_loop_channel_update; scc.cb_channel_value_update = &client_loop_channel_value_update; scc.cb_on_event = &client_loop_on_event; return supla_client_init(&scc); }
JNIEXPORT void JNICALL Java_org_supla_android_lib_SuplaClient_CfgInit(JNIEnv* env, jobject thiz, jobject cfg) { TSuplaClientCfg sclient_cfg; jfieldID fid; jclass jcs = (*env)->GetObjectClass(env, cfg); if ( jcs ) { supla_client_cfginit(&sclient_cfg); fid = supla_client_GetFieldID(env, jcs, "ssl_enabled", "Z"); (*env)->SetBooleanField(env, cfg, fid, sclient_cfg.ssl_enabled == 1 ? JNI_TRUE : JNI_FALSE); fid = supla_client_GetFieldID(env, jcs, "ssl_port", "I"); (*env)->SetIntField(env, cfg, fid, sclient_cfg.ssl_port); fid = supla_client_GetFieldID(env, jcs, "tcp_port", "I"); (*env)->SetIntField(env, cfg, fid, sclient_cfg.tcp_port); if ( sclient_cfg.host == NULL ) sclient_cfg.host = ""; fid = supla_client_GetFieldID(env, jcs, "Host", "Ljava/lang/String;"); (*env)->SetObjectField(env, cfg, fid, (*env)->NewStringUTF(env, sclient_cfg.host)); fid = supla_client_GetFieldID(env, jcs, "SoftVer", "Ljava/lang/String;"); (*env)->SetObjectField(env, cfg, fid, (*env)->NewStringUTF(env, sclient_cfg.SoftVer)); fid = supla_client_GetFieldID(env, jcs, "AccessIDpwd", "Ljava/lang/String;"); (*env)->SetObjectField(env, cfg, fid, (*env)->NewStringUTF(env, sclient_cfg.AccessIDpwd)); fid = supla_client_GetFieldID(env, jcs, "AccessID", "I"); (*env)->SetIntField(env, cfg, fid, sclient_cfg.AccessID); fid = supla_client_GetFieldID(env, jcs, "Name", "Ljava/lang/String;"); (*env)->SetObjectField(env, cfg, fid, (*env)->NewStringUTF(env, sclient_cfg.Name)); jbyteArray arr = (*env)->NewByteArray(env, SUPLA_GUID_SIZE); (*env)->SetByteArrayRegion (env, arr, 0, SUPLA_GUID_SIZE, sclient_cfg.clientGUID); fid = supla_client_GetFieldID(env, jcs, "clientGUID", "[B"); (*env)->SetObjectField(env, cfg, fid, arr); }; }
JNIEXPORT jlong JNICALL Java_org_supla_android_lib_SuplaClient_scInit(JNIEnv* env, jobject thiz, jobject cfg) { TSuplaClientCfg sclient_cfg; jfieldID fid; jclass jcs = (*env)->GetObjectClass(env, cfg); if ( jcs ) { supla_client_cfginit(&sclient_cfg); fid = supla_client_GetFieldID(env, jcs, "ssl_enabled", "Z"); sclient_cfg.ssl_enabled = (*env)->GetBooleanField(env, cfg, fid) == JNI_TRUE ? 1 : 0; fid = supla_client_GetFieldID(env, jcs, "ssl_port", "I"); sclient_cfg.ssl_port = (*env)->GetIntField(env, cfg, fid); fid = supla_client_GetFieldID(env, jcs, "tcp_port", "I"); sclient_cfg.tcp_port = (*env)->GetIntField(env, cfg, fid); fid = supla_client_GetFieldID(env, jcs, "Host", "Ljava/lang/String;"); jstring js_host = (*env)->GetObjectField(env, cfg, fid); sclient_cfg.host = (char *)(*env)->GetStringUTFChars(env, js_host, 0); supla_android_client_jstring_to_buffer(env, cfg, jcs, "SoftVer", sclient_cfg.SoftVer, SUPLA_SOFTVER_MAXSIZE); supla_android_client_jstring_to_buffer(env, cfg, jcs, "AccessIDpwd", sclient_cfg.AccessIDpwd, SUPLA_ACCESSID_PWD_MAXSIZE); fid = supla_client_GetFieldID(env, jcs, "AccessID", "I"); sclient_cfg.AccessID = (*env)->GetIntField(env, cfg, fid); supla_android_client_jstring_to_buffer(env, cfg, jcs, "Name", sclient_cfg.Name, SUPLA_CLIENT_NAME_MAXSIZE); fid = supla_client_GetFieldID(env, jcs, "clientGUID", "[B"); jbyteArray barr = (*env)->GetObjectField(env, cfg, fid); if ( SUPLA_GUID_SIZE == (*env)->GetArrayLength(env, barr) ) { jbyte *data = (jbyte *)(*env)->GetByteArrayElements(env, barr, NULL); if ( data ) { memcpy(sclient_cfg.clientGUID, data, SUPLA_GUID_SIZE); (*env)->ReleaseByteArrayElements(env, barr, data, 0 ); } } TAndroidSuplaClient *_asc = malloc(sizeof(TAndroidSuplaClient)); memset(_asc, 0, sizeof(TAndroidSuplaClient)); _asc->j_obj = (*env)->NewGlobalRef(env, thiz); jclass oclass = (*env)->GetObjectClass(env, thiz); _asc->j_mid_on_versionerror = supla_client_GetMethodID(env, oclass, "onVersionError", "(Lorg/supla/android/lib/SuplaVersionError;)V"); _asc->j_mid_on_connected = supla_client_GetMethodID(env, oclass, "onConnected", "()V"); _asc->j_mid_on_connerror = supla_client_GetMethodID(env, oclass, "onConnError", "(Lorg/supla/android/lib/SuplaConnError;)V"); _asc->j_mid_on_disconnected = supla_client_GetMethodID(env, oclass, "onDisconnected", "()V"); _asc->j_mid_on_registering = supla_client_GetMethodID(env, oclass, "onRegistering", "()V"); _asc->j_mid_on_registered = supla_client_GetMethodID(env, oclass, "onRegistered", "(Lorg/supla/android/lib/SuplaRegisterResult;)V"); _asc->j_mid_on_registererror = supla_client_GetMethodID(env, oclass, "onRegisterError", "(Lorg/supla/android/lib/SuplaRegisterError;)V"); _asc->j_mid_location_update = supla_client_GetMethodID(env, oclass, "LocationUpdate", "(Lorg/supla/android/lib/SuplaLocation;)V"); _asc->j_mid_channel_update = supla_client_GetMethodID(env, oclass, "ChannelUpdate", "(Lorg/supla/android/lib/SuplaChannel;)V"); _asc->j_mid_channel_value_update = supla_client_GetMethodID(env, oclass, "ChannelValueUpdate", "(Lorg/supla/android/lib/SuplaChannelValueUpdate;)V"); _asc->j_mid_on_event = supla_client_GetMethodID(env, oclass, "onEvent", "(Lorg/supla/android/lib/SuplaEvent;)V"); sclient_cfg.user_data = _asc; sclient_cfg.cb_on_versionerror = supla_android_client_cb_on_versionerror; sclient_cfg.cb_on_connected = supla_android_client_cb_on_connected; sclient_cfg.cb_on_connerror = supla_android_client_cb_on_connerror; sclient_cfg.cb_on_disconnected = supla_android_client_cb_on_disconnected; sclient_cfg.cb_on_registering = supla_android_client_cb_on_registering; sclient_cfg.cb_on_registered = supla_android_client_cb_on_registered; sclient_cfg.cb_on_registererror = supla_android_client_cb_on_registererror; sclient_cfg.cb_location_update = supla_android_client_cb_location_update; sclient_cfg.cb_channel_update = supla_android_client_cb_channel_update; sclient_cfg.cb_channel_value_update = supla_android_client_cb_channel_value_update; sclient_cfg.cb_on_event = supla_android_client_cb_on_event; _asc->_supla_client = supla_client_init(&sclient_cfg); if ( sclient_cfg.host ) { (*env)->ReleaseStringUTFChars(env, js_host, sclient_cfg.host); } if ( _asc->_supla_client ) { #ifdef _LP64 return (jlong)_asc; #else return (int)_asc; #endif } else { free(_asc); } } return 0; }