| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | 'use strict';const global = require('./global');let io = global.io;module.exports = class Station {	constructor(id, data) {		this.nsp = io.of('/' + id);		this.nsp.on('connection', socket => {			console.info('someone connected');		});		this.id = id;		this.data = data;		this.playlist = data.playlist;		this.currentSong = this.playlist[0];		this.currentSongIndex = data.currentSongIndex;		this.paused = data.paused;		this.locked = data.locked;		this.skipVotes = data.skipVotes;		this.users = data.users;		this.displayName = data.displayName;		this.description = data.description;		this.timer = undefined;	}	skipSong() {		if (this.playlist.length > 0) {			if (this.timer !== undefined) this.timer.pause();			if (this.currentSongIndex+1 < this.playlist.length) this.currentSongIndex++;			else this.currentSongIndex = 0;			this.skipVotes = 0;			this.currentSong = this.playlist[this.currentSongIndex];			this.timer = new global.Timer(() => {				console.log("Skip!");				self.skipSong();			}, this.currentSong.duration, this.paused);			nsp.emit("skippedSong", this.currentSong);		}	}	toggleVoteSkip(userId) {		if (this.skipVotes.indexOf(userId) === -1) this.skipVotes.push(userId);		else this.skipVotes = this.skipVotes.splice(this.skipVotes.indexOf(userId), 1);		// TODO: Calculate if enough people voted to skip		nsp.emit("voteSkip", this.skipVotes);	}	retrievePlaylist() {		// TODO: get the Playlist for this station using db	}	pause() {		if (!this.paused) {			this.paused = true;			this.timer.pause();			nsp.emit("pause");		}	}	unPause() {		if (this.paused) {			this.paused = false;			this.timer.resume();			nsp.emit("unpause");		}	}	isPaused() {		return this.paused;	}	getCurrentSong() {		return this.currentSong;	}	lock() {		if (!this.locked) {			this.locked = true;			nsp.emit("lock");		}	}	unlock() {		if (this.locked) {			this.locked = false;			nsp.emit("unlocked");		}	}	isLocked() {		return this.locked;	}	updateDisplayName(newDisplayName) {		// TODO: Update db		this.displayName = newDisplayName;		nsp.emit("updateDisplayName", newDisplayName);	}	updateDescription(newDescription) {		// TODO: Update db		this.description = newDescription;		nsp.emit("updateDescription", newDescription);	}	getId() {		return this.id;	}	getDisplayName() {		return this.displayName;	}	getDescription() {		return this.description;	}	addUser(user) {		this.users.add(user);		nsp.emit("updateUsers", this.users);	}	removeUser(user) {		this.users.splice(this.users.indexOf(user), 1);		nsp.emit("updateUsers", this.users);	}	getUsers() {		return this.users;	}}
 |