Users blocking now rely on UUID rather than ID
This way, if a user A blocks another user B, if user B refreshes the browser or leaves and re-enters the room, user B will still be blocked. As a side effect, this allows us to completely remove the "sockets" property in the SocketManager on the Pusher.
This commit is contained in:
parent
28e4f59e50
commit
34cb0ebf39
15 changed files with 143 additions and 141 deletions
|
@ -39,6 +39,7 @@ export type LeavesCallback = (thing: Movable, listener: User) => void;*/
|
|||
export class UserDescriptor {
|
||||
private constructor(
|
||||
public readonly userId: number,
|
||||
private userUuid: string,
|
||||
private name: string,
|
||||
private characterLayers: CharacterLayerMessage[],
|
||||
private position: PositionMessage,
|
||||
|
@ -57,6 +58,7 @@ export class UserDescriptor {
|
|||
}
|
||||
return new UserDescriptor(
|
||||
message.getUserid(),
|
||||
message.getUseruuid(),
|
||||
message.getName(),
|
||||
message.getCharacterlayersList(),
|
||||
position,
|
||||
|
@ -84,6 +86,7 @@ export class UserDescriptor {
|
|||
userJoinedMessage.setVisitcardurl(this.visitCardUrl);
|
||||
}
|
||||
userJoinedMessage.setCompanion(this.companion);
|
||||
userJoinedMessage.setUseruuid(this.userUuid);
|
||||
|
||||
return userJoinedMessage;
|
||||
}
|
||||
|
|
|
@ -61,7 +61,6 @@ export interface AdminSocketData {
|
|||
|
||||
export class SocketManager implements ZoneEventListener {
|
||||
private rooms: Map<string, PusherRoom> = new Map<string, PusherRoom>();
|
||||
private sockets: Map<number, ExSocketInterface> = new Map<number, ExSocketInterface>();
|
||||
|
||||
constructor() {
|
||||
clientEventsEmitter.registerToClientJoin((clientUUid: string, roomId: string) => {
|
||||
|
@ -191,8 +190,6 @@ export class SocketManager implements ZoneEventListener {
|
|||
.on("data", (message: ServerToClientMessage) => {
|
||||
if (message.hasRoomjoinedmessage()) {
|
||||
client.userId = (message.getRoomjoinedmessage() as RoomJoinedMessage).getCurrentuserid();
|
||||
// TODO: do we need this.sockets anymore?
|
||||
this.sockets.set(client.userId, client);
|
||||
|
||||
// If this is the first message sent, send back the viewport.
|
||||
this.handleViewport(client, viewport);
|
||||
|
@ -302,14 +299,8 @@ export class SocketManager implements ZoneEventListener {
|
|||
|
||||
async handleReportMessage(client: ExSocketInterface, reportPlayerMessage: ReportPlayerMessage) {
|
||||
try {
|
||||
const reportedSocket = this.sockets.get(reportPlayerMessage.getReporteduserid());
|
||||
if (!reportedSocket) {
|
||||
throw "reported socket user not found";
|
||||
}
|
||||
//TODO report user on admin application
|
||||
//todo: move to back because this fail if the reported player is in another pusher.
|
||||
await adminApi.reportPlayer(
|
||||
reportedSocket.userUuid,
|
||||
reportPlayerMessage.getReporteduseruuid(),
|
||||
reportPlayerMessage.getReportcomment(),
|
||||
client.userUuid,
|
||||
client.roomId.split("/")[2]
|
||||
|
@ -334,14 +325,6 @@ export class SocketManager implements ZoneEventListener {
|
|||
socket.backConnection.write(pusherToBackMessage);
|
||||
}
|
||||
|
||||
private searchClientByIdOrFail(userId: number): ExSocketInterface {
|
||||
const client: ExSocketInterface | undefined = this.sockets.get(userId);
|
||||
if (client === undefined) {
|
||||
throw new Error("Could not find user with id " + userId);
|
||||
}
|
||||
return client;
|
||||
}
|
||||
|
||||
leaveRoom(socket: ExSocketInterface) {
|
||||
// leave previous room and world
|
||||
try {
|
||||
|
@ -364,9 +347,8 @@ export class SocketManager implements ZoneEventListener {
|
|||
//Client.leave(Client.roomId);
|
||||
} finally {
|
||||
//delete Client.roomId;
|
||||
this.sockets.delete(socket.userId);
|
||||
clientEventsEmitter.emitClientLeave(socket.userUuid, socket.roomId);
|
||||
console.log("A user left (", this.sockets.size, " connected users)");
|
||||
console.log("A user left");
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
|
@ -410,15 +392,6 @@ export class SocketManager implements ZoneEventListener {
|
|||
return this.rooms;
|
||||
}
|
||||
|
||||
searchClientByUuid(uuid: string): ExSocketInterface | null {
|
||||
for (const socket of this.sockets.values()) {
|
||||
if (socket.userUuid === uuid) {
|
||||
return socket;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public handleQueryJitsiJwtMessage(client: ExSocketInterface, queryJitsiJwtMessage: QueryJitsiJwtMessage) {
|
||||
try {
|
||||
const room = queryJitsiJwtMessage.getJitsiroom();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue