First working version of lobby.
This commit is contained in:
+53
-2
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 = [];
|
||||
|
||||
Reference in New Issue
Block a user