Open GITSangWoo opened 2 days ago
app.js 에서 api를 통해 ip 값을 받고 stompclient에 message를 보낼때 같이 보낼 수 있게 코드를 추가 했습니다.
//header 만들기
function sendMessage() {
const message = $("#message").val();
const name = $("#name").val();
fetch('https://ipinfo.io/?token=발급받은토큰값넣기')
.then(response => response.json())
.then(data => {
const ipAddress = data.ip;
console.log('Your IP address is:', ipAddress);
// IP 주소를 받은 후에 메시지 전송 로직 실행
stompClient.send("/app/hello", {}, JSON.stringify({
'name': name,
'message': message,
'clientIp': ipAddress
}));
$("#message").val(''); // 입력 필드 초기화
})
.catch(error => {
console.error('Error fetching IP address:', error);
});
}
package com.websocket.socket.message;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class HelloMessage {
private String name;
private String message;
private String clientIp;
}
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message, @RequestHeader Map<String, String> header, String message2) throws Exception {
Thread.sleep(200); // simulated delay
// 현재 시간 포맷 지정
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedTime = now.format(formatter);
// 순번을 포함한 Kafka에 메시지를 전송할 메시지 포맷
String processedMessage = message.getClientIp() + " , " + "[" + formattedTime + "] " + message.getName() + " : " + HtmlUtils.htmlEscape(message.getMessage());
String proMessage = header.get("clientIp")+" , " + formattedTime + " , " + message.getName() + " , " + HtmlUtils.htmlEscape(message.getMessage());
});
stompClient.send()를 이용해 메세지를 보낼때 Json.stringfy를 사용할때는 stringfy안에 딕셔너리 방식으로 값을 추가하지 않으면 message 내용에 값이 포함 안됌, header로도 받을 수 있고, Hellomessage message으로도 값을 받을 수 있음
WebSocketconfig.java
Controller.java
위 같은 SImpMessageHeaderAccessor에서 ipAddress를 받아 와보려고 했지만 받아지지 않습니다.