Something went wrong on our end
Forked from
jjlustig / EECS498-uBoard
34 commits behind the upstream repository.
-
Zayd Radha authoredZayd Radha authored
server.js 6.29 KiB
'use strict';
//-------External Libraries----------//
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var robot = require('robotjs');
var config = require('./public/js/config.js');
var url = require("opn");
var fs = require("fs");
//---------GLOBAL STATE VARIABLES ----//
var screenWidth = 1440;
var screenHeight = 900;
var adjustment = 2;
var mouse = null;
var newX = null;
var newY = null;
// Get screen size from NW desktop
try {
var gui = window.require('nw.gui');
gui.Screen.Init();
var screens = gui.Screen.screens;
// XXX: currently only take first screen
var rect = screens[0].bounds;
screenWidth = rect.width;
screenHeight = rect.height;
} catch (e) {
console.log(e);
}
//-------WEB SERVER FUNCTIONALITY -------//
//Purpose: Sends client information when making http request to main entrypoint
app.get('/', function(req, res) {
res.sendFile(__dirname + '/public/client.html');
});
//Purpose: use the public directory to send information
app.use('/public', express.static('public'));
//Purpose: Lets the webserver listen for requests on port 8000
var PORT = 8000;
http.listen(PORT, function() {
console.log('listening on *:' + PORT);
});
//-------MOBILE MOUSE FUNCTIONALITY -------//
//General Connection Configuration
io.on('connection', function(socket) {
socket.broadcast.emit('hi');
console.log('a user connected');
socket.on('disconnect', function() {
console.log('user disconnected');
});
var keys = []
var xpos = []
var ypos = []
//Load default keyboard
var file = fs.readFileSync("configuration.json")
var content = JSON.parse(file)
for (var key in content) {
keys.push(content[key][0]);
xpos.push(content[key][1]);
ypos.push(content[key][2]);
}
socket.emit('updateKeys', {k: keys, x: xpos, y: ypos});
content = []
//Load default numpad
var file = fs.readFileSync("numpad.json")
var content = JSON.parse(file)
var keys = []
var xpos = []
var ypos = []
for (var key in content) {
keys.push(content[key][0]);
xpos.push(content[key][1]);
ypos.push(content[key][2]);
}
socket.emit('updateNumPad', {k: keys, x: xpos, y: ypos});
content = []
//Load default urls
var file = fs.readFileSync("url.json")
content = JSON.parse(file)
var keys = []
var xpos = []
var ypos = []
for (var key in content) {
keys.push(content[key][0]);
xpos.push(content[key][1]);
ypos.push(content[key][2]);
}
socket.emit('updateUrls', {k: keys, x: xpos, y: ypos});
//Load custom keyboards
fs.readdirSync('./custom_configs/').forEach(fileName => {
var file = fs.readFileSync('./custom_configs/'+fileName)
content = JSON.parse(file)
var keys = []
var xpos = []
var ypos = []
for (var key in content) {
keys.push(content[key][0]);
xpos.push(content[key][1]);
ypos.push(content[key][2]);
}
socket.emit('updateCustom', {fname: fileName.slice(0, -5), k: keys, x: xpos, y: ypos});
});
//Keyboard Functionality
socket.on('string', function(str) {
console.log("Trying to type")
console.log(str);
if (str === "Go"){
robot.keyTap('enter');
}
else if (str === "space"){
robot.keyTap('space');
}
else if (str === 'del'){
robot.keyTap('backspace');
}
else{
robot.typeString(str);
}
});
socket.on('functionality', function(type) {
console.log(type);
switch (type) {
case 'backspace':
robot.keyTap('backspace');
break;
case 'enter':
robot.keyTap('enter');
break;
case 'ArrowUp':
robot.keyTap('up');
break;
case 'ArrowDown':
robot.keyTap('down');
break;
case 'ArrowLeft':
robot.keyTap('left');
break;
case 'ArrowRight':
robot.keyTap('right');
break;
case 'Space':
robot.keyTap('space');
break;
}
});
socket.on('text', function(text) {
console.log('Typing ' + text);
robot.typeString(text);
});
socket.on('saveKey', function(key) {
console.log(key.index.toString())
var file = fs.readFileSync("./custom_configs/custom" + key.index.toString() + ".json")
var configuration = JSON.parse(file)
configuration[key.id] = [key.val, key.x, key.y];
fs.writeFile("./custom_configs/custom" + key.index.toString() + ".json", JSON.stringify(configuration, null, 4), 'utf8', error=>{});
});
socket.on('newBoard', function(key) {
fs.writeFile('./custom_configs/custom'+key.index.toString()+'.json', JSON.stringify({}, null, 4), 'utf8', error=>{})
});
socket.on('url', function(str) {
console.log("Trying to open url")
console.log(str)
url(str)
});
//Mouse Functionality
socket.on('mouse', function(pos) {
if (pos.pw) {
if (config.passcode !== pos.pw) { //Password Checker
return;
}
}
if (pos.cmd == 'move') {
mouse = robot.getMousePos(); //Get mouse state
newX = mouse.x + pos.x * adjustment;
newY = mouse.y + pos.y * adjustment;
robot.moveMouse(newX, newY);
mouse = robot.getMousePos(); //Update mouse state
}
else if (pos.cmd == 'scroll'){
mouse = robot.getMousePos(); //Get mouse state
robot.scrollMouse(pos.x*5, pos.y*5);
mouse = robot.getMousePos(); //Update mouse state
}
else if (pos.cmd == 'drag') {
mouse = robot.getMousePos(); //Get mouse state
newX = mouse.x + pos.x * adjustment;
newY = mouse.y + pos.y * adjustment;
robot.dragMouse(newX, newY);
mouse = robot.getMousePos(); //Update mouse state
}
else if (pos.cmd == 'click') {
robot.mouseClick();
} else if (pos.cmd == 'rightclick') {
robot.mouseClick('right');
} else if (pos.cmd == 'scrollstart') {
//robot.mouseToggle('down', 'middle');
} else if (pos.cmd == 'scrollend') {
//robot.mouseToggle('up', 'middle');
} else if (pos.cmd == 'dragstart') {
robot.mouseToggle('down', 'left');
} else if (pos.cmd == 'dragend') {
robot.mouseToggle('up', 'left');
} else if (pos.cmd == 'right') {
robot.keyTap("right");
} else if (pos.cmd == 'left') {
robot.keyTap("left");
} else if (pos.cmd == 'doubleclick') {
robot.mouseClick("left",true);
}
});
});