From 808c9987af13db91d1e928947dfe1e9fc0004952 Mon Sep 17 00:00:00 2001 From: "D. Berge" Date: Tue, 29 Mar 2022 13:24:38 +0200 Subject: [PATCH] Add binary format middleware for sequence data. It responds to the MIME type: application/dougal-map-sequence+octet-stream --- .../api/middleware/sequence/get/binary.js | 61 +++++++++++++++++++ .../api/middleware/sequence/get/index.js | 2 + 2 files changed, 63 insertions(+) create mode 100644 lib/www/server/api/middleware/sequence/get/binary.js diff --git a/lib/www/server/api/middleware/sequence/get/binary.js b/lib/www/server/api/middleware/sequence/get/binary.js new file mode 100644 index 0000000..56205f6 --- /dev/null +++ b/lib/www/server/api/middleware/sequence/get/binary.js @@ -0,0 +1,61 @@ + +const { sequence } = require('../../../../lib/db'); +const { MSGTYPE, encode } = require('../../../../lib/binary'); + +module.exports = async function (req, res, next) { + + try { + const json = await sequence.get(req.params.project, req.params.sequence, req.query); + + let msgType, geometry, error; + switch (req.query.geometry) { + case "F": + case "FINAL": + msgType = MSGTYPE.FINAL_OPT; + geometry = "geometryfinal"; + error = "errorfinal"; + break; + case "f": + case "final": + msgType = MSGTYPE.FINAL; + geometry = "geometryfinal"; + error = "errorfinal"; + break; + case "R": + case "RAW": + msgType = MSGTYPE.RAW_OPT; + geometry = "geometryraw"; + error = "errorraw"; + break; + case "r": + case "raw": + msgType = MSGTYPE.RAW; + geometry = "geometryraw"; + error = "errorraw"; + break; + case "P": + case "PREPLOT": + msgType = MSGTYPE.PREPLOT_RAWERROR_OPT; + geometry = "geometrypreplot"; + error = ["errorfinal", "errorraw"]; + break; + case "p": + case "preplot": + default: + msgType = MSGTYPE.PREPLOT; + geometry = "geometrypreplot"; + break; + } + + const endianness = req.query.endianness != "big"; + + const data = encode(json, geometry, error, msgType, endianness); + console.log("bundle", data); + + res.status(200).send(Buffer.from(data)); + next(); + } catch (err) { + next(err); + } + +}; diff --git a/lib/www/server/api/middleware/sequence/get/index.js b/lib/www/server/api/middleware/sequence/get/index.js index 02556ae..e395257 100644 --- a/lib/www/server/api/middleware/sequence/get/index.js +++ b/lib/www/server/api/middleware/sequence/get/index.js @@ -1,11 +1,13 @@ const json = require('./json'); const geojson = require('./geojson'); +const binary = require('./binary'); module.exports = async function (req, res, next) { try { const handlers = { "application/json": json, "application/geo+json": geojson, + "application/dougal-map-sequence+octet-stream": binary }; const mimetype = (handlers[req.query.mime] && req.query.mime) || req.accepts(Object.keys(handlers));