Explorar o código

Added per station user count.

KrisVos130 %!s(int64=9) %!d(string=hai) anos
pai
achega
85e97f7aef
Modificáronse 3 ficheiros con 50 adicións e 4 borrados
  1. 6 0
      app/client/client.js
  2. 1 1
      app/client/templates/room.html
  3. 43 3
      app/server/server.js

+ 6 - 0
app/client/client.js

@@ -587,6 +587,11 @@ Template.room.helpers({
         var id = parts.pop().toLowerCase();
         return Rooms.findOne({type: id}).display;
     },
+    users: function() {
+        var parts = location.href.split('/');
+        var id = parts.pop().toLowerCase();
+        return Rooms.findOne({type: id}).users;
+    },
     title: function(){
         return Session.get("title");
     },
@@ -1057,6 +1062,7 @@ Template.room.onCreated(function () {
         if (Rooms.find({type: type}).count() !== 1) {
             window.location = "/";
         } else {
+            Meteor.subscribe(type);
             Session.set("loaded", true);
             minterval = Meteor.setInterval(function () {
                 var room = Rooms.findOne({type: type});

+ 1 - 1
app/client/templates/room.html

@@ -18,7 +18,7 @@
                         </div>
 
                         <h3 id="room-header">
-                            {{{type}}}
+                            {{{type}}} <span title="People in this station">({{{users}}})</span>
                         </h3>
                         <div id="volume-container">
                             <i class="fa fa-volume-down" id="volume-icon"></i>

+ 43 - 3
app/server/server.js

@@ -26,6 +26,39 @@ function createUniqueSongId() {
     }
 }
 
+function checkUsersPR() {
+    var output = {};
+
+    var connections = Meteor.server.stream_server.open_sockets;
+    _.each(connections,function(connection){
+        // named subscriptions
+        var subs = connection._meteorSession._namedSubs;
+        //var ip = connection.remoteAddress;
+        for(var sub in subs){
+            var mySubName = subs[sub]._name;
+
+            if(subs[sub]._params.length>0){
+                mySubName += subs[sub]._params[0];  // assume one id parameter for now
+            }
+
+            if(!output[mySubName]){
+                output[mySubName] = 1;
+            }else{
+                output[mySubName] += 1;
+            }
+        }
+        // there are also these 'universal subscriptions'
+        //not sure what these are, i count none in my tests
+        //var usubs = connection._meteorSession._universalSubs;
+    });
+    for (var key in output) {
+        getStation(key, function() {
+            Rooms.update({type: key}, {$set: {users: output[key]}});
+        });
+    }
+    return output;
+}
+
 function getStation(type, cb) {
     stations.forEach(function(station) {
         if (station.type === type) {
@@ -38,7 +71,7 @@ function getStation(type, cb) {
 function createRoom(display, tag) {
     var type = tag;
     if (Rooms.find({type: type}).count() === 0) {
-        Rooms.insert({display: display, type: type}, function(err) {
+        Rooms.insert({display: display, type: type, users: 0}, function(err) {
             if (err) {
                 throw err;
             } else {
@@ -61,6 +94,9 @@ function createRoom(display, tag) {
 }
 
 function Station(type) {
+    Meteor.publish(type, function() {
+        return undefined;
+    });
     var _this = this;
     var startedAt = Date.now();
     var playlist = Playlists.findOne({type: type});
@@ -77,7 +113,7 @@ function Station(type) {
     } else currentSong = 0;
     var currentTitle = songs[currentSong].title;
 
-    Rooms.update({type: type}, {$set: {currentSong: {song: songs[currentSong], started: startedAt}}});
+    Rooms.update({type: type}, {$set: {currentSong: {song: songs[currentSong], started: startedAt}, users: 0}});
 
     this.skipSong = function() {
         songs = Playlists.findOne({type: type}).songs;
@@ -644,4 +680,8 @@ Meteor.methods({
     getUserNum: function(){
         return Object.keys(Meteor.default_server.sessions).length;
     }
-});
+});
+
+Meteor.setInterval(function() {
+    checkUsersPR();
+}, 10000);