export class RoomController{ /* (1) Construct default attributes * ---------------------------------------------------------*/ constructor(){ /* (1) Init available @room sets */ this.text = { list: [], current: 0, visible: true }; this.voice = { list: [], current: null, visible: true }; } /* (2) room navigation * * @type room type * @id room ID (NULL uses get()) * * @return status Whether the navigation has been successful * ---------------------------------------------------------*/ nav(type=null, id=null){ console.log(`room.nav(${type}, ${id})`); /* (1) Try to get current room from id */ let room = this.get(type, id); /* (2) Manage invalid room */ if( room == null ) return false; /* (3) Close last room */ /* (4) Open new room */ /* (5) Update @active room */ this[type].current = room.id; console.log(`[room.${type}.opened] ${room.name} (${room.id})`, room.id); return true; } /* (3) Dump/Update room data (raw format -> tree structure) * * @rooms rooms data (raw format) * * {raw_format} * [ * { rid: , type: 'text', name: } * { rid: , type: 'voice', name: } * { rid: , type: 'video', name: } * ] * * @return udpated Whether rooms have been updated * ---------------------------------------------------------*/ dump(rooms){ console.log(`room.dump([${rooms instanceof Array?rooms.length:0}])`); /* (1) Check @rooms type */ if( !(rooms instanceof Array) ) return false; /* (2) Clear data */ for( let type in this ){ this[type].list = []; this[type].current = null; } /* (3) Browse each room */ for(let r of rooms){ // {1} Ignore: if not object // if( typeof r !== 'object' ) continue; // {2} Ignore: if missing field // if( isNaN(r.rid) || typeof r.type !== 'string' || typeof r.name !== 'string' ) continue; // {3} Ignore: not available type // if( this[r.type] == null ) continue; this[r.type].list.push({ id: r.rid, name: r.name, type: r.type }); } return true; } /* (4) Get room data * * @type room type * @id room ID * NULL: current room || from URL (and set current) * * @return room room data * ---------------------------------------------------------*/ get(type=null, id=null){ console.log(`room.get(${type}, ${id})`); /* (1) Manage invalid @type */ if( typeof type !== 'string' || this[type] == null ) return null; /* (1) Get @current room: if id is null ---------------------------------------------------------*/ if( id === null ){ /* (1) If @current is set */ if( !isNaN(this[type].current) ){ /* (2) Return matching id in list */ for( let r of this[type].list ){ if( r.id === this[type].current ) return r; // exit point } } } /* (2) Get room data ---------------------------------------------------------*/ /* (1) Return room matching id */ for( let r of this[type].list ) if( r.id === id ) return r; // exit point /* (2) Return default: if ID not found */ this[type].current = null; return null; } /* (5) Create a new room * * @type room type * @name room name * * @return created Whether the room has been created * ---------------------------------------------------------*/ create(type=null, name=null){ /* (1) Manage invalid @type */ if( typeof type !== 'string' || this[type] == null ) return false; /* (2) Manage invalid @name */ if( typeof name !== 'string' ) return false; /* (3) Try to create room in API */ console.log(`POST /channel/${gs.get.content.cid}/room/${type}`); /* (4) Add room -> update VueJS */ return true; } }