[Android] Cocket으로 간단하게 socket.io 통신하기
Cocket은 무엇일까?
cocket은 안드로이드에서 coroutine을 사용하여 retrofit과 유사한 방식으로
socket.io 통신을 할 수 있도록 만들어진 라이브러리 입니다.제가 만들었어요 ㅎㅎ
Cocket 시작하기
Cocket으로 간단한 채팅 앱을 구현해보자!
구현할 앱의 기능은 다음과 같습니다.
- 전체 채팅 전송
- 채팅방 입장
- 방 채팅 전송
방에 들어가지 않아도 모든 사람이 볼 수 있는 전체 채팅 기능과
채팅방에 입장하고 그 방에 채팅을 전송하는 기능을 갖고 있습니다.
1. gradle에 의존성 추가
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.shw0471:cocket:$version'
}
우선 gradle에 다음과 같이 의존성을 추가해줍니다.
2. 서비스 인터페이스 정의하기
interface ChatService {
@Connect
suspend fun connectChatService()
@Disconnect
suspend fun disconnectChatService()
@Emit("send.broadcast")
suspend fun sendBroadCastMessage(broadcastMessage: BroadcastMessage)
@Emit("join")
suspend fun joinChatRoom(roomInfo: RoomInfo)
@Emit("send.room")
suspend fun sendRoomMessage(roomMessage: RoomMessage)
@On("message")
fun receiveBroadcast(): Flow<BroadcastMessage>
@On("roomMessage")
fun receiveRoomMessage(): Flow<RoomMessage>
@Off()
fun off()
}
위와 같이 서버와 통신할 내용을 서비스 인터페이스로 정의해줍니다.
@Emit과 @On, @Once 어노테이션 안에는
보내거나 받을 이벤트 명을 적어주면 됩니다.이벤트를 받을 때는 suspend 키워드를 붙이지 말고
반환형은 coroutine의 Flow<>로 하셔야합니다.
data class BroadcastMessage(
@SerializedName("content") val content: String
)
data class RoomInfo(
@SerializedName("roomId") val roomId: String
)
data class RoomMessage(
@SerializedName("content") val content: String,
@SerializedName("roomId") val roomId: String
)
데이터 클래스들은 다음과 같습니다.
Cocket은 내부적으로 Gson을 이용해서 데이터 클래스를 Json으로 변환합니다
3. Cocket 클라이언트 생성
val cocket = CocketClient.Builder()
.baseUrl("http://example.com")
.build()
val chatService = cocket.create(ChatService::class.java)
위와 같이 Cocket 클라이언트와 ChatService의 인스턴스를 생성하고
// 소켓 연결
chatService.connectChatService()
// 소켓 연결 해제
chatService.disconnectChatService()
//채팅 방 접속
chatService.joinChatRoom(RoomInfo("abcd"))
// 전체 & 방 메시지 전송
chatService.sendBroadCastMessage(BroadcastMessage("Hello"))
chatService.sendRoomMessage(RoomMessage("Hi", "abcd"))
// 전체 & 방 메시지 받기
charService.receiveBroadcast().collect {
// 들어오는 메시지 처리
}
chatService.receiveRoomMessage().collect {
// 들어오는 메시지 처리
}
// 등록된 Listener 해제
chatService.off()
이렇게 ChatService의 메서드들을 호출해서
간단하게 Socket.io 통신을 할 수 있습니다.
4. UI 연결하고 작동 확인하기
위처럼 잘 작동하는 것을 확인할 수 있습니다.
전체 코드는 아래 링크에서 example 디렉토리에서 찾아보실 수 있습니다.
https://github.com/shw0471/Cocket
스타도 한번씩 눌러주세요
서버 만들어준 내 친구 홍정현 고마워!
마무리
궁금하거나 부족한 부분은 댓글 또는 Issue, PR 날려주세요.
긴 글 읽어주셔서 감사합니다!
Author And Source
이 문제에 관하여([Android] Cocket으로 간단하게 socket.io 통신하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shw0471/cocket저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)