서버쪽이 이미 구성되어 있다는 가정으로 정리한 코드이다.
일단 안드로이드 스튜디오에서 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/
참고하면 된다.