73 lines
2.3 KiB
JavaScript
73 lines
2.3 KiB
JavaScript
|
|
const utils = {
|
||
|
|
getUserIP: function () {
|
||
|
|
var MyPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection
|
||
|
|
var pc = new MyPeerConnection({
|
||
|
|
iceServers: []
|
||
|
|
})
|
||
|
|
var noop = function () {}
|
||
|
|
var localIPs = {}
|
||
|
|
var newObj = {}
|
||
|
|
var ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g
|
||
|
|
function iterateIP (ip) {
|
||
|
|
if (!localIPs[ip]) localStorage.setItem('localip', ip)
|
||
|
|
localIPs[ip] = true
|
||
|
|
newObj['ip'] = ip
|
||
|
|
}
|
||
|
|
pc.createDataChannel('')
|
||
|
|
pc.createOffer().then(function (sdp) {
|
||
|
|
sdp.sdp.split('\n').forEach(function (line) {
|
||
|
|
if (line.indexOf('candidate') < 0) return
|
||
|
|
line.match(ipRegex).forEach(iterateIP)
|
||
|
|
})
|
||
|
|
pc.setLocalDescription(sdp, noop, noop)
|
||
|
|
}).catch(function (reason) {
|
||
|
|
// An error occurred, so handle the failure to connect
|
||
|
|
})
|
||
|
|
pc.onicecandidate = function (ice) {
|
||
|
|
if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return
|
||
|
|
ice.candidate.candidate.match(ipRegex).forEach(iterateIP)
|
||
|
|
}
|
||
|
|
return newObj
|
||
|
|
},
|
||
|
|
// 小数加法
|
||
|
|
accAdd (arg1, arg2) {
|
||
|
|
var r1, r2, m, c
|
||
|
|
try {
|
||
|
|
r1 = arg1.toString().split('.')[1].length
|
||
|
|
} catch (e) {
|
||
|
|
r1 = 0
|
||
|
|
}
|
||
|
|
try {
|
||
|
|
r2 = arg2.toString().split('.')[1].length
|
||
|
|
} catch (e) {
|
||
|
|
r2 = 0
|
||
|
|
}
|
||
|
|
c = Math.abs(r1 - r2)
|
||
|
|
m = Math.pow(10, Math.max(r1, r2))
|
||
|
|
if (c > 0) {
|
||
|
|
var cm = Math.pow(10, c)
|
||
|
|
if (r1 > r2) {
|
||
|
|
arg1 = Number(arg1.toString().replace('.', ''))
|
||
|
|
arg2 = Number(arg2.toString().replace('.', '')) * cm
|
||
|
|
} else {
|
||
|
|
arg1 = Number(arg1.toString().replace('.', '')) * cm
|
||
|
|
arg2 = Number(arg2.toString().replace('.', ''))
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
arg1 = Number(arg1.toString().replace('.', ''))
|
||
|
|
arg2 = Number(arg2.toString().replace('.', ''))
|
||
|
|
}
|
||
|
|
return (arg1 + arg2) / m
|
||
|
|
},
|
||
|
|
// 乘法
|
||
|
|
accMul (arg1, arg2) {
|
||
|
|
var m = 0
|
||
|
|
var s1 = arg1.toString()
|
||
|
|
var s2 = arg2.toString()
|
||
|
|
try { m += s1.split('.')[1].length } catch (e) {}
|
||
|
|
try { m += s2.split('.')[1].length } catch (e) {}
|
||
|
|
return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
export default utils
|