Files
smart_venue/device-socket/src/main/java/com/sv/socket/DeviceController.java
2020-01-29 21:50:10 +08:00

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();
}
}
}