Api.kt 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package io.nexilis.service
  2. import android.app.Activity
  3. import android.content.Context
  4. import android.content.Intent
  5. import android.os.Build
  6. import android.util.Log
  7. import dagger.hilt.android.EntryPointAccessors
  8. import io.newuniverse.SDK.nuSDKService
  9. import io.nexilis.service.core.ApiEntry
  10. import io.nexilis.service.core.DaggerIncomingComponent
  11. import io.nexilis.service.core.Data
  12. import io.nexilis.service.core.getSharedPreferences
  13. import io.nexilis.service.core.optString
  14. import io.nexilis.service.core.put
  15. import kotlinx.coroutines.launch
  16. import java.security.SecureRandom
  17. import java.util.concurrent.TimeUnit
  18. import java.util.concurrent.locks.Condition
  19. import java.util.concurrent.locks.ReentrantLock
  20. import kotlin.concurrent.withLock
  21. class Api {
  22. companion object {
  23. internal val lock = ReentrantLock()
  24. internal var condition: Condition? = null
  25. fun connect(account: String, activity: Activity) {
  26. Log.d(tag, "connect:$account")
  27. val sdkCallback = SdkCallback()
  28. DaggerIncomingComponent.builder()
  29. .context(activity)
  30. .appDependencies(
  31. EntryPointAccessors.fromApplication(
  32. activity.applicationContext,
  33. ApiEntry.IncomingInterface::class.java
  34. )
  35. )
  36. .build()
  37. .inject(sdkCallback)
  38. Thread {
  39. try {
  40. activity.startService(Intent(activity, nuSDKService::class.java))
  41. while (!nuSDKService.bServiceStarted()) {
  42. Thread.sleep(100)
  43. }
  44. val preferences = activity.getSharedPreferences()
  45. preferences.put(key = "api", value = account)
  46. val random = String.format("%010d", SecureRandom().nextInt(999999))
  47. val session = preferences.optString(
  48. key = "session", default = random
  49. )
  50. Log.d(tag, "initConnection:$pass,$account,$activity,$session")
  51. nuSDKService.getInstance(pass).initConnection(
  52. pass,
  53. account,
  54. activity,
  55. SdkCallback::class.java,
  56. sdkCallback,
  57. "202.158.33.26",
  58. 62823,
  59. session,
  60. "09:00",
  61. false,
  62. "202.158.33.26:62823"
  63. )
  64. val signature: String =
  65. nuSDKService.getInstance(pass).sGetSignature()
  66. if ("1,1,1,1,1,1,1,1,1,1,1,1" != signature) nuSDKService.getInstance(pass)
  67. .UpdateSignature()
  68. val pin = preferences.optString(key = "pin", default = "")
  69. if (pin.isEmpty()) {
  70. condition = lock.newCondition()
  71. lock.withLock {
  72. Log.d(tag, "wait connection")
  73. condition?.let {
  74. val await = it.await(15, TimeUnit.SECONDS)
  75. preferences.put(key = "session", value = session)
  76. Log.d(tag, "signup:start:$await")
  77. val response = Service.sendSync(
  78. Data(
  79. code = "SUA01",
  80. status = System.nanoTime().toString(),
  81. bodies = mutableMapOf("Api" to account)
  82. )
  83. )
  84. Log.d(tag, "signup:response:$response")
  85. response?.let { r ->
  86. Log.d(tag, "signup:isOk:${r.isOk()}")
  87. if (r.isOk()) {
  88. val p = r.bodies["A00"] ?: ""
  89. Log.d(tag, "signup:put:pin:$p")
  90. preferences.put(key = "pin", value = p)
  91. Log.d(tag, "signup:retrieve")
  92. Service.sendAsync(
  93. Data(
  94. code = "A050",
  95. status = System.nanoTime().toString(),
  96. )
  97. )
  98. }
  99. }
  100. }
  101. }
  102. }
  103. Log.d(tag, "user pin: ${preferences.optString(key = "pin", default = "")}")
  104. } catch (e: Exception) {
  105. Log.e(tag, e.message, e)
  106. }
  107. }.start()
  108. }
  109. internal fun sendToken(context: Context, token: String) {
  110. if (context.getSharedPreferences().getBoolean("is_login", false)) {
  111. context.getSharedPreferences().getString("pin", null)?.let {
  112. apiScope.launch {
  113. Service.sendAsync(
  114. Data(
  115. code = "ATO",
  116. status = System.nanoTime().toString(),
  117. f_pin = it,
  118. bodies = mutableMapOf(
  119. "TKN" to token,
  120. "Bo" to Build.BRAND
  121. )
  122. )
  123. )
  124. }
  125. }
  126. }
  127. }
  128. fun version(): String {
  129. return nuSDKService.getInstance(pass).sGetVersion()
  130. }
  131. fun isConnected(): Boolean {
  132. return nuSDKService.getInstance(pass).nGetCLXConnState() == 1.toByte()
  133. }
  134. }
  135. }