From a19da92a28ca892c34804df4f7425633ce442d75 Mon Sep 17 00:00:00 2001 From: GabeTheCoderII Date: Sat, 9 Jun 2018 12:06:39 -0400 Subject: [PATCH 1/4] Add files via upload --- lib/same-validator.js | 77 ++++++++++++++++++++++++++++++++++--------- lib/same.js | 41 ++++++++++++++++++----- 2 files changed, 95 insertions(+), 23 deletions(-) diff --git a/lib/same-validator.js b/lib/same-validator.js index 31f5ee8..ac44cb6 100644 --- a/lib/same-validator.js +++ b/lib/same-validator.js @@ -11,20 +11,67 @@ function jq(obj, path) { .value; } -function hasValidCountyCode(region) { - var s = parseInt(region.stateCode, 10); - var c = parseInt(region.countyCode, 10); - - // easy cases: - if (s === 0 && c === 0) return true; // 0 for both is allowed, as "whole country" - if (s !== 0 && c === 0) return true; // 0 for county is allowed, as "whole state" - if (s === 0 && c !== 0) return false; // but 0 for state and nonzero county isn't +var messages = []; - // usual case: if the state is defined, and if the state contains - // the given county code, it's valid - return (typeof SAMEValues.countyCode[region.stateCode] !== 'undefined') +function hasValidCountyCode(region) { + //parse region codes + var subdivArr = region.subdiv.toString().split(';'); + var stateCodeArr = region.stateCode.toString().split(';'); + var countyCodeArr = region.countyCode.toString().split(';'); + + messages.push("subdivs: " + subdivArr); + messages.push("|"); + messages.push("stateCodes: " + stateCodeArr); + messages.push("|"); + messages.push("countyCodes: " + countyCodeArr); + + //Only want to return false if failed, will return true at very end assuming nothing failed + for (var i = 0; i < subdivArr.length; i = i + 1) { + messages.push("Current stateCode: " + stateCodeArr[i]); + messages.push("Current countyCode: " + countyCodeArr[i]); + var s = parseInt(stateCodeArr[i], 10); + var c = parseInt(countyCodeArr[i], 10); + + // easy cases: + //if (s === 0 && c === 0) return true; // 0 for both is allowed, as "whole country" + //if (s !== 0 && c === 0) return true; // 0 for county is allowed, as "whole state" + if (s === 0 && c !== 0) return false; // but 0 for state and nonzero county isn't + + // usual case: if the state is defined, and if the state contains + // the given county code, it's valid + messages.push("Last check"); + var isFalse = (typeof SAMEValues.countyCode[region.stateCode] !== 'undefined') && SAMEValues.countyCode[region.stateCode] .hasOwnProperty(region.countyCode); + if (isFalse) { + messages.push("Return false last check"); + return false; + } + } + messages.push("Return true"); + return true; +} + +function hasValidSubdivCode(subdiv) { + var subdivArr = subdiv.toString().split(';'); + for (var i = 0; i < subdivArr.length; i = i + 1) { + if (!SAMEValues.subdiv.hasOwnProperty(subdivArr[i])) { + return false; + } + } + return true; +} + +function hasValidStateCode(stateCode) { + var stateCodeArr = stateCode.toString().split(';'); + for (var i = 0; i < stateCodeArr.length; i = i + 1) { + var pass = parseInt(stateCode) === 0 + || SAMEValues.stateCode.hasOwnProperty(stateCodeArr[i]); + if (!pass) { + return false; + } + } + return true; } function isValidLength(n) { @@ -102,8 +149,7 @@ module.exports = function(message) { 'message.region must be a non-empty object'], [check('.region.stateCode', 'str') - && (parseInt(message.region.stateCode) === 0 - || SAMEValues.stateCode.hasOwnProperty(message.region.stateCode)), + && hasValidStateCode(message.region.stateCode), 'message.region.stateCode must be a defined SAME state code'], [check('.region.countyCode', 'str') @@ -111,7 +157,7 @@ module.exports = function(message) { 'message.region.countyCode must be a defined SAME county code'], [check('.region.subdiv', 'str') - && SAMEValues.subdiv.hasOwnProperty(message.region.subdiv), + && hasValidSubdivCode(message.region.subdiv), 'message.region.subdiv must be a defined SAME region subdivision value (try 0)'], [check('.length', 'int') @@ -147,6 +193,7 @@ module.exports = function(message) { } } }); + var returns = [errors, messages]; - return errors; + return returns; }; diff --git a/lib/same.js b/lib/same.js index ebb0d0e..46ce404 100644 --- a/lib/same.js +++ b/lib/same.js @@ -53,19 +53,38 @@ function zeropad (str, len) { */ SAME.constructMessageByteArray = function(message) { var msgContent = []; + var subdivArr = []; + var stateCodeArr = []; + var countyCodeArr = []; if (message !== null) { // message header + //ARRAY.push("Item1", "Item2, "etc"); appends to array msgContent = [ this.constants.preamble, '-', message.originator, '-', message.code, - '-', - zeropad(message.region.subdiv.toString(), 1), - zeropad(message.region.stateCode.toString(), 2), - zeropad(message.region.countyCode.toString(), 3), + ]; + + //parse region codes + subdivArr = message.region.subdiv.toString().split(';'); + stateCodeArr = message.region.stateCode.toString().split(';'); + countyCodeArr = message.region.countyCode.toString().split(';'); + + //add region codes to msgContent + for (var i = 0; i < subdivArr.length; i = i + 1) { + msgContent.push( + '-', + zeropad(subdivArr[i], 1), + zeropad(stateCodeArr[i], 2), + zeropad(countyCodeArr[i], 3), + ); + } + + //add the rest of the data + msgContent.push( '+', zeropad(message.length.toString(), 4), '-', @@ -73,8 +92,9 @@ SAME.constructMessageByteArray = function(message) { zeropad(message.start.hour.toString(), 2), zeropad(message.start.minute.toString(), 2), '-', - message.sender - ]; + message.sender, + '-' + ); } else { // message footer msgContent = [ @@ -138,8 +158,13 @@ SAME.generateWaveData = function(byteArray) { * @returns {string} A fully rendered SAME message in RIFF WAVE format. */ SAME.encode = function(message) { - var validationErrors = this.validateMessage(message); - var msgBytes = []; + var returns = this.validateMessage(message); + var validationErrors = returns[0]; + var messages = returns[1]; + console.log("HELLO. Message length: " + messages.length); + for (var i = 0; i < messages.length; i = i + 1) { + console.log(messages[i]); + } if (validationErrors.length > 0) { throw new Error('Message failed to validate: ' From 856a472f7d995faacf1ff65dff2059e8a91fbbf9 Mon Sep 17 00:00:00 2001 From: GabeTheCoderII Date: Sat, 9 Jun 2018 12:07:55 -0400 Subject: [PATCH 2/4] Add files via upload --- examples/server.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/examples/server.js b/examples/server.js index 7f33efa..b2bb11a 100644 --- a/examples/server.js +++ b/examples/server.js @@ -2,20 +2,23 @@ var SAME = require('../index'); var message = { originator: 'PEP', - code: 'EAN', + sender: 'WHITEHSE', + code: 'CEM', region: { - subdiv: '0', - stateCode: '00', - countyCode: '000' + // note that these are strings. Multiple codes can be specified separated by a semicolon + subdiv: '0;0', + stateCode: '34;34', + countyCode: '001;003' }, - length: 600, - start: { - day: 123, - hour: 5, - minute: 30 - }, - sender: 'WHITEHSE' + // note that these are numbers + length: 1200, // message applicability period (NOT event length!) as HHMM + start: { // message applicability period begins: + day: 205, // on this Julian day + hour: 18, // at this UTC hour + minute: 13 // and this UTC minute + } }; SAME.Writer.write(SAME.Encoder.encode(message), './output.wav'); +console.log('THIS IS A TEST PRINT'); console.log('Wrote ./output.wav.'); From 28d600465b66e98c457ec95912da3be33d661ca0 Mon Sep 17 00:00:00 2001 From: GabeTheCoderII Date: Sat, 9 Jun 2018 12:14:22 -0400 Subject: [PATCH 3/4] Add files via upload --- examples/server.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/server.js b/examples/server.js index b2bb11a..36a5dc7 100644 --- a/examples/server.js +++ b/examples/server.js @@ -20,5 +20,4 @@ var message = { }; SAME.Writer.write(SAME.Encoder.encode(message), './output.wav'); -console.log('THIS IS A TEST PRINT'); console.log('Wrote ./output.wav.'); From f200d38d44d448682a3af77f516e12d7a34684a2 Mon Sep 17 00:00:00 2001 From: GabeTheCoderII Date: Sat, 9 Jun 2018 12:18:53 -0400 Subject: [PATCH 4/4] Add files via upload --- lib/same-validator.js | 17 +---------------- lib/same.js | 10 +--------- 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/lib/same-validator.js b/lib/same-validator.js index ac44cb6..728511e 100644 --- a/lib/same-validator.js +++ b/lib/same-validator.js @@ -11,24 +11,14 @@ function jq(obj, path) { .value; } -var messages = []; - function hasValidCountyCode(region) { //parse region codes var subdivArr = region.subdiv.toString().split(';'); var stateCodeArr = region.stateCode.toString().split(';'); var countyCodeArr = region.countyCode.toString().split(';'); - messages.push("subdivs: " + subdivArr); - messages.push("|"); - messages.push("stateCodes: " + stateCodeArr); - messages.push("|"); - messages.push("countyCodes: " + countyCodeArr); - //Only want to return false if failed, will return true at very end assuming nothing failed for (var i = 0; i < subdivArr.length; i = i + 1) { - messages.push("Current stateCode: " + stateCodeArr[i]); - messages.push("Current countyCode: " + countyCodeArr[i]); var s = parseInt(stateCodeArr[i], 10); var c = parseInt(countyCodeArr[i], 10); @@ -39,16 +29,13 @@ function hasValidCountyCode(region) { // usual case: if the state is defined, and if the state contains // the given county code, it's valid - messages.push("Last check"); var isFalse = (typeof SAMEValues.countyCode[region.stateCode] !== 'undefined') && SAMEValues.countyCode[region.stateCode] .hasOwnProperty(region.countyCode); if (isFalse) { - messages.push("Return false last check"); return false; } } - messages.push("Return true"); return true; } @@ -193,7 +180,5 @@ module.exports = function(message) { } } }); - var returns = [errors, messages]; - - return returns; + return errors; }; diff --git a/lib/same.js b/lib/same.js index 46ce404..6e58116 100644 --- a/lib/same.js +++ b/lib/same.js @@ -59,7 +59,6 @@ SAME.constructMessageByteArray = function(message) { if (message !== null) { // message header - //ARRAY.push("Item1", "Item2, "etc"); appends to array msgContent = [ this.constants.preamble, '-', @@ -158,14 +157,7 @@ SAME.generateWaveData = function(byteArray) { * @returns {string} A fully rendered SAME message in RIFF WAVE format. */ SAME.encode = function(message) { - var returns = this.validateMessage(message); - var validationErrors = returns[0]; - var messages = returns[1]; - console.log("HELLO. Message length: " + messages.length); - for (var i = 0; i < messages.length; i = i + 1) { - console.log(messages[i]); - } - + var validationErrors = this.validateMessage(message); if (validationErrors.length > 0) { throw new Error('Message failed to validate: ' + validationErrors.join('; '));