wenzheng.yang
2023-04-27 31e64e0e144815e6176c1b6b81eae8dc68688570
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
const socket = {
    /**
     * 回调信息
     */
    UDPSocket: null,
    //单播流程
    receivedStatus: () => {},
    receivedMsgCallBack: () => {},
    receivedHexMsgCallBack: () => {},
    //广播流程
    recBroadcastStatus: () => {},
    recBroadcastMsgCallBack: () => {},
    recBroadcastHexMsgCallBack: () => {},
 
    /**
     * 初始化连接UDP服务器
     * @param {Object} ip    UDP服务器IP
     * @param {Object} port UDP服务器端口
     * @param {Object} charsetname 字符集格式 //可不传,默认'UFT-8',可选'GBK'
     */
    init(ip, port, charsetname) {
        socket.UDPSocket = uni.requireNativePlugin('Aimer-UDPPlugin');
        socket.connect(ip, port, charsetname);
    },
 
    connect(ip, port, charsetname) {
        socket.UDPSocket.connect({
                charsetname: charsetname, //可不选,默认UTF-8,可选'GBK'
                ip: ip,
                port: port
            },
            result => {
                /**
                 * status : 0 连接成功
                 * status : 1 断开连接
                 * receivedMsg : 服务器返回信息
                 * receivedHexMsg : 服务器返回字节数组(单片机、智能家居等硬件数据交互)
                 */
                if (result.status) {
                    //连接状态
                    socket.receivedStatus(result.status);
                }
                if (result.receivedMsg) {
                    //服务器返回信息
                    socket.receivedMsgCallBack(result.receivedMsg);
                }
                if (result.receivedHexMsg) {
                    //Hex服务器返回信息
                    socket.receivedHexMsgCallBack(result.receivedHexMsg);
                }
            }
        );
    },
 
    /**
     * 客户端 发送字符串消息
     * @param {Object} message 发送内容
     * @param {Object} charsetname 字符集格式
     */
    send(message, charsetname) {
        socket.UDPSocket.send({
            charsetname: charsetname, //可不选,默认UTF-8,可选'GBK'
            message: message
        });
    },
 
    /**
     * 客户端 发送字节数组(发送控制单片机、智能家具等硬件的指令)
     * @param {Object} bytesMessage
     */
    sendBytes(bytesMessage) {
        socket.UDPSocket.sendBytes({
            bytesMessage: bytesMessage
        });
    },
 
    /**
     * 断开单播连接
     */
    disconnect() {
        socket.UDPSocket.disconnect();
    },
 
    /**
     * 客户端 发送字符串广播
     * @param {Object} message
     * @param {Object} ip
     * @param {Object} port
     * @param {Object} charsetname
     */
    sendBroadcast(message, ip, port, localPort, charsetname) {
        socket.UDPSocket = uni.requireNativePlugin('Aimer-UDPPlugin');
        socket.UDPSocket.sendBroadcast({
            charsetname: charsetname, //可不选,默认UTF-8,可选'GBK'
            message: message,
            ip: ip,
            port: port,
            localPort: localPort
        });
    },
 
    /**
     * 客户端 发送字节数组广播(发送控制单片机、智能家具等硬件的指令)
     * @param {Object} bytesMessage
     * @param {Object} ip
     * @param {Object} port
     */
    sendBytesBroadcast(bytesMessage, ip, port, localPort) {
        socket.UDPSocket = uni.requireNativePlugin('Aimer-UDPPlugin');
        socket.UDPSocket.sendBytesBroadcast({
            bytesMessage: bytesMessage,
            ip: ip,
            port: port,
            localPort: localPort
        });
    },
 
    /**
     * 开启广播接收
     * @param {Object} port
     * @param {Object} charsetname
     */
    bindBroadcast(port, charsetname) {
        socket.UDPSocket = uni.requireNativePlugin('Aimer-UDPPlugin');
        socket.UDPSocket.bindBroadcast({
                charsetname: charsetname, //可不选,默认UTF-8,可选'GBK'
                port: port
            },
            result => {
                /**
                 * status : 0 开启广播接收
                 * status : 1 关闭广播接收
                 * recBroadMsg : 服务器返回信息 
                 * recBroadHexMsg :服务器返回字节数组(单片机、智能家居等硬件数据交互)
                 * recBroadAddress :发送端IP地址
                 */
                if (result.status) {
                    //连接状态
                    socket.recBroadcastStatus(result.status);
                }
                if (result.recBroadMsg) {
                    //服务器返回信息
                    socket.recBroadcastMsgCallBack(result.recBroadMsg, result.recBroadAddress);
                }
                if (result.recBroadHexMsg) {
                    //Hex服务器返回信息
                    socket.recBroadcastHexMsgCallBack(result.recBroadHexMsg, result.recBroadAddress);
                }
            }
        );
    },
 
    /**
     * 关闭广播接收
     */
    closeBroadcast() {
        socket.UDPSocket = uni.requireNativePlugin('Aimer-UDPPlugin');
        socket.UDPSocket.closeBroadcast();
    }
}
 
export default socket;