package net.taehui.twilight.site import io.netty.bootstrap.ServerBootstrap import io.netty.channel.Channel import io.netty.channel.ChannelInitializer import io.netty.channel.EventLoopGroup import io.netty.channel.socket.ServerSocketChannel import io.netty.channel.socket.SocketChannel import io.netty.handler.codec.http.HttpObjectAggregator import io.netty.handler.codec.http.HttpServerCodec import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler import io.netty.handler.codec.http.websocketx.extensions.compression.WebSocketServerCompressionHandler import net.taehui.twilight.Logger class SiteBoot(eventLoopGroup: EventLoopGroup, eventChannel: Class<out ServerSocketChannel>) : Logger, AutoCloseable { private val mainBootstrap: ServerBootstrap = ServerBootstrap().group(eventLoopGroup).channel(eventChannel) .childHandler(object : ChannelInitializer<SocketChannel>() { public override fun initChannel(ch: SocketChannel) { ch.pipeline() .addLast(HttpServerCodec()) .addLast(HttpObjectAggregator(Int.MAX_VALUE)) .addLast(WebSocketServerCompressionHandler()) .addLast(WebSocketServerProtocolHandler("/qwilight/ws", null, true, Int.MAX_VALUE)) .addLast(SiteAvatar()) } }) private val mainChannel: Channel init { logInfo("Loading Site") mainChannel = mainBootstrap.bind(6704).channel().closeFuture() .addListener { logInfo("Closed Site") }.channel() } override fun close() { mainChannel.close() } }