서버쪽이 이미 구성되어 있다는 가정으로 정리한 코드이다.
일단 안드로이드 스튜디오에서 socket.io 를 추가한다. 모듈로 추가하는 방법은 http://bongsunga.com/blog/3640 여기에 써 놓았다.
그럼 본격적으로 코드를 작성한다.
AndroidManifest.xml 안에 <manifest> 안에 아래 코드를 넣어준다.
<uses-permission android:name="android.permission.INTERNET" />
아래 코드들을 MainActivity.java 에 작성하는 코드이다.
상단에 임포트 코드를 넣어준다.
import com.github.nkzawa.emitter.Emitter; import com.github.nkzawa.socketio.client.IO; import com.github.nkzawa.socketio.client.Socket;
그런 후에 public class MainActivity extends AppCompatActivity {
이런식으로 감쌓은 부분에 아래 코드를 넣어준다.
private Socket mSocket;
{
try {
mSocket = IO.socket("http://서버ip:포트번호");
} catch (URISyntaxException e) {
}
}
그리고 onCreate(~~) { 안에 아래처럼 작성한다.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSocket.on("받을 이벤트명", onNewMessage);
mSocket.connect();
}
//받을 이벤트명은 서버쪽이랑 같은 이름 만들어서 넣으면 됨
이제 onCreate(~~) { 가 끝나는 } 이 부분 다음 줄 부터 메시지 주고 받아 처리하는 코드를 넣어준다.
private Emitter.Listener onNewMessage = new Emitter.Listener() {
@Override
public void call(final Object... args) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject data = (JSONObject) args[0];
String username;
String message;
try {
username = data.getString("username");
message = data.getString("message");
} catch (JSONException e) {
return;
}
// 메시지를 받으면 data에 담고,
// username와 message라는 키값으로 들어왔다는 가정으로 작성된 코드다.
// addMessage(username, message); 이런 식으로 코드를 실행시키면 addMessage 쪽으로 인자를 담아 보내니 화면에 노출하게 만들면 될 것이다.
}
});
}
};
이번에는 서버쪽으로 메시지 전달할 때는 전송 버튼같은 이벤트가 있는 곳에 아래 코드를 넣어주면 된다.
JSONObject data = new JSONObject();
try {
data.put("username", "홍길동");
data.put("message", "헬로 월드");
mSocket.emit('받을 이벤트명', data);
} catch(JSONException e) {
e.printStackTrace();
}
//받을 이벤트명은 위에서도 나온 서버쪽과 맞춰놓은 이벤트명이다.
안드로이드 'Native Socket.IO and Android' 코드는 https://socket.io/blog/native-socket-io-and-android/
Socket.io 안드로이드 라이브러리 사용법은 https://dev-juyoung.github.io/2017/09/05/android-socket-io/
참고하면 된다.