Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- azure
- javascipt
- 연동
- 콘솔한글깨짐
- Login
- JavaScript
- vuex
- Express.js
- v-on
- javscript
- 음양더하기
- v-if
- axios
- Vue.js
- getters
- react
- programmers
- includes
- Reduce
- IntelliJ
- sns로그인
- mixins
- KAKAO
- 템플릿문법
- Emit
- node.js
- v-for
- state
- kibana
- mutations
Archives
- Today
- Total
공부용
chat 본문
//chatserver.java
@ServerEndpoint("/chatserver")
public class Ex03Server {
//현재 서버에 접속한 클라이언트의 WebSocket Session 목록
private static ArrayList<Session> list = new ArrayList<Session>();
@OnOpen
public void handleOpen(Session userSession) {
//클라이언트 연결 요청 + 접속
System.out.println("클라이언트 접속 성공");
//if (list.size() < 2) {
list.add(userSession); //접속자 관리
//} else {
//userSession.getBasicRemote().sendText("유저가 꽉찼습니다.");
//}
//System.out.println(list); //덤프
for (Session session : list) {
//목록내에서 현재 접속한 사람이 아닌 사람 -> 나 빼고 나머지
if (session != userSession) {
try {
//해당 세션에 연결된 클라이언트에게 메시지를 전달한다.
session.getBasicRemote().sendText("다른 유저가 접속했습니다.");
} catch (Exception e) {
System.out.println(e);
}
}
}
}
@OnClose
public void handleClose(Session userSession) {
System.out.println("클라이언트 접속 해제");
//접속을 끊은 유저는 세션 리스트에서 제거
list.remove(userSession);
}
@OnError
public void handleError(Throwable t) {
t.printStackTrace();
}
@OnMessage
public String handleMessage(String message, Session userSession) {
//클라이언트 -> 서버 -> 다른 클라이언트
//강아지#안녕하세요.
int index = message.indexOf("#");
String user = message.substring(0, index);
String txt = message.substring(index + 1);
for (Session session : list) {
if (session != userSession) {
try {
session.getBasicRemote().sendText(message);
} catch (Exception e) {
System.out.println(e);
}
}
}
return null;
}
}
//chat javascript
<script>
//서버 주소
const url = "ws://localhost:8090/codestudy/server";
let ws;
$("#btnConnect").click(function() {
//유저명 확인
if ($("#user").val().trim().length != 0) {
//서버와 소켓 연결하기
ws = new WebSocket(url);
ws.onopen = function(evt) {
//연결 직후 해야 할일
print($("#user").val(), "연결되었습니다.");
$("#user").attr("disabled", true);
$("#btnConnect").attr("disabled", true);
$("#btnDisconnect").attr("disabled", false);
$("#message").attr("disabled", false);
$("#message").focus();
};
ws.onclose = function(evt) {
print($("#user").val(), "종료되었습니다.");
};
ws.onerror = function(evt) {
console.log(evt);
};
ws.onmessage = function(evt) {
//홍길동#안녕하세요.
var index = evt.data.indexOf("#");
var user = evt.data.substring(0, index);
var txt = evt.data.substring(index + 1);
print(user, txt);
$("#output").scrollTop($("#output").prop("scrollHeight"));
};
} else {
alert("유저명을 입력하세요.");
$("#user").focus();
}
});
$("#btnDisconnect").click(function() {
ws.close();
});
$("#message").keyup(function() {
//서버에 메시지 보내기
//강아지#안녕하세요.
if (event.keyCode == 13) {
ws.send($("#user").val() + "#" + $("#message").val());
print($("#user").val(), $("#message").val());
$("#message").val("");
$("#message").focus();
//스크롤바를 가장 밑으로 내려라
$("#output").scrollTop($("#output").prop("scrollHeight"));
}
});
$("#user").keydown(function() {
if (event.keyCode == 13) {
$("#btnConnect").click();
}
});
function print(user, msg) {
let temp = "";
temp += "<div>";
temp += "[" + user + "] ";
temp += msg;
temp += "<span style='font-size:11px; color: #777;'>";
temp += (new Date()).toLocaleTimeString();
temp += "</span>";
temp += "</div>";
$("#output").append(temp);
}
</script>
'2020.10 ~ 2021.03 취업성공패키지 > 홈페이지(JSP)' 카테고리의 다른 글
주소 분류 (0) | 2021.04.13 |
---|---|
ajax (0) | 2021.03.03 |
게시판 페이징 (0) | 2021.03.03 |
.jsp 변수 .java에서 조작하기 (0) | 2021.03.02 |
Java로 jsp파일 열기 (0) | 2021.03.02 |