From 871a877a2dd2f1ef2b93ff0aaa245bb70cd2edd7 Mon Sep 17 00:00:00 2001 From: 1004268 <isaac.pedrozaaguirre@student.unimelb.edu.au> Date: Fri, 25 Oct 2019 17:22:49 +1100 Subject: [PATCH] Kick out bug fixed --- .idea/workspace.xml | 27 ++---------------- .../server/ClientController$1.class | Bin 760 -> 760 bytes .../server/ClientController.class | Bin 7386 -> 7222 bytes src/GUI/StartScreen.java | 2 +- src/server/ClientController.java | 14 ++------- 5 files changed, 6 insertions(+), 37 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index eac82f0..eea1bb1 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -3,33 +3,10 @@ <component name="ChangeListManager"> <list default="true" id="688d774d-cfc7-4b0d-b00c-5ca931aba600" name="Default Changelist" comment=""> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/infinitymonkeys.iml" beforeDir="false" afterPath="$PROJECT_DIR$/infinitymonkeys.iml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ChatScreen$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ChatScreen$1.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ChatScreen.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ChatScreen.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/DrawingArea$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/DrawingArea$1.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/DrawingArea.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/DrawingArea.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI$1.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI$2.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI$2.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen$2.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen$2.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen$3.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen$3.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/icon/circle.png" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/icon/eraser.png" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/icon/freehand.png" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/icon/line.png" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/icon/oval.png" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/icon/palette.png" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/icon/rectangle.png" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/icon/square.png" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/icon/text.png" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/client/Client.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/client/Client.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IClientController$Action.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IClientController$Action.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IClientController.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IClientController.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ClientController$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ClientController$1.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ClientController.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ClientController.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/DrawingController.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/DrawingController.class" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/Server.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/Server.class" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/GUI/StartScreen.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/GUI/StartScreen.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/server/ClientController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/ClientController.java" afterDir="false" /> </list> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="SHOW_DIALOG" value="false" /> diff --git a/out/production/infinitymonkeys/server/ClientController$1.class b/out/production/infinitymonkeys/server/ClientController$1.class index f56dee556cd1afa4cdad86b433453fc0840c104a..1d2a2d641a54e21f04f273f959e20c26138470ac 100644 GIT binary patch delta 13 Vcmeyt`h#`DMkdA$lQ%KB0RStb1)Kl? delta 13 Vcmeyt`h#`DMkdA`lQ%KB0RSt@1*8A~ diff --git a/out/production/infinitymonkeys/server/ClientController.class b/out/production/infinitymonkeys/server/ClientController.class index aec78e2bf5377bf31465932ac0c06d52b367db19..1137f97e87947c41a2ef634c061af3ee2d307002 100644 GIT binary patch delta 3106 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 a%nY8O#)SX}Ll1*HL$8A*!)AuHAQ}K;xjnJ~ delta 3240 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 a%nV+j){6iKLmz_&L%)M0!&Zj%AQ}K)EM?XJ diff --git a/src/GUI/StartScreen.java b/src/GUI/StartScreen.java index f0af621..6c1bb87 100644 --- a/src/GUI/StartScreen.java +++ b/src/GUI/StartScreen.java @@ -178,7 +178,7 @@ public class StartScreen { public void showKickOutMessage() { JOptionPane.showMessageDialog(null, - "The manager kicked you out the whiteboard", "Kicked out", + "The manager kicked you out of the whiteboard", "Kicked out", JOptionPane.ERROR_MESSAGE); } diff --git a/src/server/ClientController.java b/src/server/ClientController.java index b7cb056..5e26b19 100644 --- a/src/server/ClientController.java +++ b/src/server/ClientController.java @@ -111,17 +111,9 @@ public class ClientController extends UnicastRemoteObject implements IClientCont if ( adminIndex >= 0 && userIndex >= 0 && server.users.get(adminIndex).isAdmin() ) { - - try - { - server.users.get(userIndex).getIClientUpdate().terminateChat(); - } - finally { - server.users.remove(userIndex); - broadcastUserList(); - broadcastManagerMessage(kickedUser, Action.KICKOUT); - } - + broadcastManagerMessage(kickedUser, Action.KICKOUT); + server.users.remove(userIndex); + broadcastUserList(); return true; } -- GitLab