First working version of lobby.

This commit is contained in:
Håvar Aambø Fosstveit
2019-10-16 14:09:29 +02:00
parent 66a2becf63
commit 513f0efa0b
9 changed files with 207 additions and 118 deletions
+53 -2
View File
@@ -13,6 +13,9 @@ class Lobby extends EventEmitter
super();
// Closed flag.
this._closed = false;
this._peers = new Map();
}
@@ -20,6 +23,8 @@ class Lobby extends EventEmitter
{
logger.info('close()');
this._closed = true;
// Close the peers
if (this._peers)
{
@@ -60,9 +65,9 @@ class Lobby extends EventEmitter
const peer = this._peers.get(peerId);
this._peers.delete(peerId);
this.emit('promotePeer', peer);
this._peers.delete(peerId);
}
parkPeer({ peerId, consume, socket })
@@ -74,6 +79,52 @@ class Lobby extends EventEmitter
socket.emit('notification', { method: 'enteredLobby', data: {} });
this._peers.set(peerId, peer);
socket.on('request', (request, cb) =>
{
logger.debug(
'Peer "request" event [method:%s, peerId:%s]',
request.method, peer.peerId);
this._handleSocketRequest(peer, request, cb)
.catch((error) =>
{
logger.error('request failed:%o', error);
cb(error);
});
});
socket.on('disconnect', () =>
{
if (this._closed)
return;
logger.debug('Peer "close" event [peerId:%s]', peer.peerId);
this.emit('peerClosed', peer);
this._peers.delete(peer.peerId);
});
}
async _handleSocketRequest(peer, request, cb)
{
switch (request.method)
{
case 'changeDisplayName':
{
const { displayName } = request.data;
peer.displayName = displayName;
this.emit('lobbyPeerDisplayNameChanged', peer);
cb();
break;
}
}
}
}
+29
View File
@@ -61,7 +61,36 @@ class Room extends EventEmitter
{
logger.info('promotePeer() [peer:"%o"]', peer);
const { peerId } = peer;
this._peerJoining({ ...peer });
this._peers.forEach((peer) =>
{
this._notification(peer.socket, 'promotedPeer', { peerId });
});
});
this._lobby.on('lobbyPeerDisplayNameChanged', (peer) =>
{
const { peerId, displayName } = peer;
this._peers.forEach((peer) =>
{
this._notification(peer.socket, 'lobbyPeerDisplayNameChanged', { peerId, displayName });
});
});
this._lobby.on('peerClosed', (peer) =>
{
logger.info('peerClosed() [peer:"%o"]', peer);
const { peerId } = peer;
this._peers.forEach((peer) =>
{
this._notification(peer.socket, 'lobbyPeerClosed', { peerId });
});
});
this._chatHistory = [];