diff --git a/.gitignore b/.gitignore index 1ea4525..33bb96b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # DataFile data/games +data/nosql data/teams.nosql data/games.nosql data/audioFiles diff --git a/.vscode/launch.json b/.vscode/launch.json index b413609..d9dd17c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,7 +3,7 @@ "configurations": [ { - "env": {"configDirectory": "./config/private/debug" , "LOCALDEBUG":"true", "DEBUG": "radarMonitor,radarStalker2,batteryMonitor,ffmpegOverlay,youtubeEncoderClient"}, + "env": {"CONFIGDIRECTORY": "./config/private/debug" , "LOCALDEBUG":"true", "DEBUG": "radarMonitor,radarStalker2,batteryMonitor,ffmpegOverlay,ffplay,radarDatabase,radarPacketParser,remoteMongoDBServer,radarEmulator,gpsMonitor"}, "command": "npm start", "name": "LocalDebug Run npm start", "request": "launch", @@ -11,7 +11,7 @@ }, { - "env": {"configDirectory": "./config/private/youtubeEncoder", "LOCALDEBUG":"true", "DEBUG": "youtubeEncoderClient,ffmpegOverlay"}, + "env": {"CONFIGDIRECTORY": "./config/private/youtubeEncoder", "LOCALDEBUG":"true", "DEBUG": "youtubeEncoderClient,ffmpegOverlay"}, "command": "node youtubeEncoderClient.js", "name": "Run node youtubeEncoderClient.js", "request": "launch", diff --git a/app.js b/app.js index d556968..49c9f41 100644 --- a/app.js +++ b/app.js @@ -36,13 +36,21 @@ if (process.env.CONFIGDIRECTORY) { if (process.env.CONFIGFILENAME) { configFileOptions.configFileName =process.env.CONFIGFILENAME; } +if (process.env.DATADIRECTORY) { + defaultConfig.dataDirectory =process.env.DATADIRECTORY; +} + +if (defaultConfig.deviceId === undefined || defaultConfig.deviceId === '') { + defaultConfig.deviceId = uuidv4(); +} + console.log("configDirectory is " + configFileOptions.configDirectory); console.log("configFileName is " + configFileOptions.configFileName); var configHandler = new ConfigHandler(configFileOptions, defaultConfig); var objOptions = configHandler.config; - +console.log("Data Directory is " + objOptions.dataDirectory); let logUtilHelper = new LogUtilHelper({ appLogLevels: objOptions.appLogLevels, @@ -65,6 +73,27 @@ let logUtilHelper = new LogUtilHelper({ }) +if (configHandler.config.deviceId === undefined || configHandler.config.deviceId === '') { + configHandler.config.deviceId = uuidv4(); + try { + configHandler.configFileSave(); + logUtilHelper.log(appLogName, "app", "debug", 'deviceId Setting Saved'); + } catch (ex) { + logUtilHelper.log(appLogName, "app", "error", 'Error Saving Config DeviceId', ex); + console.log("Error Saving Config DeviceId " + ex.message); + } +} +console.log("DeviceId " + configHandler.config.deviceId); + +logUtilHelper.log(appLogName, "app", "info", "DeviceId " + configHandler.config.deviceId); +logUtilHelper.log(appLogName, "app", "info", "configDirectory is " + configFileOptions.configDirectory); +logUtilHelper.log(appLogName, "app", "info", "configFileName is " + configFileOptions.configFileName); +logUtilHelper.log(appLogName, "app", "info", "Data Directory is " + objOptions.dataDirectory); + + +var audioFileDirectory = path.join(objOptions.dataDirectory, "audioFiles"); +var walkupAudioDirectory = path.join(audioFileDirectory, "walkup"); + var app = express(); app.use(express.json({ limit: '50mb' })); app.use(express.urlencoded({ limit: '50mb', extended: false })); @@ -76,7 +105,7 @@ var batteryMonitor = new BatteryMonitor(objOptions.batteryMonitor, logUtilHelper var gpsMonitor = new GpsMonitor(objOptions.gpsMonitor, logUtilHelper); var dataDisplay = new DataDisplay(objOptions.dataDisplay, logUtilHelper); var ffmpegOverlay = new FfmpegOverlay(objOptions.ffmpegOverlay, logUtilHelper); -var radarDatabase = new RadarDatabase(objOptions.radarDatabase, logUtilHelper); +var radarDatabase = new RadarDatabase(objOptions.radarDatabase, logUtilHelper, objOptions.dataDirectory); var commonData = { game: null, @@ -198,12 +227,10 @@ routes.get('/data/game', function (req, res) { }); routes.get('/data/audioFiles/walkup', function (req, res) { - - const directoryPath = path.join(__dirname, "data/audioFiles/walkup") let walkupFiles = []; - fs.readdir(directoryPath, function (err, files) { + fs.readdir(walkupAudioDirectory, function (err, files) { if (err) { - console.log("Error getting walkup directory information."); + logUtilHelper.log(appLogName, "browser", "error", "Error getting walkup directory information.", walkupAudioDirectory); } else { files.forEach(function (file) { //console.log(file); @@ -214,8 +241,23 @@ routes.get('/data/audioFiles/walkup', function (req, res) { res.json(walkupFiles); } }) - - +}); + +routes.get('/data/audioFiles', function (req, res) { + let audioFiles = []; + fs.readdir(audioFileDirectory, function (err, files) { + if (err) { + logUtilHelper.log(appLogName, "browser", "error", "Error getting audio directory information.", audioFileDirectory); + } else { + files.forEach(function (file) { + //console.log(file); + if (path.extname(file) !== ".txt") { + audioFiles.push({ fileName: file }); + } + }) + res.json(audioFiles); + } + }) }); routes.get('/data/game/:id', function (req, res) { @@ -407,14 +449,14 @@ var playAudioFileComplete = function (audioFile) { io.emit("audio", { cmd: "audioPlayComplete", data: { audioFile: audioFile } }); } -var audioFilePlay = function (audioFilePath, audioFile, options) { +var audioFilePlay = function (audioFolder, audioFile, options) { if (audioFilePlayer !== null) { audioFilePlayer.stop(); audioFilePlayer = null; } - var audioFolderPath = path.join(__dirname, "data", audioFilePath); - audioFilePlayer = new FFplay(audioFolderPath, audioFile.fileName, options); + + audioFilePlayer = new FFplay(audioFolder, audioFile.fileName, options, logUtilHelper); audioFilePlayer.on("stopped", playAudioFileComplete); @@ -483,7 +525,7 @@ io.on('connection', function(socket) { audioFilePlay("", message.data.audioFile); break; case "audioFilePlayWalkup": - audioFilePlay("audioFiles/walkup", message.data.audioFile, ['-nodisp', '-autoexit', '-af', 'afade=t=in:st=0:d=5,afade=t=out:st=10:d=5']) + audioFilePlay(walkupAudioDirectory, message.data.audioFile, ['-nodisp', '-autoexit', '-af', 'afade=t=in:st=0:d=5,afade=t=out:st=10:d=5']) break; case "audioFileStop": audioFileStop(); diff --git a/config/defaultConfig.json b/config/defaultConfig.json index 1489d8f..73b3c52 100644 --- a/config/defaultConfig.json +++ b/config/defaultConfig.json @@ -1,6 +1,8 @@ { "webserverPort": 12336, "useNoSql": true, + "deviceId": "", + "dataDirectory": "./data/", "mongoDbServerUrl": "", "mongoDbDatabaseName": "", "logDirectory": "logs", @@ -49,10 +51,6 @@ } }, - "radarDatabaseConfig":{ - "deviceId": "", - "dataFolder": "./data" - }, "ffmpegOverlay":{ "input": "", "rtmpUrl": "", @@ -66,10 +64,6 @@ "options": "fontfile=arial.ttf:fontsize=50:box=1:boxcolor=black@0.75:boxborderw=5:fontcolor=white:x=(w-text_w)/2:y=((h-text_h)/2)+((h-text_h)/2):textfile=overlay.txt:reload=1" } }, - "youtubeEncoderClient":{ - "webserverPort": 12336, - "host": "" - }, "appLogLevels":{ "radarMonitor": { "app":"info", @@ -93,6 +87,9 @@ }, "platformDetect" :{ "app":"info" + }, + "ffplay" : { + "app":"info" } } } \ No newline at end of file diff --git a/data/games.nosql b/data/games.nosql deleted file mode 100644 index 678f596..0000000 --- a/data/games.nosql +++ /dev/null @@ -1,7 +0,0 @@ -{"id":"00000000-0000-0000-0000-000000000000","name":"New Game","shortName":"","startDate":null,"endDate":null,"inning":1,"inningPosition":"top","outs":0,"balls":0,"strikes":0,"score":{"home":0,"guest":0},"home":{"battingIndex":0,"lineup":[],"team":null},"guest":{"battingIndex":0,"lineup":[],"team":null},"status":1,"log":[]} -{"id":"77d5f5ca-b251-4bf2-9a5f-496b20710bb2","name":"Vicksburg Bulldogs Varsity vs Portage Central Varsity","startDate":"2022-04-12T20:16:02.008Z","endDate":null,"status":1} -{"id":"7f5e1349-70c8-4428-8c00-eaa24b317cd0","name":"Vicksburg Bulldogs Varsity vs Paw Paw Varsity","startDate":"2022-04-15T19:38:03.373Z","endDate":null,"status":1} -{"id":"cf628e49-f436-44d0-88c0-9dcb45b10be3","name":"Vicksburg Bulldogs Varsity vs Portage Northern Varsity","startDate":"2022-04-20T18:08:46.526Z","endDate":null,"status":1} -{"id":"c73674f0-4c62-45cb-8f59-8ae4281ff372","name":"Vicksburg Bulldogs Varsity vs Portage Northern Varsity","startDate":"2022-04-20T23:13:39.845Z","endDate":null,"status":1} -{"id":"d2904997-06a2-4b98-ab39-827a1f56c271","name":"Vicksburg Bulldogs JV 2022 vs Allegan JV 2021","startDate":"2022-04-21T19:21:04.613Z","endDate":null,"status":1} -{"id":"384bbad8-b1c2-4727-bf24-c4a73007ed62","name":"Vicksburg Bulldogs JV 2022 vs Allegan JV 2022","startDate":"2022-04-21T21:41:22.252Z","endDate":null,"status":1} diff --git a/install/raspberryPiInstall.sh b/install/raspberryPiInstall.sh deleted file mode 100644 index b5be4c1..0000000 --- a/install/raspberryPiInstall.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -echo Add Node.JS 16 repo -curl -sSL https://deb.nodesource.com/setup_16.x | sudo bash - -echo Install Node.JS -sudo apt install -y nodejs -echo downloading latest version of code from -echo Starting Radar App with Node JS Port 80 -#curl -sSL https://github.com/Andrewiski/RadarGun/archive/refs/tags/v0.0.5.tar.gz -sudo mkdir /opt/de -sudo chown $(id -u):$(id -g) /opt/de -mkdir /opt/de/radar -cd /opt/de/radar -curl -s https://api.github.com/repos/Andrewiski/RadarGun/releases/latest | sed -n 's/.*"tarball_url": "\(.*\)",.*/\1/p' | xargs -n1 wget -O - -q | tar -xz --strip-components=1 -npm install diff --git a/install/raspberrypi/raspberryPiInstall.sh b/install/raspberrypi/raspberryPiInstall.sh new file mode 100644 index 0000000..04e23d6 --- /dev/null +++ b/install/raspberrypi/raspberryPiInstall.sh @@ -0,0 +1,34 @@ +#!/bin/bash +echo Add Node.JS 16 repo +curl -sSL https://deb.nodesource.com/setup_16.x | sudo bash - +echo Install Node.JS +sudo apt install -y nodejs + +sudo mkdir /opt/de +sudo chown $(id -u):$(id -g) /opt/de +sudo useradd -m radar +sudo groupadd radar +sudo usermod -a -G radar $(id -u -n) +newgrp radar +mkdir /opt/de/radar +mkdir /opt/de/appdata +mkdir /opt/de/appdata/radar +sudo chown radar:radar /opt/de/appdata/radar +sudo chmod g+rw /opt/de/appdata/radar +sudo chown radar:radar /opt/de/radar +sudo chmod g+rw /opt/de/radar + +mkdir /opt/de/appdata/radar/config +mkdir /opt/de/appdata/radar/data +cd /opt/de/radar +echo downloading latest version of code +curl -s https://api.github.com/repos/Andrewiski/RadarGun/releases/latest | sed -n 's/.*"tarball_url": "\(.*\)",.*/\1/p' | xargs -n1 wget -O - -q | tar -xz --strip-components=1 +npm install +sudo cp /opt/de/radar/install/raspberrypi/service/radar.service /lib/systemd/system/ +sudo systemctl daemon-reload +sudo systemctl start radar +sudo systemtl enable radar +#echo install precompiled ffmpeg to fix fault segment error in built in version proboly not needed once raspberry 64bit lite is patched as I reported +#sudo apt-get -y install libaom-dev libass-dev libfreetype6-dev libgnutls28-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget yasm zlib1g-dev libunistring-dev libdrm-dev libopus-dev libvpx-dev libwebp-dev libx264-dev libx265-dev libxml2-dev libfdk-aac-dev libmp3lame-dev +#tar -xf /opt/de/radar/ffmpeg/raspberryPi/ffmpeg-pi-4.3.3.tar.gz +#sudo cp -R ~/install/* /usr/local diff --git a/install/raspberyPiFfmpegBuild.sh b/install/raspberrypi/raspberyPiFfmpegBuild.sh similarity index 65% rename from install/raspberyPiFfmpegBuild.sh rename to install/raspberrypi/raspberyPiFfmpegBuild.sh index f4abbc5..61ee2c8 100644 --- a/install/raspberyPiFfmpegBuild.sh +++ b/install/raspberrypi/raspberyPiFfmpegBuild.sh @@ -1,17 +1,20 @@ #!/bin/bash #https://www.willusher.io/general/2020/11/15/hw-accel-encoding-rpi4 + +sudo apt-get update -qq && sudo apt-get -y install autoconf automake build-essential cmake git-core libaom-dev libass-dev libfreetype6-dev libgnutls28-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget yasm zlib1g-dev libunistring-dev libdrm-dev libopus-dev libvpx-dev libwebp-dev libx264-dev libx265-dev libxml2-dev libfdk-aac-dev libmp3lame-dev + echo This Will Fail on 1GB Memory version of Raspberry PI 4 Use "top" to check ram size + echo Downloading from Git hub https://github.com/FFmpeg/FFmpeg.git cd ~ git clone --depth 1 --branch release/4.3 https://github.com/FFmpeg/FFmpeg.git cd FFmpeg -sudo apt-get update -qq && sudo apt-get -y install autoconf automake build-essential cmake git-core libass-dev libfreetype6-dev libgnutls28-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget yasm zlib1g-dev libunistring-dev libdrm-dev libopus-dev libvpx-dev libwebp-dev libx264-dev libxml2-dev libfdk-aac-dev libmp3lame-dev -./configure --prefix=`pwd`/install \ +./configure \ --enable-gpl \ --enable-nonfree \ --arch=aarch64 \ - --disable-libaom \ + --enable-libaom \ --enable-libass \ --enable-libfdk-aac \ --enable-libfreetype \ diff --git a/install/raspberrypi/service/radar.service b/install/raspberrypi/service/radar.service new file mode 100644 index 0000000..e09e703 --- /dev/null +++ b/install/raspberrypi/service/radar.service @@ -0,0 +1,15 @@ +[Unit] +Description=Radar Monitor +Documentation=https://github.com/Andrewiski/RadarGun +After=network.target + +[Service] +Environment="CONFIGDIRECTORY=/opt/de/appdata/radar/config" "DATADIRECTORY=/opt/de/appdata/radar/data" +WorkingDirectory=/opt/de/radar +Type=exec +User=radar +ExecStart=/usr/bin/npm start +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/modules/ffplay.js b/modules/ffplay.js index 437c3d6..3edf086 100644 --- a/modules/ffplay.js +++ b/modules/ffplay.js @@ -16,7 +16,7 @@ function FFplay(folder, file, opts, logUtilHelper) { if (process.platform === 'win32') { ffplayPath = path.join(__dirname, '..', 'ffmpeg', 'ffplay.exe'); } else { - ffplayPath = 'aplay'; + ffplayPath = 'ffplay'; } } @@ -25,6 +25,7 @@ function FFplay(folder, file, opts, logUtilHelper) { opts = opts || ['-nodisp', '-autoexit']; opts.unshift(filePath); + logUtilHelper.log(appLogName, "app", "debug", "playing file", filePath); // Spawn process this.proc = spawn(ffplayPath, opts); @@ -50,15 +51,15 @@ function FFplay(folder, file, opts, logUtilHelper) { this.proc.stdout.on('data', (data) => { - debug(`stdout: ${data}`); + logUtilHelper.log(appLogName, "app", "debug", `stdout: ${data}`); }); this.proc.stderr.on('data', (data) => { - debug(`stderr: ${data}`); + logUtilHelper.log(appLogName, "app", "debug", `stderr: ${data}`); }); this.proc.on('close', (code) => { - debug(`child process exited with code ${code}`); + logUtilHelper.log(appLogName, "app", "debug", `child process exited with code ${code}`); }); diff --git a/modules/radarDatabase.js b/modules/radarDatabase.js index aca5c05..4ffe8e7 100644 --- a/modules/radarDatabase.js +++ b/modules/radarDatabase.js @@ -10,11 +10,9 @@ const fs = require("fs"); const NoSQL = require('nosql'); const { v4: uuidv4 } = require('uuid'); const path = require('path'); -var RadarDatabase = function (options, logUtilHelper) { +var RadarDatabase = function (options, logUtilHelper, dataDirectory, deviceId) { var self = this; var defaultOptions = { - "deviceId": "", - "dataFolder": "./data", "teamsFile": "teams.nosql", "gamesFile": "games.nosql", "playersFile": "player.nosql", @@ -23,20 +21,17 @@ var RadarDatabase = function (options, logUtilHelper) { var objOptions = extend({}, defaultOptions, options); - if (objOptions.deviceId === undefined || objOptions.deviceId === '') { - objOptions.deviceId = uuidv4(); - try { - configFileSettings.deviceId = objOptions.deviceId; - nconf.save(); - logUtilHelper.log(appLogName, "app", "debug", 'Settings Saved'); - } catch (ex) { - logUtilHelper.log(appLogName, "app", "error", 'setting save Error:' + ex); - } - } + + + const nosqlDataDirectory = path.join(dataDirectory,"nosql"); + if(fs.existsSync(nosqlDataDirectory) === false){ + fs.mkdirSync(nosqlDataDirectory,{recursive:true}) + }; + - var teamsFilePath = path.join(objOptions.dataFolder, objOptions.teamsFile); - var gamesFilePath = path.join(objOptions.dataFolder, objOptions.gamesFile); - var gamesFolderPath = path.join(objOptions.dataFolder, "games"); + var teamsFilePath = path.join(nosqlDataDirectory, objOptions.teamsFile); + var gamesFilePath = path.join(nosqlDataDirectory, objOptions.gamesFile); + var gamesFolderPath = path.join(nosqlDataDirectory, "games"); var teamsDbExists = fs.existsSync(teamsFilePath); var gamesDbExists = fs.existsSync(gamesFilePath); diff --git a/overlay.txt b/overlay.txt index cce7b94..9c69dd9 100644 --- a/overlay.txt +++ b/overlay.txt @@ -1 +1,2 @@ - PV: 55.8 MPH EV: 55.1 MPH \ No newline at end of file + Vicksburg: 13 P: #10 Jesse Smith PV: 00.0 MPH B: 0 S: 0 + Allegan: 3 B: #13 Brady Dorscht EV: 00.0 MPH I: 6 bottom \ No newline at end of file diff --git a/public/app/scoreboard/scoreboard.tpl.html b/public/app/scoreboard/scoreboard.tpl.html index b1f1dea..d4026de 100644 --- a/public/app/scoreboard/scoreboard.tpl.html +++ b/public/app/scoreboard/scoreboard.tpl.html @@ -118,6 +118,7 @@
+ @@ -127,6 +128,11 @@
+
+
+ commonData.selectedGame.startDate - +
+
@@ -271,33 +277,47 @@
- - - - + + + + +
- - - - - + + + + + + +
- - - - + + + + + + +
+
- - - - - +
+
+ + + +
+
+ + +
+ +
@@ -336,6 +356,7 @@ + #{{$select.selected.player.jerseyNumber}} {{$select.selected.player.firstName}} {{$select.selected.player.lastName}} - {{getPlayerPositionLongName($select.selected.fieldingPosition)}} @@ -473,7 +494,7 @@
- +
@@ -489,7 +510,7 @@
- + #{{$select.selected.jerseyNumber}} {{$select.selected.firstName}} {{$select.selected.lastName}} # @@ -507,7 +528,7 @@
-
@@ -557,7 +578,7 @@
- +
@@ -574,7 +595,7 @@
- + #{{$select.selected.jerseyNumber}} {{$select.selected.firstName}} {{$select.selected.lastName}} # @@ -592,7 +613,7 @@
-
@@ -896,6 +917,7 @@ Audio Files
+
Walkup Songs
{{$select.selected.fileName}} @@ -910,6 +932,22 @@
+
+
Full Songs
+
+ + {{$select.selected.fileName}} + +
+
+
+ + + + + +
+
@@ -950,7 +988,7 @@
-
+ diff --git a/public/app/scoreboard/scoreboardController.js b/public/app/scoreboard/scoreboardController.js index f8ae07b..dbe5d3e 100644 --- a/public/app/scoreboard/scoreboardController.js +++ b/public/app/scoreboard/scoreboardController.js @@ -158,19 +158,26 @@ }); } - var getCurrentGame = function () { - return $http.get('/data/game'). - then(function (response) { - $scope.commonData.game = response.data; - }); - } - - var refreshWalkupFiles = function () { - return $http.get('/data/audioFiles/walkup'). - then(function (response) { - $scope.commonData.walkupFiles = response.data; - }); - } + var getCurrentGame = function () { + return $http.get('/data/game'). + then(function (response) { + $scope.commonData.game = response.data; + }); + } + + var refreshWalkupFiles = function () { + return $http.get('/data/audioFiles/walkup'). + then(function (response) { + $scope.commonData.walkupFiles = response.data; + }); + } + + var refreshAudioFiles = function () { + return $http.get('/data/audioFiles'). + then(function (response) { + $scope.commonData.audioFiles = response.data; + }); + } var initData = function () { refreshTeams(); @@ -359,6 +366,10 @@ } } + $scope.wildPitch = function () { + $scope.ball(); + } + $scope.strike = function () { if ($scope.commonData.selectedGame.strikes >= 2) { @@ -413,6 +424,60 @@ $scope.nextBatter(); } + $scope.batterSafeError = function () { + $scope.nextBatter(); + } + + $scope.batterOutMisc = function(){ + $scope.batterOut(); + } + $scope.batterSafeFieldersChoice = function (){ + if ($scope.commonData.selectedGame.outs >= 2) { + var data = {}; + $scope.nextBatter(data); + $scope.inning(data); + } else { + var data = {}; + $scope.commonData.selectedGame.outs++; + //$scope.commonData.selectedGame.balls = 0; + //$scope.commonData.selectedGame.strikes = 0; + data.outs = $scope.commonData.selectedGame.outs; + //data.strikes = 0; + //data.balls = 0; + $scope.nextBatter(data); + addToGameLog(data); + radarMonitor.sendServerCommand("gameChange", { cmd: "gameChange", data: data }); + } + + } + + $scope.batterOutDoublePlay = function(){ + if ($scope.commonData.selectedGame.outs >= 1) { + var data = {}; + $scope.nextBatter(data); + $scope.inning(data); + } else { + var data = {}; + $scope.commonData.selectedGame.outs = 2; + data.outs = $scope.commonData.selectedGame.outs; + $scope.nextBatter(data); + addToGameLog(data); + radarMonitor.sendServerCommand("gameChange", { cmd: "gameChange", data: data }); + } + } + $scope.batterOutTripplePlay = function(){ + var data = {}; + $scope.commonData.selectedGame.outs = 3; + data.outs = $scope.commonData.selectedGame.outs; + $scope.nextBatter(data); + addToGameLog(data); + radarMonitor.sendServerCommand("gameChange", { cmd: "gameChange", data: data }); + } + + $scope.baulk = function () { + $scope.nextBatter(); + } + $scope.hitByPitch = function () { $scope.nextBatter(); @@ -619,8 +684,9 @@ break; } else { if (lineup[i].fieldingPosition === "11" || lineup[i].fieldingPosition === 11) { - if (lineup[i].dhFieldingPosition === "1" || lineup[i].dhFieldingPosition === 1) { - pitcher = lineup[i].dhPlayer; + if (lineup[i].dh && (lineup[i].dh.fieldingPosition === "1" || lineup[i].dh.fieldingPosition === 1)) { + pitcher = lineup[i].dh; + //pitcher = lineup[i]; break; } } @@ -767,6 +833,16 @@ return ""; } + // $scope.getPlayerDefensePosition = function (lineup){ + // if (lineup.fieldingPosition === "11" || lineup.fieldingPosition === 11) { + // return lineup.dhPlayer; + + // }else{ + + // } + // return ""; + // } + $scope.guestTeamLinupAdd = function () { $scope.commonData.selectedGame.guest.lineup.push(angular.copy($scope.commonData.emptyLineup) ) } diff --git a/service/radarMonitor b/service/radarMonitor deleted file mode 100644 index e4b75a5..0000000 --- a/service/radarMonitor +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# -### BEGIN INIT INFO -# Provides: radarMonitor -# Required-Start: $local_fs $network -# Required-Stop: $local_fs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: start and stop radarMonitor -# Description: radarMontor is a node project used to report speeds from a Stalker II Pro OEM sensor -### END INIT INFO -export PATH=$PATH:/usr/local/bin -export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules - - -start() { - echo "Starting radarMonitor node instance: " - forever --uid radarMonitor --sourceDir=/var/radar -p /var/radar/service -l /var/radar/service/radarMonitor.log -a --minUptime 1000 --spinSleepTime 60000 start app.js - exit 0 -} - -stop() { - echo -n "Shutting down radarMonitor node instance : " - forever stop radarMonitor - exit 0 -} - -case "$1" in - start) - start - exit 0 - ;; - stop) - stop - exit 0 - ;; - *) - echo "Usage: {start|stop}" - exit 1 - ;; - -esac - -exit 0