|  |  |  | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.bean.*; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.event.EventPublisher; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.event.record.RecordEndEventListener; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.gb28181.utils.DateUtil; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.storager.IVideoManagerStorager; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.utils.DateUtil; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.storager.IVideoManagerStorage; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; | 
|---|
|  |  |  | import gov.nist.javax.sip.message.SIPRequest; | 
|---|
|  |  |  | import org.dom4j.Element; | 
|---|
|  |  |  | import org.slf4j.Logger; | 
|---|
|  |  |  | import org.slf4j.LoggerFactory; | 
|---|
|  |  |  | 
|---|
|  |  |  | import javax.sip.InvalidArgumentException; | 
|---|
|  |  |  | import javax.sip.RequestEvent; | 
|---|
|  |  |  | import javax.sip.SipException; | 
|---|
|  |  |  | import javax.sip.header.FromHeader; | 
|---|
|  |  |  | import javax.sip.message.Response; | 
|---|
|  |  |  | import java.text.ParseException; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | 
|---|
|  |  |  | private QueryMessageHandler queryMessageHandler; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private IVideoManagerStorager storager; | 
|---|
|  |  |  | private IVideoManagerStorage storager; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SIPCommanderFroPlatform cmderFroPlatform; | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | SIPRequest request = (SIPRequest) evt.getRequest(); | 
|---|
|  |  |  | Element snElement = rootElement.element("SN"); | 
|---|
|  |  |  | int sn = Integer.parseInt(snElement.getText()); | 
|---|
|  |  |  | Element deviceIDElement = rootElement.element("DeviceID"); | 
|---|
|  |  |  | 
|---|
|  |  |  | DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(parentPlatform.getServerGBId(), channelId); | 
|---|
|  |  |  | // 接收录像数据 | 
|---|
|  |  |  | recordEndEventListener.addEndEventHandler(deviceChannel.getDeviceId(), channelId, (recordInfo)->{ | 
|---|
|  |  |  | cmderFroPlatform.recordInfo(deviceChannel, parentPlatform, fromHeader.getTag(), recordInfo); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | cmderFroPlatform.recordInfo(deviceChannel, parentPlatform, request.getFromTag(), recordInfo); | 
|---|
|  |  |  | } catch (SipException | InvalidArgumentException | ParseException e) { | 
|---|
|  |  |  | logger.error("[命令发送失败] 国标级联 回复录像数据: {}", e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | commander.recordInfoQuery(device, channelId, DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(startTime), | 
|---|
|  |  |  | DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTime), sn, secrecy, type, (eventResult -> { | 
|---|
|  |  |  | // 回复200 OK | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | responseAck(evt, Response.OK); | 
|---|
|  |  |  | } catch (SipException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } catch (InvalidArgumentException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }),(eventResult -> { | 
|---|
|  |  |  | // 查询失败 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | responseAck(evt, eventResult.statusCode, eventResult.msg); | 
|---|
|  |  |  | } catch (SipException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } catch (InvalidArgumentException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | })); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | commander.recordInfoQuery(device, channelId, DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(startTime), | 
|---|
|  |  |  | DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTime), sn, secrecy, type, (eventResult -> { | 
|---|
|  |  |  | // 回复200 OK | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | responseAck(request, Response.OK); | 
|---|
|  |  |  | } catch (SipException | InvalidArgumentException | ParseException e) { | 
|---|
|  |  |  | logger.error("[命令发送失败] 录像查询回复: {}", e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }),(eventResult -> { | 
|---|
|  |  |  | // 查询失败 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | responseAck(request, eventResult.statusCode, eventResult.msg); | 
|---|
|  |  |  | } catch (SipException | InvalidArgumentException | ParseException e) { | 
|---|
|  |  |  | logger.error("[命令发送失败] 录像查询回复: {}", e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | })); | 
|---|
|  |  |  | } catch (InvalidArgumentException | ParseException | SipException e) { | 
|---|
|  |  |  | logger.error("[命令发送失败] 录像查询: {}", e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }else if (channelSources.get(1).getCount() > 0) { // 直播流 | 
|---|
|  |  |  | // TODO | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | responseAck(evt, Response.NOT_IMPLEMENTED); // 回复未实现 | 
|---|
|  |  |  | } catch (SipException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } catch (InvalidArgumentException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | responseAck(request, Response.NOT_IMPLEMENTED); // 回复未实现 | 
|---|
|  |  |  | } catch (SipException | InvalidArgumentException | ParseException e) { | 
|---|
|  |  |  | logger.error("[命令发送失败] 录像查询: {}", e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { // 错误的请求 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | responseAck(evt, Response.BAD_REQUEST); | 
|---|
|  |  |  | } catch (SipException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } catch (InvalidArgumentException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | responseAck(request, Response.BAD_REQUEST); | 
|---|
|  |  |  | } catch (SipException | InvalidArgumentException | ParseException e) { | 
|---|
|  |  |  | logger.error("[命令发送失败] 录像查询: {}", e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|