По сути, у меня есть NetworkManager, который я использую для прослушивания входящих сообщений веб-сокета и их анализа, но клиент веб-сокета получает их, но не передает их сетевому менеджеру для анализа. Я пытаюсь сделать уведомление.
package com.pphltd.streamcloud
import android.content.Context
import android.util.Log
import com.google.android.gms.maps.model.LatLng
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okhttp3.WebSocket
import okhttp3.WebSocketListener
import okio.ByteString
class WebSocketClient(private val url: String, context: Context, private val statusCallback: (String) -> Unit) {
private val appContext: Context = context.applicationContext // Use applicationContext here
private val client: OkHttpClient = OkHttpClient()
private var webSocket: WebSocket? = null
private var messageListener: ((String) -> Unit)? = null
var isConnected: Boolean = false
var loggedin: Boolean = false
var reLogin: Boolean = true
var isPremiumUser: Boolean = false
var isColorPackAccess: Boolean = false
var issmsVerified: Boolean? = null
var isemailVerified: Boolean? = null
var isGodMode: Boolean = false
var isedge2edge: Boolean? = null
init {
connect()
}
fun setMessageListener(listener: ((String) -> Unit)?) {
this.messageListener = listener
}
fun close() {
webSocket?.close(1000, "Closing connection")
webSocket = null
isConnected = false
loggedin = false
reLogin = false
}
fun connect() {
val request = Request.Builder()
.url(url)
.build()
webSocket = client.newWebSocket(request, MyWebSocketListener())
}
fun registerWSID() {
if (loggedin && !reLogin) {
Log.d("websocket", "registerWSID called")
CoroutineScope(Dispatchers.IO).launch {
val username = SharedPreferencesUtil.getUsername(appContext)
val authToken = EncryptedSharedPreferencesUtil.getAuthToken(appContext) ?: ""
val lastLocation = SharedPreferencesUtil.getLastLocation(appContext)
val latitude = lastLocation.first ?: 53.73 // Default to Hull coordinates if null
val longitude = lastLocation.second ?: -0.34
val userLocation = LatLng(latitude, longitude)
val messageJson = """
{
"type": "registerwsid",
"username": "$username",
"authToken": "$authToken",
"location": "$userLocation"
}
""".trimIndent()
webSocket?.send(messageJson)
}
}
}
fun send(message: String) {
webSocket?.send(message)
}
fun updatePremiumStatus(isPremium: Boolean) {
isPremiumUser = isPremium
}
fun setLoggedInStatus(status: Boolean) {
loggedin = status
if (loggedin) {
Log.d("websocket", "update loggedin status")
registerWSID()
}
}
private inner class MyWebSocketListener : WebSocketListener() {
override fun onOpen(webSocket: WebSocket, response: Response) {
statusCallback("Connected")
isConnected = true
registerWSID()
}
override fun onMessage(webSocket: WebSocket, text: String) {
messageListener?.let { listener ->
CoroutineScope(Dispatchers.IO).launch {
Log.d("sharedpreferences", "websocket message received $text")
listener.invoke(text)
}
}
}
override fun onMessage(webSocket: WebSocket, bytes: ByteString) {}
override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {
statusCallback("Not connected")
connect()
}
override fun onClosed(webSocket: WebSocket, code: Int, reason: String) {
statusCallback("Not connected")
}
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
statusCallback("Failed to connect, Retrying...")
reLogin = false
isConnected = false
connect()
}
}
object WebSocketSingleton {
private var isInitialized = false
lateinit var webSocketClient: WebSocketClient
fun initialize(url: String, context: Context, statusCallback: (String) -> Unit) {
if (!isInitialized) {
val appContext = context.applicationContext // Always use applicationContext here
webSocketClient = WebSocketClient(url, appContext, statusCallback)
isInitialized = true
}
}
}
Я пробовал использовать сопрограммы, а также удалял их на случай, если это была проблема, я пытался добавить весь сетевой менеджер в MainActivity, но все еще не анализировал тип уведомления
По сути, у меня есть NetworkManager, который я использую для прослушивания входящих сообщений веб-сокета и их анализа, но клиент веб-сокета получает их, но не передает их сетевому менеджеру для анализа. Я пытаюсь сделать уведомление. [code]package com.pphltd.streamcloud
val intent = Intent(context, HomeActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity(intent)
class WebSocketClient(private val url: String, context: Context, private val statusCallback: (String) -> Unit) { private val appContext: Context = context.applicationContext // Use applicationContext here private val client: OkHttpClient = OkHttpClient() private var webSocket: WebSocket? = null private var messageListener: ((String) -> Unit)? = null
var isConnected: Boolean = false var loggedin: Boolean = false var reLogin: Boolean = true
var isPremiumUser: Boolean = false var isColorPackAccess: Boolean = false var issmsVerified: Boolean? = null var isemailVerified: Boolean? = null var isGodMode: Boolean = false
var isedge2edge: Boolean? = null
init { connect() }
fun setMessageListener(listener: ((String) -> Unit)?) { this.messageListener = listener }
object WebSocketSingleton { private var isInitialized = false lateinit var webSocketClient: WebSocketClient
fun initialize(url: String, context: Context, statusCallback: (String) -> Unit) { if (!isInitialized) { val appContext = context.applicationContext // Always use applicationContext here webSocketClient = WebSocketClient(url, appContext, statusCallback) isInitialized = true } } } [/code] Я пробовал использовать сопрограммы, а также удалял их на случай, если это была проблема, я пытался добавить весь сетевой менеджер в MainActivity, но все еще не анализировал тип уведомления