PJLink对接demo

1 对接思路

构建socket连接,发送pjlink协议指令

2 实现demo

@Slf4j
public class PJLinkService {

    private ConcurrentHashMap<String, Socket> socketMap = new ConcurrentHashMap<>(16);

    public Integer powerOn(String ip, Integer port) throws IOException {
        Socket socket = connect(ip, port);
        if (Objects.isNull(socket)) {
            log.error("===>开机连接投影仪失败:{}", ip);
            return null;
        }
        DataOutputStream out = null;
        BufferedReader in = null;
        try {
            out = new DataOutputStream(socket.getOutputStream());
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String sendResult = sendCommand("%1POWR 1", out, in);
            if (StringUtils.isEmpty(sendResult)) {
                log.error("===>投影仪开机指令发送失败:{}", ip);
                return null;
            }
            if (sendResult.contains("OK")) {
                return 1;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        } finally {
            if (Objects.nonNull(out)) {
                out.close();
            }
            if (Objects.nonNull(in)) {
                in.close();
            }
        }
        return 0;
    }

    public Integer powerOff(String ip, Integer port) throws IOException {

        Socket socket = connect(ip, port);
        if (Objects.isNull(socket)) {
            log.error("===>开机连接投影仪失败:{}", ip);
            return null;
        }
        DataOutputStream out = null;
        BufferedReader in = null;
        try {
            out = new DataOutputStream(socket.getOutputStream());
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String sendResult = sendCommand("%1POWR 0", out, in);
            if (StringUtils.isEmpty(sendResult)) {
                log.error("===>投影仪开机指令发送失败:{}", ip);
                return null;
            }
            if (sendResult.contains("OK")) {
                return 1;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        } finally {
            if (Objects.nonNull(out)) {
                out.close();
            }
            if (Objects.nonNull(in)) {
                in.close();
            }
        }

        return 0;
    }

    public Integer queryState(String ip, Integer port) throws IOException {

        Socket socket = connect(ip, port);
        if (Objects.isNull(socket)) {
            log.error("===>开机连接投影仪失败:{}", ip);
            return null;
        }
        DataOutputStream out = null;
        BufferedReader in = null;
        try {
            out = new DataOutputStream(socket.getOutputStream());
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String sendResult = sendCommand("%1POWR ?", out, in);
            if (StringUtils.isEmpty(sendResult)) {
                log.error("===>投影仪开机指令发送失败:{}", ip);
                return null;
            }
            if (sendResult.contains("POWR=1")) {
                return 1;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        } finally {
            if (Objects.nonNull(out)) {
                out.close();
            }
            if (Objects.nonNull(in)) {
                in.close();
            }
        }
        return 0;
    }

    public Socket connect(String ip, Integer port) throws IOException {
        Socket socket = socketMap.get(ip);
        if (Objects.nonNull(socket) && socket.isConnected()) {
            return socket;
        }
        if (Objects.nonNull(socket)) {
            socket.close();
            socketMap.remove(ip);
        }
        try {
            Socket newSocket = new Socket(ip, port);
            return newSocket;
        } catch (Exception exception) {
            exception.printStackTrace();
            log.error("投影仪连接出错:{}:{}",ip, exception.getMessage());
        }

        return null;

    }

    public String sendCommand(String command, DataOutputStream out, BufferedReader in) throws IOException {
        // 发送命令到PJLink设备
        out.writeBytes(command + "\r\n");
        out.flush();
        // 读取设备的响应
        StringBuilder response = new StringBuilder();
        String line;
        while ((line = in.readLine()) != null) {
            // 通常,你需要一个终止条件来停止读取响应
            // 这里假设响应在空行之后结束,这取决于你的设备如何响应
            if (line.trim().isEmpty()) {
                break;
            }
            response.append(line).append("\n");
        }

        return response.toString();
    }
}

o

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值