| package com.genersoft.iot.vmp.vmanager.gb28181.sse; | 
|   | 
| import com.genersoft.iot.vmp.gb28181.event.alarm.AlarmEventListener; | 
| import io.swagger.v3.oas.annotations.tags.Tag; | 
| import org.springframework.web.bind.annotation.GetMapping; | 
| import org.springframework.web.bind.annotation.RequestMapping; | 
| import org.springframework.web.bind.annotation.RequestParam; | 
| import org.springframework.web.bind.annotation.RestController; | 
|   | 
| import javax.annotation.Resource; | 
| import javax.servlet.http.HttpServletResponse; | 
| import java.io.IOException; | 
| import java.io.PrintWriter; | 
|   | 
|   | 
| /** | 
|  * SSE 推送. | 
|  * | 
|  * @author lawrencehj | 
|  * @author <a href="mailto:xiaoQQya@126.com">xiaoQQya</a> | 
|  * @since 2021/01/20 | 
|  */ | 
| @Tag(name = "SSE 推送") | 
| @RestController | 
| @RequestMapping("/api") | 
| public class SseController { | 
|   | 
|     @Resource | 
|     private AlarmEventListener alarmEventListener; | 
|   | 
|     /** | 
|      * SSE 推送. | 
|      * | 
|      * @param response  响应 | 
|      * @param browserId 浏览器ID | 
|      * @throws IOException IOEXCEPTION | 
|      * @author <a href="mailto:xiaoQQya@126.com">xiaoQQya</a> | 
|      * @since 2023/11/06 | 
|      */ | 
|     @GetMapping("/emit") | 
|     public void emit(HttpServletResponse response, @RequestParam String browserId) throws IOException, InterruptedException { | 
|         response.setContentType("text/event-stream"); | 
|         response.setCharacterEncoding("utf-8"); | 
|   | 
|         PrintWriter writer = response.getWriter(); | 
|         alarmEventListener.addSseEmitter(browserId, writer); | 
|   | 
|         while (!writer.checkError()) { | 
|             Thread.sleep(1000); | 
|             writer.write(":keep alive\n\n"); | 
|             writer.flush(); | 
|         } | 
|         alarmEventListener.removeSseEmitter(browserId, writer); | 
|     } | 
| } |