诡...
This commit is contained in:
parent
35cde09bb0
commit
d3011d9280
@ -43,7 +43,7 @@ export default class Entanglement {
|
||||
console.debug('发送给', user.name, 'offer')
|
||||
const pc = await this.__create_webrtc(user)
|
||||
const offer = await pc.createOffer()
|
||||
pc.setLocalDescription(offer)
|
||||
await pc.setLocalDescription(offer)
|
||||
this.ws.send(JSON.stringify({ type: 'offer', user, offer }))
|
||||
return { ...user, webrtc: pc }
|
||||
}))
|
||||
@ -60,7 +60,7 @@ export default class Entanglement {
|
||||
if (data.type === 'offer') {
|
||||
console.debug(data.user.name, '发来 offer')
|
||||
const pc = await this.__create_webrtc(data.user)
|
||||
pc.setRemoteDescription(data.offer)
|
||||
await pc.setRemoteDescription(data.offer)
|
||||
const answer = await pc.createAnswer()
|
||||
await pc.setLocalDescription(answer)
|
||||
this.ws.send(JSON.stringify({ type: 'answer', user: data.user, answer }))
|
||||
@ -129,12 +129,28 @@ export default class Entanglement {
|
||||
console.log(data.user.name, '通道', event.channel.label, '发生错误')
|
||||
}
|
||||
}
|
||||
// 创建数据通道
|
||||
const channel = pc.createDataChannel('json', { reliable: true })
|
||||
channel.onopen = () => {
|
||||
console.log('打开数据通道')
|
||||
channel.send(JSON.stringify({ name: 'sato', hello: 'world' }))
|
||||
}
|
||||
channel.onmessage = event => {
|
||||
console.log('收到数据通道消息', event.data)
|
||||
}
|
||||
channel.onclose = () => {
|
||||
console.log('关闭数据通道')
|
||||
}
|
||||
channel.onerror = () => {
|
||||
console.log('数据通道发生错误')
|
||||
}
|
||||
return pc
|
||||
}
|
||||
|
||||
// 向所有在线的用户广播消息(webrtc)
|
||||
send_all(channel_name, data) {
|
||||
console.log('向', channel_name, '频道广播消息:', data)
|
||||
console.log('在线用户:', this.users)
|
||||
this.users.filter(user => {
|
||||
const status = user.webrtc.iceConnectionState
|
||||
return status === 'connected' || status === 'completed'
|
||||
@ -153,7 +169,7 @@ export default class Entanglement {
|
||||
set: (target, key, value) => {
|
||||
if (!Array.isArray(target) || key !== 'length') {
|
||||
console.log('对象被修改', [...path, key], value)
|
||||
this.send_all(name, this.store[name]) // 向所有在线的用户广播消息
|
||||
this.send_all(name, { key: [...path, key], value }) // 向所有在线的用户广播消息
|
||||
}
|
||||
return Reflect.set(target, key, value)
|
||||
},
|
||||
|
@ -13,16 +13,57 @@
|
||||
</div>
|
||||
<script type="module">
|
||||
import Entanglement from './entanglement.js'
|
||||
const entanglement = new Entanglement({ options: {}, server: {} })
|
||||
const entanglement = new Entanglement({
|
||||
options: {
|
||||
iceServers: [
|
||||
{
|
||||
urls: 'turn:satori.love:3478?transport=udp',
|
||||
username: 'x-username',
|
||||
credential: 'x-password'
|
||||
},
|
||||
{
|
||||
urls: [
|
||||
'stun:stun.1und1.de',
|
||||
'stun:stun.callwithus.com',
|
||||
'stun:stun.ekiga.net',
|
||||
'stun:stun.fwdnet.net',
|
||||
'stun:stun.fwdnet.net:3478',
|
||||
'stun:stun.gmx.net',
|
||||
'stun:stun.iptel.org',
|
||||
'stun:stun.internetcalls.com',
|
||||
'stun:stun.minisipserver.com',
|
||||
'stun:stun.schlund.de',
|
||||
'stun:stun.sipgate.net',
|
||||
'stun:stun.sipgate.net:10000',
|
||||
'stun:stun.softjoys.com',
|
||||
'stun:stun.softjoys.com:3478',
|
||||
'stun:stun.voip.aebc.com',
|
||||
'stun:stun.voipbuster.com',
|
||||
'stun:stun.voipstunt.com',
|
||||
'stun:stun.voxgratia.org',
|
||||
'stun:stun.wirlab.net',
|
||||
'stun:stun.xten.com',
|
||||
'stun:stunserver.org',
|
||||
'stun:stun01.sipphone.com',
|
||||
'stun:stun.zoiper.com'
|
||||
]
|
||||
}
|
||||
],
|
||||
iceCandidatePoolSize: 10, // 限制 ICE 候选者的数量
|
||||
iceTransportPolicy: 'all', // 使用所有可用的候选者
|
||||
bundlePolicy: 'balanced', // 每種類型的內容建立一個單獨的傳輸
|
||||
}, server: {}
|
||||
})
|
||||
entanglement.set('json', {
|
||||
users: { name: 'users', list: [{ name: 'satori' }] },
|
||||
music: { name: 'music', list: [{ name: 'satori' }] },
|
||||
image: { name: 'image', list: [{ name: 'satori' }] }
|
||||
})
|
||||
const store = entanglement.get('json')
|
||||
await new Promise(resolve => setTimeout(resolve, 3000))
|
||||
store.users.name = 'koishi'
|
||||
//users.list.push({ name: 'koishi' })
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user