Grundsätzlich habe ich NetworkManager, mit dem ich auf eingehende Websocket-Nachrichten höre und diese analysiere, aber der Websocketclient empfängt sie, leitet sie aber nicht zum Parsen an den Netzwerkmanager weiter. Das, was ich versuche, ist eine Benachrichtigung.
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
}
}
}
Ich habe versucht, Coroutinen zu verwenden und sie auch entfernt, nur für den Fall, dass das ein Problem war. Ich habe versucht, den gesamten Netzwerkmanager zu MainActivity hinzuzufügen, habe den Benachrichtigungsnachrichtentyp jedoch immer noch nicht analysiert
Grundsätzlich habe ich NetworkManager, mit dem ich auf eingehende Websocket-Nachrichten höre und diese analysiere, aber der Websocketclient empfängt sie, leitet sie aber nicht zum Parsen an den Netzwerkmanager weiter. Das, was ich versuche, ist eine Benachrichtigung. [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] Ich habe versucht, Coroutinen zu verwenden und sie auch entfernt, nur für den Fall, dass das ein Problem war. Ich habe versucht, den gesamten Netzwerkmanager zu MainActivity hinzuzufügen, habe den Benachrichtigungsnachrichtentyp jedoch immer noch nicht analysiert
Ich implementiere die Google OAuth-Anmeldung für meine Spring Boot-Anwendung und habe nach einer erfolgreichen Anmeldung ein Problem mit der Umleitung.
Homepage-URL: work/
Gewünschte...
Ich habe ein Problem mit der Integration einer ASP.NET CORE 5.0-Webanwendung in OKTA.
Mein Unternehmen benötigt die Integration aller Webanwendungen in OKTA. Diese App, über die ich geschrieben habe,...
Wie senden und empfangen Sie Nachrichten mit Pythons Asyncio und der WebSockets -Bibliothek?
Ich verwende Django -Kanäle als Socket -Server. Im Grunde versuche ich also, diesen Socket -Server zu...
Ich gehe durch Sellerie -Tutorial und versuche das Beispiel Hallo Welt zu verwenden:
from celery import Celery
from celery.utils.log import get_task_logger
Ich möchte LaRavel Pass verwenden, um Aktualisierungs- und Zugriffs-Token zu generieren
Ich habe diesem Artikel gefolgt: Token-16D0
Aber wenn ich Auffrischungs- und Zugriffs-Token
generiere, gibt es...