Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** * Remove User from Room * @param inbound */
- public static void removeUserinroom(String aRoomID,WebSocket conn) {
- // 把離開的邏輯坐在這裡
- // 1. 若是Client離開 -> 則把所有人都踢出此room
- // 2. 若是Agent離開 && 剩餘人數 > 1 -> 自己退出就好
- // 3. 若是Agent離開 && 剩餘人數 == 1 -> 則把所有人都踢出此room
- System.out.println("removeUserinroom(String room,WebSocket conn) called");
- Map<WebSocket, RoomInfo> roommap = roomuserconnections.get(aRoomID);
- // Set<WebSocket> memberConns = roommap.keySet();
- Set<WebSocket> tmpMemberConns = new HashSet(roommap.keySet());
- JSONObject sendJson = new JSONObject();
- sendJson.put("Event", "removeUserinroom");
- sendJson.put("roomID", aRoomID);
- if (roommap != null && roommap.containsKey(conn)) {
- // System.out.println(conn + "'s room is " + " removed");
- String currACType = WebSocketUserPool.getACTypeByKey(conn);
- System.out.println("ACType: " + WebSocketUserPool.getACTypeByKey(conn));
- /** 清除room相關資料 **/
- if ("Client".equals(currACType)){
- System.out.println("Client 全清");
- //全清:
- for (WebSocket memberConn: tmpMemberConns){
- WebSocketUserPool.removeUserRoom(memberConn);
- }
- roommap.clear();
- sendJson.put("result", WebSocketUserPool.getUserNameByKey(conn) + " closed the room" + aRoomID);
- // 之後可將一二條件式合併:
- }else if (roommap.size() == 2){
- System.out.println("roommap.size() == 2 全清");
- //也全清:
- for (WebSocket memberConn: tmpMemberConns){
- WebSocketUserPool.removeUserRoom(memberConn);
- }
- roommap.clear();
- sendJson.put("result", WebSocketUserPool.getUserNameByKey(conn) + " closed the room" + aRoomID);
- }else if (roommap.size() > 2){
- System.out.println("roommap.size() > 2 清自己");
- //清Agent自己
- WebSocketUserPool.removeUserRoom(conn);
- roommap.remove(conn);
- sendJson.put("result", WebSocketUserPool.getUserNameByKey(conn) + " left the room" + aRoomID);
- }
- System.out.println("roomId: " + aRoomID + " size: " + roommap.size());
- sendJson.put("roomMembers", WebSocketRoomPool.getOnlineUserinroom(aRoomID).toString());
- /** 告知所有成員有人離開room,請更新前端頁面 **/
- for (WebSocket memberConn: tmpMemberConns){
- // 若是Logout()觸發的,則跳過
- if (memberConn.isClosed() || memberConn.isClosing()){
- continue;
- }
- WebSocketUserPool.sendMessageToUser(memberConn, sendJson.toString());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement