Skip to content

Commit afcc995

Browse files
committed
Disconnect memberList from the gateway
Introduced in-between MemberGroups which removes the logic from the gateway about the structure of the memberList inside the poker-room. The poker-room has the methods to fill this memberGroup, which is being collected in the PokerService.
1 parent 162a71b commit afcc995

File tree

3 files changed

+62
-10
lines changed

3 files changed

+62
-10
lines changed

backend/src/pokers/poker-room.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,36 @@ export class PokerRoom {
6868
return this.members;
6969
}
7070

71+
/**
72+
* Lists voters in a room.
73+
*
74+
* @returns {Member[]} List of voters.
75+
*/
76+
public getVoters(): Member[] {
77+
return Object.values( this.members )
78+
.filter( ( member: Member ) => member.type === 'voter' && member.connected );
79+
}
80+
81+
/**
82+
* Lists clients in a room.
83+
*
84+
* @returns {Member[]} List of observers.
85+
*/
86+
public getObservers(): Member[] {
87+
return Object.values( this.members )
88+
.filter( ( member: Member ) => member.type === 'observer' && member.connected );
89+
}
90+
91+
/**
92+
* Lists disconnected members in a room.
93+
*
94+
* @returns {Member[]} List of disconnected members.
95+
*/
96+
public getDisconnected(): Member[] {
97+
return Object.values( this.members )
98+
.filter( ( member: Member ) => ! member.connected );
99+
}
100+
71101
/**
72102
* Lists all poker voters.
73103
*

backend/src/pokers/pokers.gateway.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { OnGatewayInit, SubscribeMessage, WebSocketGateway, WebSocketServer } fr
22
// eslint-disable-next-line camelcase
33
import { Server, Socket } from "socket.io";
44
import { PointsService } from "../points/points.service";
5-
import { Member, MemberList, Story, Vote, VoteValue } from "./poker-room";
6-
import { PokersService } from "./pokers.service";
5+
import { Member, Story, Vote, VoteValue } from "./poker-room";
6+
import { PokersService, MemberGroups } from "./pokers.service";
77

88
interface ClientResponse {
99
name: string;
@@ -242,8 +242,8 @@ export class PokersGateway implements OnGatewayInit {
242242
* @private
243243
*/
244244
private sendMembers( room: string ): void {
245-
const clients: MemberList = this.pokersService.getClients( room );
246-
this.server.to( room ).emit( "memberList", this.formatMembersResponse( clients ) );
245+
const memberGroups: MemberGroups = this.pokersService.getMembers( room );
246+
this.server.to( room ).emit( "memberList", this.formatMembersResponse( memberGroups ) );
247247
}
248248

249249
/**
@@ -333,19 +333,19 @@ export class PokersGateway implements OnGatewayInit {
333333
}
334334

335335
/**
336-
* Formats a memberlist for response.
336+
* Formats the members in a room for response.
337337
*
338-
* @param {MemberList} memberList The memberlist.
338+
* @param {MemberGroups} memberGroups The members in their groups.
339339
*
340340
* @returns {MembersResponse} The formatted list.
341341
*/
342-
private formatMembersResponse( memberList: MemberList ): MembersResponse {
342+
private formatMembersResponse( memberGroups: MemberGroups ): MembersResponse {
343343
const mapCallback = this.formatClientResponse;
344344

345345
return {
346-
voters: Object.values( memberList ).filter( member => member.type === "voter" && member.connected ).map( mapCallback ),
347-
observers: Object.values( memberList ).filter( member => member.type === "observer" && member.connected ).map( mapCallback ),
348-
disconnected: Object.values( memberList ).filter( member => ! member.connected ).map( mapCallback ),
346+
voters: memberGroups.voters.map( mapCallback ),
347+
observers: memberGroups.observers.map( mapCallback ),
348+
disconnected: memberGroups.disconnected.map( mapCallback ),
349349
};
350350
}
351351

backend/src/pokers/pokers.service.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ export interface Users {
1717
[ socketId: string ]: string;
1818
}
1919

20+
export interface MemberGroups {
21+
voters: Member[];
22+
observers: Member[];
23+
disconnected: Member[];
24+
}
25+
2026
@Injectable()
2127
/**
2228
* The Pokers service.
@@ -240,6 +246,22 @@ export class PokersService {
240246
return this.getRoom( poker ).getClients();
241247
}
242248

249+
/**
250+
* Retrieves all members.
251+
*
252+
* @param {string} poker The poker.
253+
*
254+
* @returns {MemberList} All clients in a room.
255+
*/
256+
public getMembers( poker: string ): MemberGroups {
257+
const room = this.getRoom( poker );
258+
return {
259+
voters: room.getVoters(),
260+
observers: room.getObservers(),
261+
disconnected: room.getDisconnected()
262+
};
263+
}
264+
243265
/**
244266
* Retrieves all names of voted voters.
245267
*

0 commit comments

Comments
 (0)