From 6cb37cb22944b0ba06492a2d79d5c772bc3bf481 Mon Sep 17 00:00:00 2001 From: MaximZaitsev Date: Fri, 22 Jul 2016 15:21:02 +0300 Subject: [PATCH] js server. added interaction with main server --- car_srv/src/{Car.js => car.js} | 8 +++--- car_srv/src/client.js | 33 +++++++++++++++++++++++++ car_srv/src/handlers/setRouteHandler.js | 23 ++++++++++++++--- car_srv/src/main.js | 21 +++++++++++++--- car_srv/src/server.js | 2 ++ 5 files changed, 76 insertions(+), 11 deletions(-) rename car_srv/src/{Car.js => car.js} (96%) create mode 100644 car_srv/src/client.js diff --git a/car_srv/src/Car.js b/car_srv/src/car.js similarity index 96% rename from car_srv/src/Car.js rename to car_srv/src/car.js index 396e8b63480..b3d8c8e7eff 100644 --- a/car_srv/src/Car.js +++ b/car_srv/src/car.js @@ -6,8 +6,8 @@ const fs = require("fs"); const main = require("./main.js"); const directionClass = main.protoConstructorControl.DirectionRequest; -function Car(uid) { - this.uid = uid; +function Car() { + this.uid = ""; this.x = 0; this.y = 0; this.angle = 0; @@ -47,7 +47,7 @@ function resume() { function move(delta) { var deltaSeconds = delta / 1000; - // console.log("x=" + this.x + " y=" + this.y + " angle=" + this.angle); + console.log("x=" + this.x + " y=" + this.y + " angle=" + this.angle); if (this.paused) { return; } @@ -107,8 +107,8 @@ function setDirection(directionByte, callBack) { fs.appendFile(main.transportFilePath, directionByte, "binary", function (error) { var code = 0; var errorMsg = ""; - console.log(error); if (error) { + console.log(error); errorMsg = error; } if (callBack != null) { diff --git a/car_srv/src/client.js b/car_srv/src/client.js new file mode 100644 index 00000000000..2a6673be5c5 --- /dev/null +++ b/car_srv/src/client.js @@ -0,0 +1,33 @@ +/** + * Created by user on 7/22/16. + */ +const main = require("./main.js"); +const http = require("http"); +function sendData(data, url, callBack) { + var options = { + hostname: main.serverAddress, + port: main.serverPort, + path: url, + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Content-Length': Buffer.byteLength(data) + } + }; + var req = http.request(options, function (response) { + var answerData = []; + response.on("data", function (datas) { + for (var i = 0; i < datas.length; i++) { + answerData.push(datas[i]); + } + }); + response.on("end", function () { + callBack(answerData) + }); + }); + //todo errors + req.write(data); + req.end(); +} + +exports.sendData = sendData; \ No newline at end of file diff --git a/car_srv/src/handlers/setRouteHandler.js b/car_srv/src/handlers/setRouteHandler.js index e12d025c2a3..2c90dad1b96 100644 --- a/car_srv/src/handlers/setRouteHandler.js +++ b/car_srv/src/handlers/setRouteHandler.js @@ -5,9 +5,26 @@ const main = require("./../main.js"); function handle(httpContent, response) { - var routeClass = main.protoConstructorRoute.RouteRequest; - var routeObject = routeClass.decode(httpContent); - console.log(routeObject)//todo сделать + const routeClass = main.protoConstructorRoute.RouteRequest; + const routeObject = routeClass.decode(httpContent); + const wayPoints = routeObject.way_points; + main.thisCar.setPath(wayPoints); + + var routeResponse = new main.protoConstructorRoute.RouteResponse({ + "code": 0, + "errorMsg": "" + }); + + var byteBuffer = routeResponse.encode(); + var byteArray = []; + for (var i = 0; i < byteBuffer.limit; i++) { + byteArray.push(byteBuffer.buffer[i]); + } + + response.writeHead(200, {"Content-Type": "text/plain", "Content-length": byteArray.length}); + response.write(new Buffer(byteArray)); + response.end(); + } exports.handler = handle; \ No newline at end of file diff --git a/car_srv/src/main.js b/car_srv/src/main.js index f6a39e7836d..9898136e041 100644 --- a/car_srv/src/main.js +++ b/car_srv/src/main.js @@ -8,6 +8,7 @@ const commander = require("commander"); const protoBuf = require("protobufjs"); const fs = require("fs"); const udev = require("udev"); +const client = require("./client.js"); //parsing command line args commander @@ -33,18 +34,30 @@ if (commander.flash) { const builderCarkot = protoBuf.loadProtoFile((commander.protopath ? commander.protopath : "./proto/") + "carkot.proto"); const builderControl = protoBuf.loadProtoFile((commander.protopath ? commander.protopath : "./proto/" + "direction.proto")); const builderRoute = protoBuf.loadProtoFile((commander.protopath ? commander.protopath : "./proto/" + "route.proto")); +const builderConnect = protoBuf.loadProtoFile((commander.protopath ? commander.protopath : "./proto/" + "connect.proto")); var executeShell = "./st-flash"; exports.protoConstructorCarkot = builderCarkot.build("carkot"); exports.protoConstructorControl = builderControl.build("carkot"); exports.protoConstructorRoute = builderRoute.build("carkot"); +exports.protoConstructorConnect = builderConnect.build("carkot"); exports.commandPrefix = executeShell + " write"; exports.binFilePath = (commander.flash ? commander.flash : "./") + "flash.bin"; -exports.transportFilePath = ""; +exports.transportFilePath = "/dev/ttyACM0";//todo плохо:) +exports.serverAddress = "127.0.0.1"; +exports.serverPort = 7925; //init this car -var uid = "";//todo connect to srv -var car = require("./Car").getCar(uid); +var connectRequest = new exports.protoConstructorConnect.ConnectionRequest({ + // "ip": "192.168.43.135",//todo its ip of this server in local wifi network. hardcore is bad here:) + "ip": "127.0.0.1",//todo for tests on local mashine + "port": 8888 +}); +client.sendData(connectRequest.encode().buffer, "/connect", function (data) { + var connectionResponse = exports.protoConstructorConnect.ConnectionResponse.decode(data); + exports.thisCar.uid = connectionResponse.uid +}); +var car = require("./Car").getCar(); exports.thisCar = car; //handlers for client requests @@ -52,7 +65,7 @@ var handle = {}; handle["/loadBin"] = require("./handlers/loadBinHandler").handler; handle["/control"] = require("./handlers/controlHandler").handler; handle["/route"] = require("./handlers/setRouteHandler").handler; -exports.transportFilePath = "/dev/ttyACM0"; + //add event handlers from udev monitor (add device and remove device) const monitor = udev.monitor(); monitor.on('add', function (device) { diff --git a/car_srv/src/server.js b/car_srv/src/server.js index e0cd3ce4288..3444865f4b4 100644 --- a/car_srv/src/server.js +++ b/car_srv/src/server.js @@ -16,6 +16,8 @@ function start(route, handlers) { }); request.on("end", function () { + console.log(pathname); + console.log(httpContent); route(handlers, pathname, httpContent, response); }); }