Sfoglia il codice sorgente

Started with the Station constructor.

KrisVos130 8 anni fa
parent
commit
504eb7756e
1 ha cambiato i file con 146 aggiunte e 0 eliminazioni
  1. 146 0
      logic/coreHandler.js

+ 146 - 0
logic/coreHandler.js

@@ -16,6 +16,152 @@ const utils = require('./utils');
 
 var dbConnection = null;
 
+
+// station stuff
+var stations = [];
+
+//TODO Find better name for this (createStation will be to add a station to the db)
+function makeStation(id) {
+	if (!getStation(id)) {
+		var station = new Station(id);
+		stations.push(station);
+		return station;
+	} else {
+		return false;
+	}
+}
+
+function getStation(id) {
+	stations.forEach(function(station) {
+		this.station = station;
+	});
+	return this.station;
+}
+
+function Station(id) {
+	//TODO Add startedAt and timePaused
+	var self = this;
+	var playlist = [
+		{
+			mid: "3498fd83",
+			duration: 20000,
+			title: "Test1"
+		},
+		{
+			mid: "3498fd83434",
+			duration: 10000,
+			title: "Test2"
+		}
+	];//TODO Get this from RethinkDB
+	var currentSong = playlist[0];
+	var currentSongIndex = 0;//TODO Get this from RethinkDB
+	var paused = true;//TODO Get this from RethinkDB
+	var locked = false;//TODO Get this from RethinkDB
+	var skipVotes = [];
+	var timer;
+
+	this.skipSong = function() {
+		if (playlist.length > 0) {
+			if (timer !== undefined) {
+				timer.pause();
+			}
+			if (currentSongIndex+1 < playlist.length) {
+				currentSongIndex++;
+			} else {
+				currentSongIndex = 0;
+			}
+			skipVotes = 0;
+			currentSong = playlist[currentSongIndex];
+			timer = new Timer(function() {
+				console.log("Skip!");
+				self.skipSong();
+			}, currentSong.duration, paused);
+
+			//io.emit("skipSong " + id, currentSong);
+		}
+	};
+	this.toggleVoteSkip = function(userId) {
+		if (skipVotes.indexOf(userId) === -1) {
+			skipVotes.push(userId);
+		} else {
+			skipVotes = skipVotes.splice(skipVotes.indexOf(userId), 1);
+		}
+		//TODO Calculate if enough people voted to skip
+		//TODO Emit
+	};
+	this.retrievePlaylist = function() {
+		//TODO Use Rethink to get the Playlist for this room
+	};
+	this.pause = function() {
+		if (!paused) {
+			paused = true;
+			timer.pause();
+		}
+		//TODO Emit
+	};
+	this.unpause = function() {
+		if (paused) {
+			paused = false;
+			timer.resume();
+		}
+		//TODO Emit
+	};
+	this.isPaused = function() {
+		return paused;
+	};
+	this.getCurrentSong = function() {
+		return currentSong;
+	};
+	this.lock = function() {
+		if (!locked) {
+			locked = true;
+		}
+		//TODO Emit
+	};
+	this.unlock = function() {
+		if (locked) {
+			locked = false;
+		}
+		//TODO Emit
+	};
+	this.isLocked = function() {
+		return locked;
+	};
+	this.skipSong();
+}
+
+function Timer(callback, delay, paused) {
+	var timerId, start, remaining = delay;
+	var timeWhenPaused = 0;
+	var timePaused = Date.now();
+
+	this.pause = function () {
+		clearTimeout(timerId);
+		remaining -= Date.now() - start;
+		timePaused = Date.now();
+	};
+
+	this.resume = function () {
+		start = Date.now();
+		clearTimeout(timerId);
+		timerId = setTimeout(callback, remaining);
+		timeWhenPaused += Date.now() - timePaused;
+	};
+
+	this.resetTimeWhenPaused = function() {
+		timeWhenPaused = 0;
+	};
+
+	this.timeWhenPaused = function () {
+		return timeWhenPaused;
+	};
+
+	if (paused === false) {
+		this.resume();
+	}
+}
+
+
 module.exports = {
 
 	setup: function (dbConn) {