diff --git a/app/build.gradle b/app/build.gradle
index 83ede27e..95d99f3d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -111,4 +111,8 @@ dependencies {
implementation "com.google.dagger:hilt-android:2.44"
kapt "com.google.dagger:hilt-compiler:2.44"
+ //Socket
+// implementation 'com.github.nkzawa:socket.io-client:0.3.0'
+ implementation 'io.socket:socket.io-client:2.1.0'
+
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c743f6..f429dadb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">
+
diff --git a/app/src/main/java/com/farm/farmus_application/di/AppModule.kt b/app/src/main/java/com/farm/farmus_application/di/AppModule.kt
index 0978e82b..094b531c 100644
--- a/app/src/main/java/com/farm/farmus_application/di/AppModule.kt
+++ b/app/src/main/java/com/farm/farmus_application/di/AppModule.kt
@@ -21,7 +21,8 @@ import javax.inject.Singleton
@InstallIn(SingletonComponent::class)
object AppModule {
- private const val baseUrl = "http://118.67.135.247:80/"
+// private const val baseUrl = "http://118.67.135.247:80/"
+ const val baseUrl = "https://www.farmus.kro.kr/"
private val jwtToken = UserPrefsStorage.accessToken ?: ""
@Provides
diff --git a/app/src/main/java/com/farm/farmus_application/ui/farm/ReserveFarmListFragment.kt b/app/src/main/java/com/farm/farmus_application/ui/farm/ReserveFarmListFragment.kt
index fed8005c..d8179c64 100644
--- a/app/src/main/java/com/farm/farmus_application/ui/farm/ReserveFarmListFragment.kt
+++ b/app/src/main/java/com/farm/farmus_application/ui/farm/ReserveFarmListFragment.kt
@@ -1,6 +1,7 @@
package com.farm.farmus_application.ui.farm
import android.os.Bundle
+import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
@@ -87,6 +88,7 @@ class ReserveFarmListFragment : Fragment() {
recentAdapter.registerAdapterDataObserver(emptyDataObserve)
farmListViewModel.currentFarmList.observe(viewLifecycleOwner) {
+ Log.d("CurrentFarmList:",it.toString())
recentAdapter.submitList(it.result)
}
diff --git a/app/src/main/java/com/farm/farmus_application/ui/message/ClientChatFragment.kt b/app/src/main/java/com/farm/farmus_application/ui/message/ClientChatFragment.kt
index ce3d1513..ab9c47f4 100644
--- a/app/src/main/java/com/farm/farmus_application/ui/message/ClientChatFragment.kt
+++ b/app/src/main/java/com/farm/farmus_application/ui/message/ClientChatFragment.kt
@@ -1,6 +1,8 @@
package com.farm.farmus_application.ui.message
+import android.annotation.SuppressLint
import android.content.Context
+import android.nfc.Tag
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
@@ -11,12 +13,27 @@ import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.PopupMenu
import androidx.recyclerview.widget.LinearLayoutManager
+import com.farm.farmus_application.MyApplication
import com.farm.farmus_application.R
import com.farm.farmus_application.databinding.FragmentClientChatBinding
+import com.farm.farmus_application.di.AppModule
import com.farm.farmus_application.repository.UserPrefsStorage
import com.farm.farmus_application.ui.MainActivity
import com.farm.farmus_application.ui.message.adapter.ClientChatRVAdapter
import com.farm.farmus_application.utilities.JWTUtils
+import io.socket.client.IO
+import io.socket.client.Socket
+import io.socket.emitter.Emitter
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+import org.json.JSONException
+import org.json.JSONObject
+import java.net.URISyntaxException
+import java.text.SimpleDateFormat
+import java.util.Locale
class ClientChatFragment : Fragment() {
@@ -25,24 +42,28 @@ class ClientChatFragment : Fragment() {
private val binding get() = _binding!!
private val jwtToken = UserPrefsStorage.accessToken
private val name = JWTUtils.decoded(jwtToken.toString())?.tokenBody?.name ?: ""
-
+ private var mSocket: Socket? = null
+ private val onMessageReceived = Emitter.Listener { args ->
+ Log.d(TAG, "update 이벤트 수신처리")
+ }
// TODO : 임시 데이터. 사용 예시
private val chatMessages = ArrayList().apply {
- // senderId 와 receivedId가 "0", "0"일 때는 날짜 업데이트를 하게 구현되어있음(rvAdapter와 함께 봐야함)
- // 기능 구현시 그 부분을 고려해서 수정필요.
-// add(ChatMessage("0", "0", "2023년 01월 08일", "00:00"))
-
- // 일반 대화 임시 데이터
add(ChatMessage(name, "내가 보냄", "오후 2:16"))
add(ChatMessage("kong", "상대방이 보냄", "오후 3:10"))
}
private lateinit var clientChatRVAdapter: ClientChatRVAdapter
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ settingSocket()
+ }
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentClientChatBinding.inflate(inflater, container, false)
+ mSocket?.connect()
return binding.root
}
@@ -58,7 +79,28 @@ class ClientChatFragment : Fragment() {
_binding = null
}
+ private fun settingSocket() {
+ try {
+ mSocket = IO.socket("http://118.67.135.247:80")
+ Log.d(TAG,"${mSocket?.id()}")
+ } catch (e: URISyntaxException) {
+ Log.d(TAG,"${e.message}")
+ }
+// CoroutineScope(Dispatchers.IO).launch {
+// try {
+// mSocket = IO.socket("https://www.farmus.kro.kr")
+// mSocket.connect()
+// } catch (e: Exception) {
+// withContext(Dispatchers.Main) {
+// Log.d(TAG,"${e.message}")
+// }
+// }
+// }
+// mSocket.on("update", onMessageReceived)
+ }
+
private fun init() {
+ initSendButton()
initRecyclerView()
initBackButton()
initMoreButton()
@@ -66,6 +108,26 @@ class ClientChatFragment : Fragment() {
// TODO: 추가할 초기화가 있다면 초기화
}
+ private fun initSendButton() {
+
+ binding.commonChatLayout.buttonSendMsg.setOnClickListener {
+ // sendMessage()
+ // 클라이언트에서 메시지를 서버로 전송
+ val message = binding.commonChatLayout.edittextSendMsg.text.toString()
+ val name = name
+ val data = JSONObject().apply {
+// put("name", name)
+// put("message", message)
+ put("type","message")
+ put("message",message)
+ }
+ Log.d(TAG,"${mSocket?.connected()}")
+// mSocket.emit("send", data)
+ clientChatRVAdapter.addMessage(ChatMessage(name,message,"00:00"))
+ binding.commonChatLayout.edittextSendMsg.text.clear()
+ }
+ }
+
private fun initRecyclerView() {
// TODO : sender(현 사용자)의 id를 잘 전달해야함
clientChatRVAdapter = ClientChatRVAdapter(chatMessages)
@@ -88,13 +150,13 @@ class ClientChatFragment : Fragment() {
private fun initBackButton() {
binding.toolbarLayout.toolbarWithTitleAndMoreBackButton.setOnClickListener {
hideKeyboard()
-
+
// keyboard를 숨긴 후에 back되도록 (keyboard hide가 안된 것이 이전 화면에 영향을 줌)
it.postDelayed({
activity?.supportFragmentManager?.apply {
beginTransaction().remove(this@ClientChatFragment).commit()
popBackStack()
- }
+ }
}, 100) // 100초 뒤에 처리됨
}
}
@@ -120,4 +182,19 @@ class ClientChatFragment : Fragment() {
imm?.hideSoftInputFromWindow(view?.windowToken, 0)
}
+
+ private fun settingTime() {
+ val currentTime = System.currentTimeMillis()
+ val dateFormat = SimpleDateFormat("yyyy년 MM월 dd일", Locale.KOREA)
+ val timeFormat = SimpleDateFormat("aa hh:mm", Locale.KOREA)
+ println(dateFormat.format(currentTime))
+ println(timeFormat.format(currentTime))
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ // Socket 연결 해제
+ mSocket?.disconnect()
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/farm/farmus_application/ui/message/adapter/ClientChatRVAdapter.kt b/app/src/main/java/com/farm/farmus_application/ui/message/adapter/ClientChatRVAdapter.kt
index c1c64d4b..a8f660f4 100644
--- a/app/src/main/java/com/farm/farmus_application/ui/message/adapter/ClientChatRVAdapter.kt
+++ b/app/src/main/java/com/farm/farmus_application/ui/message/adapter/ClientChatRVAdapter.kt
@@ -13,7 +13,7 @@ import com.farm.farmus_application.utilities.JWTUtils
// TODO : chatMessages List를 어떻게 받는 가에 따라서 파라미터로 처리가 안될 수도 있음
// TODO : 구현시 나의 채팅 상대방 프로필 이미지를 끌어오는 방법이 필요함
-class ClientChatRVAdapter(private val chatMessages: List) :
+class ClientChatRVAdapter(private val chatMessages: ArrayList) :
RecyclerView.Adapter() {
private val jwtToken = UserPrefsStorage.accessToken
@@ -84,6 +84,11 @@ class ClientChatRVAdapter(private val chatMessages: List) :
}
}
+ fun addMessage(item: ChatMessage) {
+ chatMessages.add(item)
+ notifyDataSetChanged()
+ }
+
class SentMessageViewHolder(private val binding: ItemContainerSentMessageBinding) :
RecyclerView.ViewHolder(binding.root) {
fun setData(chatMessage: ChatMessage) {
diff --git a/app/src/main/res/layout/fragment_farm_tab1.xml b/app/src/main/res/layout/fragment_farm_tab1.xml
index 40a51958..68294985 100644
--- a/app/src/main/res/layout/fragment_farm_tab1.xml
+++ b/app/src/main/res/layout/fragment_farm_tab1.xml
@@ -23,21 +23,32 @@
android:textColor="@color/text_second"
app:layout_constraintTop_toTopOf="parent" />
-
-
-
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/text_recent">
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/current_list_container" />