//package kr.lunaticbum.back.lun.configs // //import io.netty.channel.ChannelOption //import io.netty.handler.timeout.ReadTimeoutHandler //import io.netty.handler.timeout.WriteTimeoutHandler //import jakarta.servlet.ServletContext //import jakarta.servlet.ServletException //import kr.lunaticbum.back.lun.utils.LogService //import lombok.RequiredArgsConstructor //import org.springframework.beans.factory.annotation.Autowired //import org.springframework.beans.factory.annotation.Qualifier //import org.springframework.context.annotation.Bean //import org.springframework.http.client.reactive.ReactorClientHttpConnector //import org.springframework.web.WebApplicationInitializer //import org.springframework.web.context.ContextLoaderListener //import org.springframework.web.context.support.AnnotationConfigWebApplicationContext //import org.springframework.web.reactive.function.client.ClientRequest //import org.springframework.web.reactive.function.client.ClientResponse //import org.springframework.web.reactive.function.client.ExchangeFilterFunction //import org.springframework.web.reactive.function.client.WebClient //import org.springframework.web.servlet.DispatcherServlet //import org.springframework.web.servlet.HandlerInterceptor //import org.springframework.web.servlet.config.annotation.InterceptorRegistry //import org.springframework.web.util.DefaultUriBuilderFactory //import reactor.core.publisher.Mono //import reactor.netty.Connection //import reactor.netty.http.client.HttpClient //import java.time.Duration //import java.util.concurrent.TimeUnit //import java.util.function.Consumer // // //@RequiredArgsConstructor //class WebConfig : WebApplicationInitializer { // // lateinit var logService : LogService // // var factory: DefaultUriBuilderFactory = DefaultUriBuilderFactory() // // var httpClient: HttpClient = HttpClient.create() // .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000) // 10초 // // // @Throws(ServletException::class) // override fun onStartup(servletContext: ServletContext) { // // Spring MVC 프로젝트 설정을 위해 작성하는 클래스의 객체를 생성한다. // val servletAppContext = AnnotationConfigWebApplicationContext() //// servletAppContext.register(ServletAppContext::class.java) // // // 요청 발생 시 요청을 처리하는 서블릿을 DispatcherServlet으로 설정해준다. //// val dispatcherServlet = DispatcherServlet(servletAppContext) //// val servlet = servletContext.addServlet("dispatcher", dispatcherServlet) //// //// // 부가 설정 //// servlet.setLoadOnStartup(1) //// servlet.addMapping("/") // // // Bean을 정의하는 클래스를 지정한다. // val rootAppContext = AnnotationConfigWebApplicationContext() // rootAppContext.register(RootAppContext::class.java) // // val listener = ContextLoaderListener(rootAppContext) // servletContext.addListener(listener) // } // // // // // @Bean // fun webClient(): WebClient { // /** // * 통신시 timeout 세팅 // * - connect, read, write 를 모두 5000ms // */ // // val httpClient = HttpClient.create() // .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) // .responseTimeout(Duration.ofMillis(5000)) // .doOnConnected { conn: Connection -> // conn.addHandlerLast(ReadTimeoutHandler(5000, TimeUnit.MILLISECONDS)) // .addHandlerLast(WriteTimeoutHandler(5000, TimeUnit.MILLISECONDS)) // } // // val webClient = WebClient.builder() // .baseUrl("https://api.telegram.org/bot7934509464:AAE_xUbICxMdywLGnxo7BkeIqA1nVza4P9w") // .clientConnector(ReactorClientHttpConnector(httpClient)) //생성한 HttpClient 연결 // //Request Header 로깅 필터 // .filter( // ExchangeFilterFunction.ofRequestProcessor { clientRequest: ClientRequest -> // logService.log(">>>>>>>>> REQUEST <<<<<<<<<<") // logService.log("Request: ${clientRequest.method()} ${clientRequest.url()}") // clientRequest.headers() // .forEach { (name: String?, values: MutableList?) -> // values.forEach( // Consumer { value: String? -> // logService.log( // "${name} : ${value}" // ) // }) // } // Mono.just(clientRequest) // } // ) //Response Header 로깅 필터 // .filter( // ExchangeFilterFunction.ofResponseProcessor { clientResponse: ClientResponse -> // logService.log(">>>>>>>>>> RESPONSE <<<<<<<<<<") // clientResponse.headers().asHttpHeaders() // .forEach { (name: String?, values: MutableList?) -> // values.forEach( // Consumer { value: String? -> // logService.log( // "${name} ${value}" // ) // }) // } // Mono.just(clientResponse) // } // ) // .defaultHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8") //기본 헤더설정 // .build() // // return webClient // } //}