-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathRoomContainer.mjs
59 lines (56 loc) · 2.06 KB
/
RoomContainer.mjs
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
import Room from './Room.mjs'
import StreamingRoom from './StreamingRoom.mjs'
import ConferentRoom from './ConferentRoom.mjs'
import SurvillianceRoom from './SurvillianceRoom.mjs'
import Predicate from './Predicate.mjs'
export default class RoomContainer{
constructor(server) {
this.rooms = {}
this.oncollect = (predicate)=>{
return Object.values(this.rooms).filter(predicate)
}
}
where(options){
let filtered = []
if(Object.keys(options).length == 0){
return Object.values(this.rooms)
}
let predicate = new Predicate(this.oncollect)
predicate.initialize(Object.values(options)[0],Object.keys(options)[0])
return predicate
}
whereTopic(topic){
let topics = topic.split(" ")
let filtered = []
let predicate = null
for(let topic of topics){
if(predicate)
predicate.or({topics: topic})
else{
predicate = this.where({topics:topic})
}
}
return predicate
}
addRoom(roomObj){
switch(roomObj.type){
case 'conferent':
this.rooms[roomObj.channel] =
new ConferentRoom(roomObj.name,{audio: roomObj.audio, video: roomObj.video, screen: roomObj.screen} ,roomObj.owner,roomObj.channel, roomObj.broadcasters, roomObj.io)
break;
case 'streaming':
this.rooms[roomObj.channel] = new StreamingRoom(roomObj.name,roomObj.owner,roomObj.channel,roomObj.io,{max_topics: roomObj.max_topics, tick: roomObj.tick})
break;
case 'surveillance':
this.rooms[roomObj.channel] = new SurvillianceRoom(roomObj.name,roomObj.owner,roomObj.channel,roomObj.io)
break;
}
return this.rooms[roomObj.channel]
}
getRoom(id){
if(this.rooms[id]){
this.rooms[id].id = id
return this.rooms[id]
};
}
}