nats code

This commit is contained in:
Mariya
2024-02-07 12:49:31 +05:30
parent 1a3bb67dce
commit 45fd4861f4
5 changed files with 52 additions and 60 deletions

Binary file not shown.

View File

@@ -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"
} }
], ],

View File

@@ -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()

View File

@@ -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)
} }
} }

View File

@@ -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) {