Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.ad.retrofittest.Chat
- import android.os.Bundle
- import android.support.v7.app.AppCompatActivity
- import android.support.v7.widget.LinearLayoutManager
- import android.support.v7.widget.RecyclerView
- import android.text.TextUtils
- import android.util.Log
- import android.view.View
- import android.widget.EditText
- import android.widget.ProgressBar
- import com.example.ad.retrofittest.Account.Login
- import com.example.ad.retrofittest.Common_Clases.ErrorHandler.CallbackWrapper
- import com.example.ad.retrofittest.Maps.MainMap
- import com.example.ad.retrofittest.Model.Chat.ChatModel
- import com.example.ad.retrofittest.Model.UserNewModel.User
- import com.example.ad.retrofittest.Profile.Profile
- import com.example.ad.retrofittest.R
- import com.example.ad.retrofittest.Retrofit.ApiUtils
- import com.example.ad.retrofittest.Retrofit.Services.NewServices
- import com.github.nkzawa.emitter.Emitter
- import com.github.nkzawa.socketio.client.IO
- import com.github.nkzawa.socketio.client.Socket
- import io.reactivex.android.schedulers.AndroidSchedulers
- import io.reactivex.schedulers.Schedulers
- import org.json.JSONException
- import org.json.JSONObject
- import java.net.URISyntaxException
- import java.util.ArrayList
- class Chat : AppCompatActivity() {
- private var recyclerView: RecyclerView? = null
- private var layoutManager: LinearLayoutManager? = null
- private var adapter: RecyclerAdapterChat? = null
- private var chatApiService: NewServices? = null
- private var inputMessage: EditText? = null
- private var userId: Int = 0
- private var mSocket: Socket? = null
- private var isLoading = true
- private var pastVisibleItems = 0
- private var visibleItemCount = 0
- private var totalItemCount = 0
- private var previousTotal = 0
- private var viewTreshold = 0
- private var counter = 2
- private var progressBar: ProgressBar? = null
- private var chatId = 0
- private val onNewMessage = Emitter.Listener { args ->
- this@Chat.runOnUiThread(Runnable {
- var data: ChatModel? = null
- try {
- data = args[0] as ChatModel
- } catch (e: JSONException) {
- Log.i("asdfgtrwe", e.toString())
- return@Runnable
- }
- // add the message to view
- // addMessage(username, message);
- val list: MutableList<ChatModel> = ArrayList()
- list.add(data)
- adapter!!.addItems(list)
- })
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_chat)
- inputMessage = findViewById(R.id.searchChatId)
- recyclerView = findViewById(R.id.messageRec)
- layoutManager = LinearLayoutManager(this)
- recyclerView!!.layoutManager = layoutManager
- recyclerView!!.setHasFixedSize(true)
- recyclerView!!.setItemViewCacheSize(20)
- recyclerView!!.isDrawingCacheEnabled = true
- chatApiService = ApiUtils.getGeneralService(applicationContext)
- userId = intent.getIntExtra("IdReciver", 0)
- recyclerView!!.addOnScrollListener(object : RecyclerView.OnScrollListener() {
- override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
- super.onScrolled(recyclerView, dx, dy)
- visibleItemCount = layoutManager!!.childCount
- totalItemCount = layoutManager!!.itemCount
- pastVisibleItems = layoutManager!!.findFirstCompletelyVisibleItemPosition()
- if(dy>0){ // did user scrolled?
- if(isLoading){
- if(totalItemCount>previousTotal) { //it has loaded
- isLoading = false
- previousTotal = totalItemCount
- }
- }
- if(!isLoading && (totalItemCount-visibleItemCount)<=(pastVisibleItems+viewTreshold)){
- pagination(chatId)
- isLoading = true
- }
- }
- }
- })
- //connect you socket client to the servertry {
- getProfile(userId)
- }
- fun getProfile(user_id: Int) {
- val url = "https://api.chillmeets.pl/v1/user/$user_id"
- Login.compositeDisposable.add(chatApiService!!.IgetProfile(url)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribeWith(object : CallbackWrapper<User>(baseContext) {
- override fun onNext(response: User) {
- chatId = response.chatRoomId
- Log.i("liczbaid", "post submitted to API.$chatId")
- Log.i("userRoomId", chatId.toString())
- GetFirstMessages(chatId)
- }}))
- }
- fun SendBt(v: View) {
- val messages = inputMessage!!.text.toString().trim { it <= ' ' }
- if (!TextUtils.isEmpty(messages)) {
- sendCallSocket(messages)
- } else {
- Log.e("blad", "cos jest puste")
- }
- inputMessage!!.setText("")
- }
- fun turnOnSocket(roomId: Int){
- try {
- mSocket = IO.socket("https://chat.chillmeets.pl?token=${Login.tokenGlobal}")
- Log.i("asdqw33334edd1", mSocket.toString())
- } catch (e: URISyntaxException) {
- Log.i("asdqw33334edd", e.toString())
- }
- Log.i("userRoomId", roomId.toString())
- mSocket!!.connect()
- mSocket!!.emit("join", roomId)
- mSocket!!.on("consume_message", onNewMessage)
- }
- fun sendCallSocket(content: String) {
- val rootObject= JSONObject()
- rootObject.put("room", chatId)
- rootObject.put("message",content)
- Log.i("asdqw33334edd3", mSocket.toString())
- mSocket!!.emit("emit_message", rootObject)
- }
- private fun GetFirstMessages(roomId: Int) {
- Login.compositeDisposable.add(chatApiService!!.IGetAllMessages("https://chat2.chillmeets.pl/v1/chat/rooms/$roomId/messages?page=1")
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribeWith(object : CallbackWrapper<MutableList<ChatModel>>(baseContext) {
- override fun onNext(response: MutableList<ChatModel>) {
- adapter = RecyclerAdapterChat(response, this@Chat)
- recyclerView!!.adapter = adapter
- Log.i("userRoomId", roomId.toString())
- turnOnSocket(roomId)
- Log.i("asdqw33334edd2", "it's ok")
- }
- }
- ))
- }
- fun pagination(roomId: Int){
- progressBar!!.visibility = View.VISIBLE
- val url = "https://chat2.chillmeets.pl/v1/chat/rooms/$roomId/messages?page=$counter"
- Login.compositeDisposable.add(chatApiService!!.IGetAllMessages(url)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribeWith(object : CallbackWrapper<MutableList<ChatModel>>(baseContext) {
- override fun onNext(response: MutableList<ChatModel>) {
- counter++
- adapter!!.addItems(response)
- progressBar!!.visibility = View.GONE
- }}))
- }
- public override fun onDestroy() {
- super.onDestroy()
- mSocket!!.disconnect()
- mSocket!!.off("new message", onNewMessage)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement