59 lines
2.0 KiB
Java
59 lines
2.0 KiB
Java
package com.sv.socket;
|
|
|
|
import com.common.DeviceDTO;
|
|
import com.enums.DeviceStatusEnum;
|
|
import com.sv.entity.Device;
|
|
import com.sv.service.oms.DeviceService;
|
|
import com.ydd.framework.core.common.dto.ResponseDTO;
|
|
import org.apache.ibatis.annotations.Param;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.context.ApplicationContext;
|
|
import org.springframework.web.bind.annotation.PathVariable;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import javax.annotation.Resource;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.net.URI;
|
|
import java.net.URISyntaxException;
|
|
import java.net.URLEncoder;
|
|
|
|
@RestController
|
|
public class DeviceController {
|
|
|
|
@Value("${face.url}")
|
|
private String faceUrl;
|
|
|
|
|
|
@Resource
|
|
private ApplicationContext applicationContext;
|
|
|
|
|
|
@Resource
|
|
private DeviceService deviceService;
|
|
|
|
@RequestMapping("/device/reconnect/{id}")
|
|
public ResponseDTO reconnect(@PathVariable("id") Integer deviceId) {
|
|
Device device = deviceService.findById(deviceId);
|
|
synchronized (device.getStream().intern()) {
|
|
if (device != null && DeviceStatusEnum.OFFLINE.value.equals(device.getStatus())) {
|
|
deviceService.reconnect(deviceId);
|
|
try {
|
|
DeviceDTO deviceDTO = new DeviceDTO();
|
|
BeanUtils.copyProperties(device, deviceDTO);
|
|
URI uri = new URI("ws://" + faceUrl + "/video?url=" + URLEncoder.encode(device.getStream(), "utf-8"));
|
|
DeviceSocket client = new DeviceSocket(applicationContext, deviceDTO, uri);
|
|
client.connectBlocking();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
deviceService.offline(deviceId);
|
|
}
|
|
}
|
|
return ResponseDTO.ok();
|
|
}
|
|
|
|
}
|
|
|
|
}
|