728x90
프로젝트 진행 기간 : 1일
개발 툴 : Visual Studio Code
프론트엔드 : HTML, CSS, Javascript
백엔드 : Node.js와 Express
실시간 통신 : webSocket
서버 환경 : Tomcat -> JSP 실행 / 서비스 호스팅
데이터 베이스 : MySQL
- 프론트엔드: Visual Studio Code를 사용하여 HTML, CSS, JavaScript로 구현
- 백엔드: Node.js와 Express를 사용하여 서버 구현
- 웹소켓: WebSocket을 사용하여 실시간 통신 구현
- 데이터베이스: MySQL을 사용하여 채팅 메시지 저장 및 관리
- 서버 환경: 톰캣을 사용하여 JSP 페이지 실행 및 서비스 호스팅
기본 창
- 입력 창 비어져있으면 버튼 비활성화
- 입력 창에 무언가 입력하면 버튼 활성화
메세지 전송 결과
2번째 메세지 삭제 결과
- 프로젝트 파일
카톡방 기능
- Nodejs, websocket (tomcat)로 mysql 데이터베이스와 연동하여
user 기능 추가
js 코드 첨부
let num = 0;
var myID ="";
url = "ws://192.168.22.51:55000";
socket = new WebSocket(url);
socket.onopen = function() {
console.log("open");
}
socket.onmessage = function(e) {
var msgData = e.data.split(":");
console.log("보낸사람 : ", msgData[0], ", 메세지 : ", msgData[1]);
sendText(msgData[0], msgData[1]);
fetch("http://localhost:8080/websocket/dataadd.jsp?userid=" + myID +
"&message=" + msgData[1]);
}
socket.onclose = function(e) {
console.log("closed");
}
function inputChatData(data) {
console.log(data);
for (var index=0; index < data.length; index++) {
var userid = data.data[index].userid; // 저장된 메시지의 보낸 사람 ID
var message = data.data[index].message; // 저장된 메시지 내용
console.log(userid, message);
sendText(userid, message); // 저장된 메시지 출력
}
console.log("이전 대화 불러오기 완료");
}
$(function() {
fetch("http://localhost:8080/websocket/dataread.jsp")
.then(response => response.json())
.then(json => inputChatData(json))
// userid 입력
$("#idButton").on("click", function() {
myID = $("#name").val();
});
// 클릭이나 엔터 이벤트
textBox = $("#inputText");
$("#enterButton").on('click', function() {
// sendText(myID, textBox.val());
socket.send(myID + ":" + $("#inputText").val());
$("#inputText").val('');
});
$("#inputText").on("keypress", function(key) {
if (key.which == 13) {
socket.send(myID + ":" + $("#inputText").val());
// sendText(myID, textBox.val());
$("#inputText").val('');
}
});
// 버튼 색상 활성화
$("#inputText").on("input", function() {
$("#enterButton").attr("class","turnOn");
});
});
function sendText(currentID, message) {
if (!message == "") {
$("#enterButton").attr("class", "button"); // 버튼 꺼짐
var myMsg = currentID + ": " + message;
var messageClass = currentID === myID ? "text1" : "text2"; // 보낸 메시지와 받은 메시지를 구분
$("#content").append("<div class='" + messageClass + "' id='text_" + num + "'>"
+ "<span>" + myMsg + "</span>"
+ "<img src='x.png' class='delete' onclick='delText(" + num + ")'>"
+ "</div>");
num++;
} else {
// console.log("입력 값 없음");
}
}
function delText(idx) {
$("#text_" + idx).remove();
}
728x90
'프론트엔드(Front-End)' 카테고리의 다른 글
[프론트엔드] 간단한 환율 계산기 제작 (0) | 2024.01.10 |
---|---|
[프론트엔드] 미니 마리오 게임 제작 (0) | 2024.01.10 |