ServerController.java 11 KB

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