| | |
| | | import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.ObjectUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import javax.sip.InvalidArgumentException; |
| | | import javax.sip.RequestEvent; |
| | |
| | | import javax.sip.message.Response; |
| | | import java.text.ParseException; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.concurrent.ConcurrentLinkedQueue; |
| | | |
| | | /** |
| | |
| | | @Autowired |
| | | private IDeviceChannelService deviceChannelService; |
| | | |
| | | private boolean taskQueueHandlerRun = false; |
| | | |
| | | private ConcurrentLinkedQueue<HandlerCatchData> taskQueue = new ConcurrentLinkedQueue<>(); |
| | | |
| | | @Qualifier("taskExecutor") |
| | |
| | | }catch (SipException | InvalidArgumentException | ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | boolean runed = !taskQueue.isEmpty(); |
| | | taskQueue.offer(new HandlerCatchData(evt, null, null)); |
| | | if (!taskQueueHandlerRun) { |
| | | taskQueueHandlerRun = true; |
| | | if (!runed) { |
| | | taskExecutor.execute(()-> { |
| | | try { |
| | | while (!taskQueue.isEmpty()) { |
| | |
| | | } |
| | | }catch (Exception e) { |
| | | logger.error("处理NOTIFY消息时错误", e); |
| | | }finally { |
| | | taskQueueHandlerRun = false; |
| | | } |
| | | }); |
| | | } |
| | |
| | | Element deviceIdElement = rootElement.element("DeviceID"); |
| | | String channelId = deviceIdElement.getTextTrim().toString(); |
| | | Device device = redisCatchStorage.getDevice(deviceId); |
| | | |
| | | if (device == null) { |
| | | // 根据通道id查询设备Id |
| | | List<Device> deviceList = deviceChannelService.getDeviceByChannelId(channelId); |
| | | if (deviceList.size() > 0) { |
| | | device = deviceList.get(0); |
| | | }else { |
| | | logger.warn("[mobilePosition移动位置Notify] 未找到通道{}所属的设备", channelId); |
| | | return; |
| | | } |
| | | } |
| | | if (device != null) { |
| | | if (!ObjectUtils.isEmpty(device.getName())) { |
| | | mobilePosition.setDeviceName(device.getName()); |