Improve follow abort message; avoid having to change it in backend

This commit is contained in:
PizZaKatZe 2021-12-14 01:35:00 +01:00
parent c2f5501236
commit 7bff782f7f
4 changed files with 28 additions and 32 deletions

View file

@ -853,28 +853,23 @@ export class SocketManager {
} }
handleFollowAbortMessage(room: GameRoom, user: User, message: FollowAbortMessage) { handleFollowAbortMessage(room: GameRoom, user: User, message: FollowAbortMessage) {
if (message.getRole() === "leader") { const clientMessage = new ServerToClientMessage();
clientMessage.setFollowabortmessage(message);
if (user.name === message.getLeader()) {
// Forward message // Forward message
const clientMessage = new ServerToClientMessage();
clientMessage.setFollowabortmessage(message);
room.sendToOthersInGroupIncludingUser(user, clientMessage); room.sendToOthersInGroupIncludingUser(user, clientMessage);
// Update followers // Update followers
room.getGroupIncludingUser(user) const group = room.getGroupIncludingUser(user);
?.getUsers() group?.getUsers().forEach((user) => {
.forEach((user) => { user.following = [];
user.following = []; });
});
} else { } else {
// Forward message // Forward message
const recipient = message.getPlayername(); room.sendToUserWithName(message.getLeader(), clientMessage);
message.setPlayername(user.name);
const clientMessage = new ServerToClientMessage();
clientMessage.setFollowabortmessage(message);
room.sendToUserWithName(recipient, clientMessage);
// Update followers // Update followers
room.getUserByName(recipient)?.delFollower(user.name); room.getUserByName(message.getLeader())?.delFollower(user.name);
user.following = []; user.following = [];
} }
} }

View file

@ -67,9 +67,9 @@ vim: ft=typescript
function reset() { function reset() {
if (followRole === followRoles.leader && followUsers.length > 0) { if (followRole === followRoles.leader && followUsers.length > 0) {
gameScene.connection?.emitFollowAbort(followRole, gameManager.getPlayerName()); gameScene.connection?.emitFollowAbort(gameManager.getPlayerName(), "*");
} else { } else {
gameScene.connection?.emitFollowAbort(followRole, followUsers[0]); gameScene.connection?.emitFollowAbort(followUsers[0], gameManager.getPlayerName());
} }
followStateStore.set(followStates.off); followStateStore.set(followStates.off);
followRoleStore.set(followRoles.leader); followRoleStore.set(followRoles.leader);

View file

@ -270,26 +270,27 @@ export class RoomConnection implements RoomConnection {
//todo: implement a way to notify the user the room was refreshed. //todo: implement a way to notify the user the room was refreshed.
} else if (message.hasFollowrequestmessage()) { } else if (message.hasFollowrequestmessage()) {
const requestMessage = message.getFollowrequestmessage() as FollowRequestMessage; const requestMessage = message.getFollowrequestmessage() as FollowRequestMessage;
console.log("Got follow request from " + requestMessage.getPlayername()); console.log("Got follow request from " + requestMessage.getLeader());
followStateStore.set(followStates.requesting); followStateStore.set(followStates.requesting);
followRoleStore.set(followRoles.follower); followRoleStore.set(followRoles.follower);
followUsersStore.set([requestMessage.getPlayername()]); followUsersStore.set([requestMessage.getLeader()]);
} else if (message.hasFollowconfirmationmessage()) { } else if (message.hasFollowconfirmationmessage()) {
const responseMessage = message.getFollowconfirmationmessage() as FollowConfirmationMessage; const responseMessage = message.getFollowconfirmationmessage() as FollowConfirmationMessage;
console.log("Got follow response from " + responseMessage.getFollower()); console.log("Got follow response from " + responseMessage.getFollower());
followUsersStore.set([...get(followUsersStore), responseMessage.getFollower()]); followUsersStore.set([...get(followUsersStore), responseMessage.getFollower()]);
} else if (message.hasFollowabortmessage()) { } else if (message.hasFollowabortmessage()) {
const abortMessage = message.getFollowabortmessage() as FollowAbortMessage; const abortMessage = message.getFollowabortmessage() as FollowAbortMessage;
console.log("Got follow abort message from", abortMessage.getRole()); console.log("Got follow abort message");
if (abortMessage.getRole() === followRoles.leader) { if (get(followRoleStore) === followRoles.follower) {
followStateStore.set(followStates.off); followStateStore.set(followStates.off);
followRoleStore.set(followRoles.leader); followRoleStore.set(followRoles.leader);
followUsersStore.set([]); followUsersStore.set([]);
} else { } else {
let followers = get(followUsersStore); let followers = get(followUsersStore);
followers = followers.filter((name) => name !== abortMessage.getPlayername()); const oldFollowerCount = followers.length;
followers = followers.filter((name) => name !== abortMessage.getFollower());
followUsersStore.set(followers); followUsersStore.set(followers);
if (followers.length === 0) { if (followers.length === 0 && oldFollowerCount > 0) {
followStateStore.set(followStates.off); followStateStore.set(followStates.off);
followRoleStore.set(followRoles.leader); followRoleStore.set(followRoles.leader);
} }
@ -755,14 +756,14 @@ export class RoomConnection implements RoomConnection {
} }
console.log("Emitting follow request"); console.log("Emitting follow request");
const message = new FollowRequestMessage(); const message = new FollowRequestMessage();
message.setPlayername(user); message.setLeader(user);
const clientToServerMessage = new ClientToServerMessage(); const clientToServerMessage = new ClientToServerMessage();
clientToServerMessage.setFollowrequestmessage(message); clientToServerMessage.setFollowrequestmessage(message);
this.socket.send(clientToServerMessage.serializeBinary().buffer); this.socket.send(clientToServerMessage.serializeBinary().buffer);
} }
public emitFollowConfirmation(leader: string, follower: string | null): void { public emitFollowConfirmation(leader: string | null, follower: string | null): void {
if (!follower) { if (!leader || !follower) {
return; return;
} }
console.log("Emitting follow confirmation"); console.log("Emitting follow confirmation");
@ -774,14 +775,14 @@ export class RoomConnection implements RoomConnection {
this.socket.send(clientToServerMessage.serializeBinary().buffer); this.socket.send(clientToServerMessage.serializeBinary().buffer);
} }
public emitFollowAbort(role: string, user: string | null): void { public emitFollowAbort(leader: string | null, follower: string | null): void {
if (!user) { if (!leader || !follower) {
return; return;
} }
console.log("Emitting follow abort"); console.log("Emitting follow abort");
const message = new FollowAbortMessage(); const message = new FollowAbortMessage();
message.setRole(role); message.setLeader(leader);
message.setPlayername(user); message.setFollower(follower);
const clientToServerMessage = new ClientToServerMessage(); const clientToServerMessage = new ClientToServerMessage();
clientToServerMessage.setFollowabortmessage(message); clientToServerMessage.setFollowabortmessage(message);
this.socket.send(clientToServerMessage.serializeBinary().buffer); this.socket.send(clientToServerMessage.serializeBinary().buffer);

View file

@ -81,7 +81,7 @@ message QueryJitsiJwtMessage {
} }
message FollowRequestMessage { message FollowRequestMessage {
string playerName = 1; string leader = 1;
} }
message FollowConfirmationMessage { message FollowConfirmationMessage {
@ -90,8 +90,8 @@ message FollowConfirmationMessage {
} }
message FollowAbortMessage { message FollowAbortMessage {
string role = 1; string leader = 1;
string playerName = 2; string follower = 2;
} }
message ClientToServerMessage { message ClientToServerMessage {