const eventSource = new EventSource("http://localhost:8080/sender/pem/receiver/qkrmekem");
eventSource.onmessage = (event) => {
console.log(1,event);
const data = JSON.parse(event.data);
console.log(2,data);
}
function getSendMsgBox(msg){
return `<div class="sent_msg">
<p>${msg}</p>
<span class="time_date"> 11:18 | Today</span>
</div>`;
}
document.querySelector("#chat-send").addEventListener("click", () => {
// alert("클릭됨");
let chatBox = document.querySelector("#chat-box");
let msgInput = document.querySelector("#chat-outgoing-msg");
// alert(msgInput.value)
let chatOutgoingBox = document.createElement("div");
chatOutgoingBox.className="outgoing_msg";
chatOutgoingBox.innerHTML=getSendMsgBox(msgInput.value);
chatBox.append(chatOutgoingBox);
msgInput.value="";
})
document.querySelector("#chat-outgoing-msg").addEventListener("keydown", (e) => {
if(e.keyCode===13){
// alert("클릭됨");
let chatBox = document.querySelector("#chat-box");
let msgInput = document.querySelector("#chat-outgoing-msg");
// alert(msgInput.value)
let chatOutgoingBox = document.createElement("div");
chatOutgoingBox.className="outgoing_msg";
chatOutgoingBox.innerHTML=getSendMsgBox(msgInput.value);
chatBox.append(chatOutgoingBox);
msgInput.value="";
}
})
@CrossOrigin
@GetMapping(value = "/sender/{sender}/receiver/{receiver}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Chat> getMsg(@PathVariable String sender, @PathVariable String receiver) {
return chatRepository.mFindBySender(sender, receiver)
.subscribeOn(Schedulers.boundedElastic());
}
// Mono : 데이터를 한번만 리턴할 경우
@CrossOrigin
@PostMapping("/chat")
public Mono<Chat> setMsg(@RequestBody Chat chat) {
chat.setCreatedAt(LocalDateTime.now());
return chatRepository.save(chat);
}
const eventSource = new EventSource("http://localhost:8080/sender/pem/receiver/qkrmekem");
eventSource.onmessage = (event) => {
console.log(1,event);
const data = JSON.parse(event.data);
console.log(2,data);
initMessage(data);
}
function getSendMsgBox(msg, time){
return `<div class="sent_msg">
<p>${msg}</p>
<span class="time_date"> ${time} </span>
</div>`;
}
function initMessage(data){
let chatBox = document.querySelector("#chat-box");
let msgInput = document.querySelector("#chat-outgoing-msg");
// alert(msgInput.value)
let chatOutgoingBox = document.createElement("div");
chatOutgoingBox.className="outgoing_msg";
let md = data.createdAt.substring(5,10)
let tm = data.createdAt.substring(11,16)
convertTime = tm + " | " + md
chatOutgoingBox.innerHTML=getSendMsgBox(data.msg,convertTime);
chatBox.append(chatOutgoingBox);
msgInput.value="";
}
function addMessage(){
let chatBox = document.querySelector("#chat-box");
let msgInput = document.querySelector("#chat-outgoing-msg");
// alert(msgInput.value)
let chatOutgoingBox = document.createElement("div");
chatOutgoingBox.className="outgoing_msg";
let date = new Date();
let now = date.getHours()+":"+date.getMinutes()+"|"+date.getMonth()+"-"+date.getDate();
chatOutgoingBox.innerHTML=getSendMsgBox(msgInput.value, now);
chatBox.append(chatOutgoingBox);
msgInput.value="";
}
document.querySelector("#chat-send").addEventListener("click", () => {
// alert("클릭됨");
addMessage();
})
document.querySelector("#chat-outgoing-msg").addEventListener("keydown", (e) => {
if(e.keyCode===13){
addMessage();
}
})
// await로 이 메서드가 종료되지 않는다면 다른 메서드들도 완료가 되지 않기 떄문에 비동기 메서드로 바꿔줌
async function addMessage(){
let chatBox = document.querySelector("#chat-box");
let msgInput = document.querySelector("#chat-outgoing-msg");
// alert(msgInput.value)
let chatOutgoingBox = document.createElement("div");
chatOutgoingBox.className="outgoing_msg";
let date = new Date();
let now = date.getHours()+":"+date.getMinutes()+"|"+date.getMonth()+"-"+date.getDate();
let chat = {
sender : 'pem',
receiver : "qkrmekem",
msg: msgInput.value
};
// 통신에 시간이 걸리므로 await를 걸어 대기하게 해줌
let response = await fetch("http://localhost:8080/chat",{
method:"post",
body: JSON.stringify(chat), // js -> json으로 변환
headers:{
"Content-Type":"application/json;charset=utf-8"
}
});
//console.log(response);
// 여기도 마찬가지로 파싱하는데 시간이 걸리므로 await를 걸어줌
let parseResponse = await response.json();
console.log(parseResponse);
chatOutgoingBox.innerHTML=getSendMsgBox(msgInput.value, now);
chatBox.append(chatOutgoingBox);
msgInput.value="";
}