android Socket IO Random Chat - Object Socket

2022. 11. 26. 23:42android/Random Chatting

< 안드로이드 Socket IO setting >

 

1. build.gradle socket.io dependency 추가

implementation('io.socket:socket.io-client:1.0.1') {
    exclude group: 'org.json', module: 'json'
}

2. Socket.Io Controller 추가

- object로 싱글톤 구현

- SnackBarManager로 오류 시에 앱을 다시 실행해달라 스낵바 메시지 출력

( SnackBarManager는 내장된 라이브러리가 아닙니다. 

저 자리에 log를 찍으셔서 확인 하시면 됩니다. ) 

 

- uriDevice는 안드로이드 스튜디오에서 Virtual Device와 Socket.IO 통신을 가능하게 합니다.

- 실물 기계에서의 Socket 통신을 위해서는 아래에 네트워크 설정의 주소가 필요합니다.

object SocketController {
    private const val uriDevice = "http://10.0.2.2:3001"
    private const val uriHome = "http://192.xxx.xxx.xxx:3001"

    val mSocket: Socket = IO.socket(uriHome)

    fun init() {
        CoroutineScope(Dispatchers.IO).launch {
            try {
                mSocket.connect()
            } catch (e: Exception) {
                SnackBarManager.showMessage("앱을 다시 실행 해주시길 바랍니다.")
            }
        }
    }
}

 

- uriDevice 의 10.0.2.2:3001은 그대로 사용하셔도 됩니다.

 

- uri Home 의 주소는 네트워크 및 인터넷  >  컴퓨터에 연결된 네트워크의 속성 > IPv4 주소

설정에 들어가셔서 네트워크 및 인터넷에 들어갑니다.

자신의 컴퓨터가 연결된 네트워크가 보이실 겁니다.

저기서 속성을 들어간 후에 아래로 내려서 노란색 부분을 확인하면 됩니다.

- object로 만든 이유는 싱글톤으로 socket을 여러 곳에서 사용해야 하기 때문에 
 socket을 이용한 다른 예제를 보면 간단하게 onCreate에서 바로 연결하고 emit ( 소캣에 데이터를 보내는 함수 ) 하거나 on 데이터를 받아옵니다. 이렇게 하면 다른 클래스에서 같은 socket을 사용하기 위해 인자로 넘겨주거나 따로 처리해야 하는 번거로운 일이 생깁니다. 

 

3. MainActivity에 추가

 

메인 액티비티의 onCreate 부분에 init()을 넣어주시면 됩니다.

그러면 알아서 소켓에 연결됩니다. 

 

 

또한 소켓의 연결이 끊어지는 경우를 대비해 onCreate에 아래처럼 스낵바 메시지가 나오게 합니다. 

SnackBarManager에 대한 구현은 하지 않았으니 log를 찍어서 확인해보시면 됩니다!

 

 

이렇게 하면 이제 소켓과의 연결이 마무리 됩니다.

이제 남은 건 소켓에 어떻게 보내고 받을지 다음 시간에 알아보겠습니다. 감사합니다.