Skip to content
Snippets Groups Projects
Commit c9dcfeb9 authored by Hoai Viet Nguyen's avatar Hoai Viet Nguyen
Browse files

add echo and simple chat

parent 80c989f5
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,7 @@ dependencies { ...@@ -26,6 +26,7 @@ dependencies {
implementation 'org.jetbrains.kotlin:kotlin-reflect' implementation 'org.jetbrains.kotlin:kotlin-reflect'
testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.jetbrains.kotlin:kotlin-test-junit5' testImplementation 'org.jetbrains.kotlin:kotlin-test-junit5'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
} }
......
package de.thk.gm.websocketsdemo.configs
import de.thk.gm.websocketsdemo.handlers.EchoHandler
import de.thk.gm.websocketsdemo.handlers.SimpleChatHandler
import org.springframework.context.annotation.Configuration
import org.springframework.web.socket.config.annotation.EnableWebSocket
import org.springframework.web.socket.config.annotation.WebSocketConfigurer
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry
@Configuration
@EnableWebSocket
class WebSocketConfig () : WebSocketConfigurer {
override fun registerWebSocketHandlers(registry: WebSocketHandlerRegistry) {
registry.addHandler(EchoHandler(),"/echo")
registry.addHandler(SimpleChatHandler(),"/chat")
}
}
\ No newline at end of file
package de.thk.gm.websocketsdemo.controllers
import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.GetMapping
@Controller
class WelcomeController {
@GetMapping("/")
fun index(): String {
return "index"
}
@GetMapping("/simplechat")
fun simpleChat(): String {
return "simpleChat"
}
}
\ No newline at end of file
package de.thk.gm.websocketsdemo.handlers
import org.springframework.web.socket.TextMessage
import org.springframework.web.socket.WebSocketSession
import org.springframework.web.socket.handler.TextWebSocketHandler
class EchoHandler : TextWebSocketHandler() {
override fun handleTextMessage(session: WebSocketSession, message: TextMessage) {
session.sendMessage(message)
}
}
\ No newline at end of file
package de.thk.gm.websocketsdemo.handlers
import org.springframework.web.socket.*
import org.springframework.web.socket.handler.TextWebSocketHandler
class SimpleChatHandler(): TextWebSocketHandler() {
private var sessions : ArrayList<WebSocketSession> = ArrayList()
override fun afterConnectionEstablished(session: WebSocketSession) {
sessions.add(session)
}
override fun handleTextMessage(session: WebSocketSession, message: TextMessage) {
for (session in sessions) {
session.sendMessage(message)
}
}
override fun afterConnectionClosed(session: WebSocketSession, status: CloseStatus) {
for (chatSession in sessions) {
if (chatSession.id == session.id) {
sessions.remove(chatSession)
}
}
}
}
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Echo Demo</title>
</head>
<body>
<h1>Echo Demo</h1>
<input type="text" id="message">
<button type="button" onclick="sendMessage()">Send</button>
<div id="echo"></div>
<a href="/">Back</a>
<script>
var ws = new WebSocket("/echo")
ws.onopen = function (event) {
alert("WebSocket successfully established")
}
function sendMessage(){
var message = document.getElementById("message").value
ws.send(message)
}
ws.onmessage = function (message) {
echo.innerHTML += "<p>" + message.data + "</p>"
}
</script>
</body>
</html>
\ No newline at end of file
<#import "layout.ftlh" as base>
<#import "/spring.ftl" as spring />
<@base.layout>
<ul>
<li><a href="/echoclient.html">Echo Client</a></li>
<li><a href="/simplechat">Simple Chat</a></li>
<li><a href="/chatrooms">Chat rooms</a></li>
</ul>
</@base.layout>
<#macro layout>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>WebSocket Demos</title>
</head>
<body>
<header>
<h1>WebSocket Demos</h1>
</header>
<hr>
<main>
<#nested>
</main>
<hr>
<footer>
<a href="/#">Imprint</a>
<a href="/#">About Us</a>
<a href="/#">Privacy</a>
</footer>
</body>
</html>
</#macro>
\ No newline at end of file
<#import "layout.ftlh" as base>
<@base.layout>
<h1>Simple Chat</h1>
<div id="chat">
</div>
<input type="text" id="sender" placeholder="Max Mustermann"><br>
<input type="text" id="text" placeholder="Message...">
<button type="button" onclick="sendMessage()">Send</button>
<script>
var ws = new WebSocket("/chat")
var chat = document.getElementById("chat")
ws.onmessage = function (message) {
var chatMessage = JSON.parse(message.data)
chat.innerHTML += "<p><b>" +chatMessage.sender+ "</b>:" + chatMessage.text + "</p>"
}
function sendMessage(){
var text = document.getElementById("text").value
var sender = document.getElementById("sender").value
var chatMessage = {"sender": sender, "text":text}
ws.send(JSON.stringify(chatMessage))
}
</script>
</@base.layout>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment