1
0
Fork 0
leet/clients/switch/server.js

64 lines
1.3 KiB
JavaScript

const path = require('path');
const grpc = require('grpc');
const protoLoader = require('@grpc/proto-loader');
const PROTO_PATH = path.join(__dirname, '..', '..', 'framebuffer', 'framebuffer.proto');
const packageDefinition = protoLoader.loadSync(PROTO_PATH);
const framebuffer = grpc.loadPackageDefinition(packageDefinition);
const client = new framebuffer.Drawer('raspi.cacti.makerforce.io:5000', grpc.credentials.createInsecure());
const express = require('express');
const app = express();
const PORT = 5001;
const PIXEL_COUNT = 275;
// TODO: async
app.post('/on', (req, res, next) => {
let fill = 0x00000000;
switch (req.query.tempreature) {
case 'cool':
fill = 0xFFFFFFFF;
break;
case 'warm':
default:
fill = 0xFFFFAA77;
break;
}
client.drawFrame({
frame: {
dots: Array(PIXEL_COUNT-1).fill(fill).concat([0xBBFF0000]),
},
layer: 'LIGHT',
}, (err, resp) => {
if (err) {
return next(err);
}
res.writeHead(200);
res.end();
});
});
app.post('/off', (req, res, next) => {
client.drawFrame({
frame: {
dots: Array(PIXEL_COUNT).fill(0x00000000),
},
layer: 'LIGHT',
}, (err, resp) => {
if (err) {
return next(err);
}
res.writeHead(200);
res.end();
});
});
app.use(express.static('public'));
app.listen(PORT, () => console.log(`App listening on ${PORT}`));