@@ -41,10 +41,13 @@ class HotReloadHttpHandler : HttpRequestHandler() {
4141 }
4242
4343 private fun handleGet (request : FullHttpRequest , context : ChannelHandlerContext ): Boolean {
44- val json = """ {"status":"ok","pid":${ProcessHandle .current().pid()} }"""
45- val content = Unpooled .copiedBuffer(json, Charsets .UTF_8 )
44+ val readme = javaClass.getResourceAsStream(" /hot-reload/README.md" )
45+ ?.bufferedReader()?.readText()
46+ ? : " README.md not found in resources"
47+
48+ val content = Unpooled .copiedBuffer(readme, Charsets .UTF_8 )
4649 val response = DefaultFullHttpResponse (HttpVersion .HTTP_1_1 , HttpResponseStatus .OK , content)
47- response.headers().set(HttpHeaderNames .CONTENT_TYPE , " application/json " )
50+ response.headers().set(HttpHeaderNames .CONTENT_TYPE , " text/markdown; charset=utf-8 " )
4851 response.addCommonHeaders()
4952 response.send(context.channel(), request)
5053 return true
@@ -76,7 +79,15 @@ class HotReloadHttpHandler : HttpRequestHandler() {
7679 channel.write(response)
7780
7881 fun writeLine (line : String ) {
79- channel.writeAndFlush(DefaultHttpContent (Unpooled .copiedBuffer(" $line \n " , Charsets .UTF_8 )))
82+ log.info(" Hot reload progress: $line " )
83+ // Execute write on the channel's event loop for thread safety
84+ if (channel.eventLoop().inEventLoop()) {
85+ channel.writeAndFlush(DefaultHttpContent (Unpooled .copiedBuffer(" $line \n " , Charsets .UTF_8 )))
86+ } else {
87+ channel.eventLoop().execute {
88+ channel.writeAndFlush(DefaultHttpContent (Unpooled .copiedBuffer(" $line \n " , Charsets .UTF_8 )))
89+ }
90+ }
8091 }
8192
8293 val progressReporter = object : PluginHotReloadService .ProgressReporter {
0 commit comments