-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRoomManager.java
executable file
·126 lines (105 loc) · 3.03 KB
/
RoomManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package myServer2;
/*
* AUTHOR : Min Gao
* Project1-Multi-Server Chat System
*/
import java.util.ArrayList;
public class RoomManager {
private static RoomManager instance;
private ArrayList<Room> localRoomList;
private ArrayList<String> lockRoomidList;
private ArrayList<Room> otherRoomList;
private RoomManager() {
this.localRoomList = new ArrayList<>();
this.lockRoomidList = new ArrayList<>();
this.otherRoomList = new ArrayList<>();
}
public synchronized static RoomManager getInstance() {
if(instance == null) {
instance = new RoomManager();
}
return instance;
}
public Room getLocalRoom(String roomid) {
for (Room room : localRoomList) {
if (room.getRoomid().equals(roomid)) {
return room;
}
}
return null;
}
public Room getRemoteRoom(String roomid) {
for (Room room : otherRoomList) {
if (room.getRoomid().equals(roomid)) {
return room;
}
}
return null;
}
//also can use synchronized(lockRoomidList)
public synchronized void lockRoom(String roomid) {
lockRoomidList.add(roomid);
}
public synchronized void releaseLockRoom(String roomid) {
lockRoomidList.remove(roomid);
}
public synchronized void addOtherServerRoom(String roomid, String serverid) {
otherRoomList.add(new Room(roomid,serverid));
}
public synchronized void removeOtherServerRoom(String roomid) {
Room room = getRemoteRoom(roomid);
otherRoomList.remove(room);
}
public synchronized void joinRoom(String clientid, String preRoomid, String roomid) {
if (!preRoomid.equals("")) {
Room preRoom = getLocalRoom(preRoomid);
preRoom.removeClient(clientid);
}
Room room = getLocalRoom(roomid);
room.addClient(clientid);
}
public synchronized void quitRoom(String clientid, String roomid) {
Room room = getLocalRoom(roomid);
room.removeClient(clientid);
}
public synchronized void createRoom(String roomid, String roomOwner, String roomServerid) {
Room room = new Room(roomid, roomOwner, roomServerid);
localRoomList.add(room);
}
public synchronized void deleteRoom(String roomid) {
Room room = getLocalRoom(roomid);
localRoomList.remove(room);
}
//localRoomList and lockRoomidList [s]
public synchronized boolean isRoomExist(String roomid) {
if (lockRoomidList.contains(roomid)) {
return true;
}
if (getLocalRoom(roomid) != null) {
return true;
}
return false;
}
public synchronized boolean isLocalRoomExist(String roomid) {
if (getLocalRoom(roomid) != null) {
return true;
}
return false;
}
public synchronized boolean isRemoteRoomExist(String roomid) {
if (getRemoteRoom(roomid) != null) {
return true;
}
return false;
}
public synchronized ArrayList<String> getAllRoom() {
ArrayList<Room> allRoom = new ArrayList<>();
allRoom.addAll(localRoomList);
allRoom.addAll(otherRoomList);
ArrayList<String> allRoomid = new ArrayList<>();
for (Room room : allRoom) {
allRoomid.add(room.getRoomid());
}
return allRoomid;
}
}