Harpreet Singh.8052
02/03/2024, 7:14 PMinitSession()
used to connect to the websocket and messageObservable()
to observe incomming frames
class ChatSocketServiceImp(private val httpClient: HttpClient) : ChatSocketService {
private var socket : WebSocketSession? = null
override suspend fun initSession(userId: String): Resource<Unit> {
val url = URLBuilder().apply {
takeFrom(ChatSocketService.BASE_URL)
path("chat-socket")
parameters.append("userId" , userId)
}.build()
return try {
socket = httpClient.webSocketSession {
url(url)
}
if (socket?.isActive == true)
{
Log.d("TAG", "socket Connected")
Resource.Success(Unit)
}else
{
Resource.Error("Couldn't estabish Connection connection")
}
}catch (e : Exception){
e.printStackTrace()
Resource.Error(e.localizedMessage ?: "Unknown Error")
}
}
override fun messageObservable(): Flow<MessageReceive> {
Log.d("socket", "inside messageObservable ")
return try {
Log.d("socket", "inside messageObservable inin ")
socket?.incoming
?.receiveAsFlow()
?.filter { it is Frame.Text }
?.map {
Log.d("socket", "inside messageObservable inin2 ${it.data} ")
val json = (it as? Frame.Text)?.readText() ?: ""
val message = Json.decodeFromString<MessageReceive>(json)
Log.d("socket", "message -> ${message.message}")
message
} ?: flow { }
}catch (e : Exception){
Log.d("socket", "Exception -> ${e.message}")
e.printStackTrace()
flow { }
}
}
}
Im accessing these mehods in my ViewModel
fun init(chatId : String)
{
viewModelScope.launch {
val result = chatSocketService.initSession(chatId)
when(result){
is Resource.Success ->{
chatSocketService.messageObservable().onEach { message ->
Log.d("TAG", "init: ${message.message} ${message.senderId} ${message.recipientId} ${message.timeStamp} ")
_messages.value = _messages.value.copy(
id = message.id,
message = message.message,
senderId = message.senderId,
recipientId = message.recipientId,
timeStamp = message.timeStamp
)
}
}
is Resource.Error ->{
Log.d("TAG", "init: ERROR IN CONNECTIONG TO SOCKET")
}
}
}
}
*Not receiving Frames , im my logges socket is not null it connectd to the server and messageObservable()
not triggering try catchHarpreet Singh.8052
02/03/2024, 7:22 PMAleksei Tirman [JB]
02/05/2024, 5:55 AMHarpreet Singh.8052
02/05/2024, 6:11 AM