Signaling server, WS, login, room creation

This commit is contained in:
Thomas
2020-07-27 21:44:36 +02:00
parent 0ef9ba675b
commit c1787cacba
25 changed files with 1114 additions and 123 deletions

View File

@@ -0,0 +1,128 @@
import { send } from './signalPlugin'
const configuration = {
iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
}
const state = {
name: null,
connections: new Map()
}
const getters = {
displayName: state => state.name
}
const actions = {
setName ({ commit }, name) {
commit('SET_NAME', name)
},
async offer ({ commit }, offer, name) {
commit('CREATE_PEER_CONNECTION', name)
commit('ANSWER', name, offer)
},
answer ({ commit }, answer, name) {
commit('OFFER', name, answer)
},
candidate ({ commit }, candidate, name) {
commit('ANSWER', name, candidate)
},
leave ({ commit }) {
commit('LEAVE')
},
broadcast ({ commit }, message) {
commit('BROADCAST', message)
}
}
const mutations = {
SET_NAME (state, name) {
state.name = name
},
CREATE_PEER_CONNECTION (state, target) {
console.log('CREATED PEER CONNECTION')
var connection = new RTCPeerConnection(configuration)
state.connections[target] = connection
connection.onicecandidate = function (event) {
if (event.candidate) {
send({
type: 'candidate',
name: name,
target: target,
candidate: event.candidate
})
}
}
connection.onnegotiationneeded = function () { handleNegotiationNeededEvent(target) }
connection.onsignalingstatechange = function () { handleSignalingStateChangeEvent(connection) }
connection.oniceconnectionstatechange = function () { handleICEConnectionStateChangeEvent(connection) }
connection.onicegatheringstatechange = function () { handleICEGatheringStateChangeEvent(connection) }
},
CREATE_DATA_CHANNEL (state) {
},
ANSWER (state, target, offer) {
var connection = state.connections[target]
connection.setRemoteDescription(new RTCSessionDescription(offer))
var answer = connection.createAnswer()
connection.setLocalDescription(answer)
send({
type: 'answer',
name: name,
target: target,
answer: answer
})
},
OFFER (state, target, answer) {
var connection = state.connections[target]
connection.setRemoteDescription(new RTCSessionDescription(answer))
},
CANDIDATE (state, target, candidate) {
var connection = state.connections[target]
connection.addIceCandidate(new RTCIceCandidate(candidate))
},
LEAVE (state) {
state.connections.forEach((connection) => {
connection.close()
connection = null
})
state.connections = new Map()
},
BROADCAST (state, message) {
}
}
function handleICEConnectionStateChangeEvent (connection) {
console.log('ICE CONNECTION CHANGE ' + connection.iceConnectionState)
}
function handleICEGatheringStateChangeEvent (connection) {
console.log('ICE GATHERING CHANGE ' + connection.iceGatheringState)
}
async function handleNegotiationNeededEvent (target) {
console.log('NEGOTIATION NEEDED FROM ' + target)
}
async function handleSignalingStateChangeEvent (connection) {
console.log('STATE CHANGED TO : ' + connection.signalingState)
switch (connection.signalingState) {
case 'closed':
await connection.close()
break
}
}
export default {
namespaced: true,
state,
getters,
actions,
mutations
}