Keep active peer connections after server restart

This commit is contained in:
Jerko Steiner 2020-03-13 14:00:33 +01:00
parent cd4979c3be
commit aa7a6927f8
4 changed files with 5 additions and 10 deletions

View File

@ -98,7 +98,7 @@ class PeerHandler {
const { dispatch, getState, user } = this const { dispatch, getState, user } = this
const state = getState() const state = getState()
const message = JSON.parse(new window.TextDecoder('utf-8').decode(buffer)) const message = JSON.parse(new window.TextDecoder('utf-8').decode(buffer))
debug('peer: %s, message: %o', user.id, buffer) debug('peer: %s, message: %o', user.id, message)
switch (message.type) { switch (message.type) {
case 'file': case 'file':
dispatch(ChatActions.addMessage({ dispatch(ChatActions.addMessage({

View File

@ -59,7 +59,7 @@ describe('SocketActions', () => {
expect(instances.length).toBe(1) expect(instances.length).toBe(1)
}) })
it('adds a peer for each new user and destroys missing peers', () => { it('adds a peer for each new user and keeps active connections', () => {
const payload = { const payload = {
users: [userA, userC], users: [userA, userC],
initiator: userC.userId, initiator: userC.userId,
@ -68,7 +68,7 @@ describe('SocketActions', () => {
// then // then
expect(instances.length).toBe(2) expect(instances.length).toBe(2)
expect((instances[0].destroy as jest.Mock).mock.calls.length).toBe(1) expect((instances[0].destroy as jest.Mock).mock.calls.length).toBe(0)
expect((instances[1].destroy as jest.Mock).mock.calls.length).toBe(0) expect((instances[1].destroy as jest.Mock).mock.calls.length).toBe(0)
}) })
}) })

View File

@ -1,7 +1,6 @@
import * as NotifyActions from '../actions/NotifyActions' import * as NotifyActions from '../actions/NotifyActions'
import * as PeerActions from '../actions/PeerActions' import * as PeerActions from '../actions/PeerActions'
import * as constants from '../constants' import * as constants from '../constants'
import keyBy from 'lodash/keyBy'
import _debug from 'debug' import _debug from 'debug'
import { Dispatch, GetState } from '../store' import { Dispatch, GetState } from '../store'
import { ClientSocket } from '../socket' import { ClientSocket } from '../socket'
@ -46,6 +45,7 @@ class SocketHandler {
debug('socket users: %o', users) debug('socket users: %o', users)
this.dispatch(NotifyActions.info('Connected users: {0}', users.length)) this.dispatch(NotifyActions.info('Connected users: {0}', users.length))
const { peers } = this.getState() const { peers } = this.getState()
debug('active peers: %o', Object.keys(peers))
users users
.filter( .filter(
@ -60,11 +60,6 @@ class SocketHandler {
initiator, initiator,
stream, stream,
})(dispatch, getState)) })(dispatch, getState))
const newUsersMap = keyBy(users, 'userId')
Object.keys(peers)
.filter(id => !newUsersMap[id])
.forEach(id => peers[id].destroy())
} }
} }

View File

@ -40,7 +40,7 @@ export default function handleSocket(
const users = getUsers(room) const users = getUsers(room)
debug('ready: %s, room: %s, users: %o', room, users) debug('ready: %s, room: %s, users: %o', userId, room, users)
io.to(room).emit('users', { io.to(room).emit('users', {
initiator: userId, initiator: userId,