/app.js

https://github.com/jzarka/sgbusmap · JavaScript · 152 lines · 90 code · 33 blank · 29 comment · 3 complexity · 93979a9595c0424662eea92570eca906 MD5 · raw file

  1. /**
  2. * Module dependencies.
  3. */
  4. var express = require('express');
  5. var app = module.exports = express.createServer();
  6. var io = require('socket.io').listen(app);
  7. var _ = require('underscore')._,
  8. backbone = require('backbone');
  9. var BusStopModel = backbone.Model.extend({
  10. initialize: function(){
  11. console.log("BusStop initialised!");
  12. }
  13. });
  14. var BusStopModelManager = backbone.Collection.extend({
  15. model: BusStopModel
  16. });
  17. var busStopModelManager = new BusStopModelManager();
  18. var numberOfBusStopsWithTime = 0;
  19. /*
  20. busStopModelManager.bind('add', function(model) {
  21. console.log('bus mode added...');
  22. })
  23. */
  24. //console.log(_);
  25. //console.log(backbone);
  26. /**
  27. * Custom modules.
  28. */
  29. var DbProvider = require('./db-provider').DbProvider;
  30. var dbProvider = new DbProvider();
  31. var TimeProvider = require('./time-provider').TimeProvider;
  32. var timeProvider = new TimeProvider();
  33. // Configuration
  34. app.configure(function(){
  35. app.set('views', __dirname + '/views');
  36. app.set('view engine', 'jade');
  37. app.use(express.bodyParser());
  38. app.use(express.methodOverride());
  39. app.use(app.router);
  40. app.use(express.static(__dirname + '/public'));
  41. });
  42. app.configure('development', function(){
  43. app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
  44. });
  45. app.configure('production', function(){
  46. app.use(express.errorHandler());
  47. });
  48. // Routes
  49. app.get('/', function(req, res){
  50. res.render('index', {
  51. title: 'Express',
  52. value: 'VALLL'
  53. });
  54. });
  55. app.post('/route', function(req, res){
  56. res.render('index', {
  57. title: 'Express',
  58. value: 'VALLL'
  59. });
  60. });
  61. app.listen(3000);
  62. console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
  63. var all_bus_stops = {};
  64. io.sockets.on('connection', function (socket) {
  65. socket.on('request_time', function(data) {
  66. for (var i = 0; i < all_bus_stops[data.selected_bus][data.selected_dest].length; i++) {
  67. var real_stop_id = all_bus_stops[data.selected_bus][data.selected_dest][i].real_stop_id;
  68. timeProvider.requestTimeForBusStop(data.selected_bus, real_stop_id, function(bus_time) {
  69. // socket.emit('bus_stop_time', {bus_stop_time: bus_time});
  70. console.log('setting time...');
  71. busStopModelManager.getByCid(bus_time.real_stop_id).set({time: bus_time.results[0].nextbus.t});
  72. numberOfBusStopsWithTime++;
  73. if (numberOfBusStopsWithTime == busStopModelManager.length) {
  74. console.log("all bus times");
  75. numberOfBusStopsWithTime = 0;
  76. socket.emit('busStopModelManagerWithTime', {busModelManager: busStopModelManager});
  77. }
  78. });
  79. }
  80. });
  81. socket.on('destination_selected', function (data) {
  82. dbProvider.realStopIdFromServiceAndDirection(data.selected_bus, parseInt(data.selected_dest), function(bus_stops) {
  83. var bus_stops_per_destination = {};
  84. bus_stops_per_destination[data.selected_dest] = bus_stops;
  85. all_bus_stops[data.selected_bus] = bus_stops_per_destination;
  86. dbProvider.latLongFromRealStopIds(bus_stops, function(bus_stop_lat_long) {
  87. var busStopModel = new BusStopModel({
  88. real_stop_id: bus_stop_lat_long.real_stop_id,
  89. stop_name: bus_stop_lat_long.stop_name,
  90. latitude: bus_stop_lat_long.latitude,
  91. longitude: bus_stop_lat_long.longitude
  92. });
  93. busStopModel.cid = bus_stop_lat_long.real_stop_id;
  94. /*
  95. busStopModel.bind("change", function() {
  96. numberOfBusStopsWithTime++;
  97. console.log("bus " + numberOfBusStopsWithTime + ", "+ busStopModelManager.length);
  98. if (numberOfBusStopsWithTime == busStopModelManager.length) {
  99. console.log("all bus times");
  100. numberOfBusStopsWithTime = 0;
  101. socket.emit('busStopModelManagerWithTime', {busModelManager: busStopModelManager});
  102. }
  103. });
  104. */
  105. busStopModelManager.add(busStopModel);
  106. socket.emit('bus_stop', {bus_stop: bus_stop_lat_long});
  107. });
  108. });
  109. });
  110. socket.on('bus_selected', function(data) {
  111. var selected_bus = data.bus;
  112. dbProvider.destinationsForBus(selected_bus, function(destinations_rows) {
  113. socket.emit('destinations', {destinations: destinations_rows});
  114. });
  115. });
  116. });
  117. console.log('socket.io initialised!');