spring boot로 서버를 만들어보자.
db는 mySQL
websocket을 사용한다
동작하는 순서
1. Keyword로 방에 접속한다.
2. 방에 접속이 되면서 해당 세션에 연결이 된다. (대화방 하나당 세션 하나)
2. 접속된 방에 저장된 대화를 전부 갖고 온다.(JSON으로 갖고 와서 client에서 출력한다.)
3. 이제부터 말하는 대화는 서버에 저장이 되고, 세션에 연결된 사람들에게 전부 broad cast된다.
(본인이 전송한 글은 client에서 전달을 하고, 서버에서 fail이 전송되면 재전송 버튼이 생성된다.
서버에선 author와 session의 id가 동일할 경우 전송에서 제외시킨다.)
DB에 대해서
DB에 keyword키도 추가해서 만들면 되겠다.
keyword, author, content, date
Reference
Spring 예제
1. https://spring.io/guides/gs/messaging-stomp-websocket/
2. 세션을 기록하고 세션으로 메세지를 echo하는게 인상적이다.
Spring boot 예제
1. 도움은 되지만 클래스 하나가 비어있다.
session 관리에 대해서
1. http://jinhokwon.tistory.com/22
Redis vs HttpSession
2. http://arahansa.github.io/docs_spring/session.html
뭔가 정리가 많이 되어 있다.
stomp에 대해서
1. 동적으로 destination이 바뀔 경우
https://stackoverflow.com/questions/27047310/path-variables-in-spring-websockets-sendto-mapping
2. js의 send에서 여러 parameter를 전송할 경우
3. registry.addEndpoint를 여러개 추가할 경우
1) 하나 추가를 한 뒤에 더 추가할 수 있는지
-> 실험 결과 여러개를 추가해도 상관없다. 하지만 client가 calling을 하는 방법은 아이디어가 없다.
4. 특정 사람에게만 전달하기
https://stackoverflow.com/questions/27047310/path-variables-in-spring-websockets-sendto-mapping
5. stomp를 사용하지 않고 textsocket?(?)을 사용하는 예제
http://loveiskey.tistory.com/126
내가 구현하려고 했던 내용의 블로그를 찾았다.
https://www.sitepoint.com/implementing-spring-websocket-server-and-client/
세션을 연결하는 것
-------------
TextWebSocketHandler를 사용해서 구현하는 방법
1. session에 parameter넣어서 넘기기
hint : http://mobilenweb.tistory.com/174
->우회 방법 : 세션에 넣지 않고 최초에 입력되는 것에 의미를 부여한다. (http://nowonbun.tistory.com/286)
2. date format에 대해서
1) TIMESTAMP annotation은 java->mysql을 할 때 데이터 타입을 변한해준다는 의미이지 실제 데이터를 넣어 준다는 것은 아니다.
Client로 안드로이드로 구현하기
안드로이드로 채팅 구현하기
websocket을 구헌한 클래스
soft keyboard 이벤트 발생시 background가 뭉개지는 것을 막으려면 background를 thema에 넣어버린다.