ServerController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. package com.genersoft.iot.vmp.vmanager.server;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.genersoft.iot.vmp.VManageBootstrap;
  5. import com.genersoft.iot.vmp.common.VersionPo;
  6. import com.genersoft.iot.vmp.conf.DynamicTask;
  7. import com.genersoft.iot.vmp.conf.SipConfig;
  8. import com.genersoft.iot.vmp.conf.UserSetting;
  9. import com.genersoft.iot.vmp.conf.VersionInfo;
  10. import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
  11. import com.genersoft.iot.vmp.service.IMediaServerService;
  12. import com.genersoft.iot.vmp.utils.SpringBeanFactory;
  13. import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
  14. import gov.nist.javax.sip.SipStackImpl;
  15. import io.swagger.annotations.Api;
  16. import io.swagger.annotations.ApiImplicitParam;
  17. import io.swagger.annotations.ApiImplicitParams;
  18. import io.swagger.annotations.ApiOperation;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.context.ConfigurableApplicationContext;
  22. import org.springframework.util.StringUtils;
  23. import org.springframework.web.bind.annotation.*;
  24. import javax.sip.ListeningPoint;
  25. import javax.sip.ObjectInUseException;
  26. import javax.sip.SipProvider;
  27. import java.util.Iterator;
  28. import java.util.List;
  29. import java.util.Set;
  30. @SuppressWarnings("rawtypes")
  31. @Api(tags = "服务控制")
  32. @CrossOrigin
  33. @RestController
  34. @RequestMapping("/api/server")
  35. public class ServerController {
  36. @Autowired
  37. private ConfigurableApplicationContext context;
  38. @Autowired
  39. private IMediaServerService mediaServerService;
  40. @Autowired
  41. private VersionInfo versionInfo;
  42. @Autowired
  43. private SipConfig sipConfig;
  44. @Autowired
  45. private UserSetting userSetting;
  46. @Autowired
  47. private DynamicTask dynamicTask;
  48. @Value("${server.port}")
  49. private int serverPort;
  50. @ApiOperation("流媒体服务列表")
  51. @GetMapping(value = "/media_server/list")
  52. @ResponseBody
  53. public WVPResult<List<MediaServerItem>> getMediaServerList(boolean detail){
  54. WVPResult<List<MediaServerItem>> result = new WVPResult<>();
  55. result.setCode(0);
  56. result.setMsg("success");
  57. result.setData(mediaServerService.getAll());
  58. return result;
  59. }
  60. @ApiOperation("在线流媒体服务列表")
  61. @GetMapping(value = "/media_server/online/list")
  62. @ResponseBody
  63. public WVPResult<List<MediaServerItem>> getOnlineMediaServerList(){
  64. WVPResult<List<MediaServerItem>> result = new WVPResult<>();
  65. result.setCode(0);
  66. result.setMsg("success");
  67. result.setData(mediaServerService.getAllOnline());
  68. return result;
  69. }
  70. @ApiOperation("获取流媒体服务")
  71. @GetMapping(value = "/media_server/one/{id}")
  72. @ResponseBody
  73. public WVPResult<MediaServerItem> getMediaServer(@PathVariable String id){
  74. WVPResult<MediaServerItem> result = new WVPResult<>();
  75. result.setCode(0);
  76. result.setMsg("success");
  77. result.setData(mediaServerService.getOne(id));
  78. return result;
  79. }
  80. @ApiOperation("测试流媒体服务")
  81. @ApiImplicitParams({
  82. @ApiImplicitParam(name="ip", value = "流媒体服务IP", dataTypeClass = String.class),
  83. @ApiImplicitParam(name="port", value = "流媒体服务HTT端口", dataTypeClass = Integer.class),
  84. @ApiImplicitParam(name="secret", value = "流媒体服务secret", dataTypeClass = String.class),
  85. })
  86. @GetMapping(value = "/media_server/check")
  87. @ResponseBody
  88. public WVPResult<MediaServerItem> checkMediaServer(@RequestParam String ip, @RequestParam int port, @RequestParam String secret){
  89. return mediaServerService.checkMediaServer(ip, port, secret);
  90. }
  91. @ApiOperation("测试流媒体录像管理服务")
  92. @ApiImplicitParams({
  93. @ApiImplicitParam(name="ip", value = "流媒体服务IP", dataTypeClass = String.class),
  94. @ApiImplicitParam(name="port", value = "流媒体服务HTT端口", dataTypeClass = Integer.class),
  95. @ApiImplicitParam(name="secret", value = "流媒体服务secret", dataTypeClass = String.class),
  96. })
  97. @GetMapping(value = "/media_server/record/check")
  98. @ResponseBody
  99. public WVPResult<String> checkMediaRecordServer(@RequestParam String ip, @RequestParam int port){
  100. boolean checkResult = mediaServerService.checkMediaRecordServer(ip, port);
  101. WVPResult<String> result = new WVPResult<>();
  102. if (checkResult) {
  103. result.setCode(0);
  104. result.setMsg("success");
  105. }else {
  106. result.setCode(-1);
  107. result.setMsg("连接失败");
  108. }
  109. return result;
  110. }
  111. @ApiOperation("保存流媒体服务")
  112. @ApiImplicitParams({
  113. @ApiImplicitParam(name="mediaServerItem", value = "流媒体信息", dataTypeClass = MediaServerItem.class)
  114. })
  115. @PostMapping(value = "/media_server/save")
  116. @ResponseBody
  117. public WVPResult<String> saveMediaServer(@RequestBody MediaServerItem mediaServerItem){
  118. MediaServerItem mediaServerItemInDatabase = mediaServerService.getOne(mediaServerItem.getId());
  119. if (mediaServerItemInDatabase != null) {
  120. if (StringUtils.isEmpty(mediaServerItemInDatabase.getSendRtpPortRange())
  121. && StringUtils.isEmpty(mediaServerItem.getSendRtpPortRange())){
  122. mediaServerItem.setSendRtpPortRange("30000,30500");
  123. }
  124. mediaServerService.update(mediaServerItem);
  125. }else {
  126. if (StringUtils.isEmpty(mediaServerItem.getSendRtpPortRange())){
  127. mediaServerItem.setSendRtpPortRange("30000,30500");
  128. }
  129. return mediaServerService.add(mediaServerItem);
  130. }
  131. WVPResult<String> result = new WVPResult<>();
  132. result.setCode(0);
  133. result.setMsg("success");
  134. return result;
  135. }
  136. @ApiOperation("移除流媒体服务")
  137. @ApiImplicitParams({
  138. @ApiImplicitParam(name="id", value = "流媒体ID", dataTypeClass = String.class)
  139. })
  140. @DeleteMapping(value = "/media_server/delete")
  141. @ResponseBody
  142. public WVPResult<String> deleteMediaServer(@RequestParam String id){
  143. if (mediaServerService.getOne(id) != null) {
  144. mediaServerService.delete(id);
  145. mediaServerService.deleteDb(id);
  146. }else {
  147. WVPResult<String> result = new WVPResult<>();
  148. result.setCode(-1);
  149. result.setMsg("未找到此节点");
  150. return result;
  151. }
  152. WVPResult<String> result = new WVPResult<>();
  153. result.setCode(0);
  154. result.setMsg("success");
  155. return result;
  156. }
  157. @ApiOperation("重启服务")
  158. @GetMapping(value = "/restart")
  159. @ResponseBody
  160. public Object restart(){
  161. Thread restartThread = new Thread(new Runnable() {
  162. @Override
  163. public void run() {
  164. try {
  165. Thread.sleep(3000);
  166. SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
  167. SipStackImpl stack = (SipStackImpl)up.getSipStack();
  168. stack.stop();
  169. Iterator listener = stack.getListeningPoints();
  170. while (listener.hasNext()) {
  171. stack.deleteListeningPoint((ListeningPoint) listener.next());
  172. }
  173. Iterator providers = stack.getSipProviders();
  174. while (providers.hasNext()) {
  175. stack.deleteSipProvider((SipProvider) providers.next());
  176. }
  177. VManageBootstrap.restart();
  178. } catch (InterruptedException ignored) {
  179. } catch (ObjectInUseException e) {
  180. e.printStackTrace();
  181. }
  182. }
  183. });
  184. restartThread.setDaemon(false);
  185. restartThread.start();
  186. return "success";
  187. }
  188. @ApiOperation("版本信息")
  189. @GetMapping(value = "/version")
  190. @ResponseBody
  191. public WVPResult<VersionPo> getVersion(){
  192. WVPResult<VersionPo> result = new WVPResult<>();
  193. result.setCode(0);
  194. result.setMsg("success");
  195. result.setData(versionInfo.getVersion());
  196. return result;
  197. }
  198. @ApiOperation("配置信息")
  199. @GetMapping(value = "/config")
  200. @ApiImplicitParams({
  201. @ApiImplicitParam(name="type", value = "配置类型(sip, base)", dataTypeClass = String.class),
  202. })
  203. @ResponseBody
  204. public WVPResult<JSONObject> getVersion(String type){
  205. WVPResult<JSONObject> result = new WVPResult<>();
  206. result.setCode(0);
  207. result.setMsg("success");
  208. JSONObject jsonObject = new JSONObject();
  209. jsonObject.put("server.port", serverPort);
  210. if (StringUtils.isEmpty(type)) {
  211. jsonObject.put("sip", JSON.toJSON(sipConfig));
  212. jsonObject.put("base", JSON.toJSON(userSetting));
  213. }else {
  214. switch (type){
  215. case "sip":
  216. jsonObject.put("sip", sipConfig);
  217. break;
  218. case "base":
  219. jsonObject.put("base", userSetting);
  220. break;
  221. default:
  222. break;
  223. }
  224. }
  225. result.setData(jsonObject);
  226. return result;
  227. }
  228. // @ApiOperation("当前进行中的动态任务")
  229. // @GetMapping(value = "/dynamicTask")
  230. // @ResponseBody
  231. // public WVPResult<JSONObject> getDynamicTask(){
  232. // WVPResult<JSONObject> result = new WVPResult<>();
  233. // result.setCode(0);
  234. // result.setMsg("success");
  235. //
  236. // JSONObject jsonObject = new JSONObject();
  237. //
  238. // Set<String> allKeys = dynamicTask.getAllKeys();
  239. // jsonObject.put("server.port", serverPort);
  240. // if (StringUtils.isEmpty(type)) {
  241. // jsonObject.put("sip", JSON.toJSON(sipConfig));
  242. // jsonObject.put("base", JSON.toJSON(userSetting));
  243. // }else {
  244. // switch (type){
  245. // case "sip":
  246. // jsonObject.put("sip", sipConfig);
  247. // break;
  248. // case "base":
  249. // jsonObject.put("base", userSetting);
  250. // break;
  251. // default:
  252. // break;
  253. // }
  254. // }
  255. // result.setData(jsonObject);
  256. // return result;
  257. // }
  258. }