nats code
This commit is contained in:
Binary file not shown.
@@ -4,15 +4,15 @@
|
|||||||
"type": "APK",
|
"type": "APK",
|
||||||
"kind": "Directory"
|
"kind": "Directory"
|
||||||
},
|
},
|
||||||
"applicationId": "com.example.hpos",
|
"applicationId": "in.sminnovations.hpostesting.quality",
|
||||||
"variantName": "release",
|
"variantName": "release",
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
"type": "SINGLE",
|
"type": "SINGLE",
|
||||||
"filters": [],
|
"filters": [],
|
||||||
"attributes": [],
|
"attributes": [],
|
||||||
"versionCode": 1,
|
"versionCode": 101,
|
||||||
"versionName": "1.0",
|
"versionName": "2.1.101",
|
||||||
"outputFile": "app-release.apk"
|
"outputFile": "app-release.apk"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.example.hpostesting.presentation
|
package com.example.hpostesting.presentation
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import com.example.hpostesting.presentation.assurance.AssuranceControlsActivity
|
||||||
import com.example.hpostesting.presentation.dashboard.DashboardActivity
|
import com.example.hpostesting.presentation.dashboard.DashboardActivity
|
||||||
import io.nats.client.AuthHandler
|
import io.nats.client.AuthHandler
|
||||||
import io.nats.client.Connection
|
import io.nats.client.Connection
|
||||||
@@ -9,12 +10,14 @@ import io.nats.client.NKey
|
|||||||
import io.nats.client.Nats
|
import io.nats.client.Nats
|
||||||
import io.nats.client.Options
|
import io.nats.client.Options
|
||||||
import java.io.BufferedInputStream
|
import java.io.BufferedInputStream
|
||||||
|
import java.io.File
|
||||||
import java.io.FileInputStream
|
import java.io.FileInputStream
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.nio.charset.StandardCharsets
|
import java.nio.charset.StandardCharsets
|
||||||
import java.security.GeneralSecurityException
|
import java.security.GeneralSecurityException
|
||||||
import java.security.KeyStore
|
import java.security.KeyStore
|
||||||
import java.security.SecureRandom
|
import java.security.SecureRandom
|
||||||
|
import java.security.cert.CertificateFactory
|
||||||
import javax.net.ssl.KeyManager
|
import javax.net.ssl.KeyManager
|
||||||
import javax.net.ssl.KeyManagerFactory
|
import javax.net.ssl.KeyManagerFactory
|
||||||
import javax.net.ssl.SSLContext
|
import javax.net.ssl.SSLContext
|
||||||
@@ -22,19 +25,20 @@ import javax.net.ssl.TrustManager
|
|||||||
import javax.net.ssl.TrustManagerFactory
|
import javax.net.ssl.TrustManagerFactory
|
||||||
|
|
||||||
|
|
||||||
class NatsManager(datacollector: DashboardActivity) {
|
class NatsManager(datacollector: AssuranceControlsActivity) {
|
||||||
|
|
||||||
val TAG = "Nats Service"
|
val TAG = "Nats Service"
|
||||||
var nc: Connection? = null
|
var nc: Connection? = null
|
||||||
val datacollector = datacollector
|
val datacollector = datacollector
|
||||||
var connect = false
|
var connect = false
|
||||||
|
|
||||||
fun createSSLContext(): SSLContext {
|
private fun createSSLContext(): SSLContext {
|
||||||
val keyStorePassword = "password".toCharArray() // Change as necessary
|
val keyStorePassword = "prime24".toCharArray() // Change as necessary
|
||||||
|
val clientCertPath = "/storage/sdcard0/Download/client.p12"
|
||||||
|
|
||||||
// Load client certificate and key
|
// Load client certificate and key
|
||||||
val keyStore = KeyStore.getInstance("PKCS12")
|
val keyStore = KeyStore.getInstance("PKCS12") // Ensure this matches your file type
|
||||||
FileInputStream("path/to/client-certificate.p12").use { keyStoreInputStream ->
|
FileInputStream(clientCertPath).use { keyStoreInputStream ->
|
||||||
keyStore.load(keyStoreInputStream, keyStorePassword)
|
keyStore.load(keyStoreInputStream, keyStorePassword)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,9 +47,13 @@ class NatsManager(datacollector: DashboardActivity) {
|
|||||||
keyManagerFactory.init(keyStore, keyStorePassword)
|
keyManagerFactory.init(keyStore, keyStorePassword)
|
||||||
|
|
||||||
// Load CA certificate
|
// Load CA certificate
|
||||||
|
val caCertPath = "/storage/sdcard0/Android/data/in.sminnovations.hpostesting.quality/files/extractedCertificates/clientCertificate/client-cert.pem"
|
||||||
val trustStore = KeyStore.getInstance(KeyStore.getDefaultType())
|
val trustStore = KeyStore.getInstance(KeyStore.getDefaultType())
|
||||||
FileInputStream("/storage/emulated/0/Android/data/in.sminnovations.hpostesting.quality/files/NATS/clientCertificate/client-cert.pem").use { trustStoreInputStream ->
|
trustStore.load(null, null) // Initialize the trust store
|
||||||
trustStore.load(trustStoreInputStream, null) // No password for CA certificate
|
|
||||||
|
// Load the CA certificate as a Certificate object
|
||||||
|
CertificateFactory.getInstance("X.509").generateCertificate(BufferedInputStream(FileInputStream(caCertPath))).also { caCertificate ->
|
||||||
|
trustStore.setCertificateEntry("ca-cert", caCertificate)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize trust manager factory
|
// Initialize trust manager factory
|
||||||
@@ -59,50 +67,6 @@ class NatsManager(datacollector: DashboardActivity) {
|
|||||||
return sslContext
|
return sslContext
|
||||||
}
|
}
|
||||||
|
|
||||||
internal object SSLUtils {
|
|
||||||
var KEYSTORE_PATH = "keystore.jks"
|
|
||||||
var TRUSTSTORE_PATH = "truststore.jks"
|
|
||||||
var STORE_PASSWORD = "password"
|
|
||||||
var KEY_PASSWORD = "password"
|
|
||||||
var ALGORITHM = "SunX509"
|
|
||||||
@Throws(java.lang.Exception::class)
|
|
||||||
fun loadKeystore(path: String?): KeyStore {
|
|
||||||
val store = KeyStore.getInstance("JKS")
|
|
||||||
val `in` = BufferedInputStream(FileInputStream(path))
|
|
||||||
try {
|
|
||||||
store.load(`in`, STORE_PASSWORD.toCharArray())
|
|
||||||
} finally {
|
|
||||||
if (`in` != null) {
|
|
||||||
`in`.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return store
|
|
||||||
}
|
|
||||||
|
|
||||||
@Throws(java.lang.Exception::class)
|
|
||||||
fun createTestKeyManagers(): Array<KeyManager> {
|
|
||||||
val store = loadKeystore(KEYSTORE_PATH)
|
|
||||||
val factory = KeyManagerFactory.getInstance(ALGORITHM)
|
|
||||||
factory.init(store, KEY_PASSWORD.toCharArray())
|
|
||||||
return factory.keyManagers
|
|
||||||
}
|
|
||||||
|
|
||||||
@Throws(java.lang.Exception::class)
|
|
||||||
fun createTestTrustManagers(): Array<TrustManager> {
|
|
||||||
val store = loadKeystore(TRUSTSTORE_PATH)
|
|
||||||
val factory = TrustManagerFactory.getInstance(ALGORITHM)
|
|
||||||
factory.init(store)
|
|
||||||
return factory.trustManagers
|
|
||||||
}
|
|
||||||
|
|
||||||
@Throws(java.lang.Exception::class)
|
|
||||||
fun createSSLContext(): SSLContext {
|
|
||||||
val ctx = SSLContext.getInstance(Options.DEFAULT_SSL_PROTOCOL)
|
|
||||||
ctx.init(createTestKeyManagers(), createTestTrustManagers(), SecureRandom())
|
|
||||||
return ctx
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun connect() {
|
fun connect() {
|
||||||
Log.d(TAG, "TRY TO CONNECT")
|
Log.d(TAG, "TRY TO CONNECT")
|
||||||
Thread {
|
Thread {
|
||||||
@@ -113,7 +77,8 @@ class NatsManager(datacollector: DashboardActivity) {
|
|||||||
val theNKey = NKey.fromSeed(seedBytes) // really should load from somewhere
|
val theNKey = NKey.fromSeed(seedBytes) // really should load from somewhere
|
||||||
|
|
||||||
val options = Options.Builder()
|
val options = Options.Builder()
|
||||||
.server("nats://192.168.10.117:4222")
|
.server("nats://nanodgx.in:4222")
|
||||||
|
.sslContext(createSSLContext())
|
||||||
.authHandler(object : AuthHandler {
|
.authHandler(object : AuthHandler {
|
||||||
override fun getID(): CharArray? {
|
override fun getID(): CharArray? {
|
||||||
return try {
|
return try {
|
||||||
@@ -151,6 +116,11 @@ class NatsManager(datacollector: DashboardActivity) {
|
|||||||
connect = true
|
connect = true
|
||||||
datacollector.setConnect(true)
|
datacollector.setConnect(true)
|
||||||
|
|
||||||
|
if (nc?.status == Connection.Status.CONNECTED) {
|
||||||
|
Log.e("NATSCONNECTION", "NATS is successfully connected.")
|
||||||
|
} else {
|
||||||
|
Log.e("NATSCONNECTION", "NATS is not connected. Current status: ${nc?.status}")
|
||||||
|
}
|
||||||
|
|
||||||
nc?.publish(
|
nc?.publish(
|
||||||
"server.hpos.HCV-000-3001.ping",
|
"server.hpos.HCV-000-3001.ping",
|
||||||
@@ -165,6 +135,7 @@ class NatsManager(datacollector: DashboardActivity) {
|
|||||||
println("PRITIMOI SARKAR $msg")
|
println("PRITIMOI SARKAR $msg")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
d?.subscribe("device.hpos.HCV-000-3001.update") { msg ->
|
d?.subscribe("device.hpos.HCV-000-3001.update") { msg ->
|
||||||
val response = String(msg.data, StandardCharsets.UTF_8)
|
val response = String(msg.data, StandardCharsets.UTF_8)
|
||||||
datacollector. setResponse(response)
|
datacollector. setResponse(response)
|
||||||
@@ -198,7 +169,7 @@ class NatsManager(datacollector: DashboardActivity) {
|
|||||||
} catch (exp: Exception) {
|
} catch (exp: Exception) {
|
||||||
println(exp.printStackTrace())
|
println(exp.printStackTrace())
|
||||||
connect = false
|
connect = false
|
||||||
datacollector.setConnect(true)
|
datacollector.setConnect(false)
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
|
|
||||||
|
|||||||
@@ -3,14 +3,19 @@ package com.example.hpostesting.presentation.assurance
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import com.example.hpostesting.presentation.NatsManager
|
||||||
|
import com.example.hpostesting.presentation.dashboard.IDataCollector
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import `in`.sminnovations.hpostesting.databinding.ActivityAssuranceControlsBinding
|
import `in`.sminnovations.hpostesting.databinding.ActivityAssuranceControlsBinding
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class AssuranceControlsActivity: AppCompatActivity() {
|
class AssuranceControlsActivity: AppCompatActivity(), IDataCollector {
|
||||||
lateinit var binding: ActivityAssuranceControlsBinding
|
lateinit var binding: ActivityAssuranceControlsBinding
|
||||||
lateinit var sharedPreference: SharedPreferences
|
lateinit var sharedPreference: SharedPreferences
|
||||||
|
lateinit var nats: NatsManager
|
||||||
|
var responses: String = ""
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -24,5 +29,21 @@ class AssuranceControlsActivity: AppCompatActivity() {
|
|||||||
.replace(binding.fgAssuranceControls.id, AssuranceControlsFragment())
|
.replace(binding.fgAssuranceControls.id, AssuranceControlsFragment())
|
||||||
.commit()
|
.commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nats = NatsManager(this)
|
||||||
|
nats.connect()
|
||||||
|
nats.pub("server.hpos.HCV-000-3001.ping", "THIS IS A TEST MSG")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setConnect(connect: Boolean) {
|
||||||
|
if(connect){
|
||||||
|
Log.i("NATS Connection", connect.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setResponse(response: String) {
|
||||||
|
|
||||||
|
responses = responses+response+"\n"
|
||||||
|
println(responses)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,9 +59,9 @@ class DashboardActivity : AppCompatActivity(), IDataCollector {
|
|||||||
binding = ActivityDashboardBinding.inflate(layoutInflater)
|
binding = ActivityDashboardBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setSupportActionBar(binding.appBarDashboard.toolbar)
|
setSupportActionBar(binding.appBarDashboard.toolbar)
|
||||||
nats = NatsManager(this)
|
// nats = NatsManager(this)
|
||||||
nats.connect()
|
// nats.connect()
|
||||||
nats.pub("server.hpos.HCV-000-3001.ping", "THIS IS A TEST MSG")
|
// nats.pub("server.hpos.HCV-000-3001.ping", "THIS IS A TEST MSG")
|
||||||
|
|
||||||
hemocubeViewModel.deviceUpdate.observe(this) { result ->
|
hemocubeViewModel.deviceUpdate.observe(this) { result ->
|
||||||
when (result) {
|
when (result) {
|
||||||
|
|||||||
Reference in New Issue
Block a user