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