From 4752172b83e14304cf4072916f95dd4ad76f0083 Mon Sep 17 00:00:00 2001 From: MaximZaitsev Date: Thu, 28 Jul 2016 17:43:44 +0300 Subject: [PATCH] added handlers for main server requests --- car_srv/kotlinSrv/src/Main.kt | 13 ++++++++++- .../net/server/handlers/AbstractHandler.kt | 9 ++++---- .../net/server/handlers/main/GetLocation.kt | 19 ++++++++++++++++ .../src/net/server/handlers/main/SetRoute.kt | 22 +++++++++++++++++++ 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 car_srv/kotlinSrv/src/net/server/handlers/main/GetLocation.kt create mode 100644 car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt diff --git a/car_srv/kotlinSrv/src/Main.kt b/car_srv/kotlinSrv/src/Main.kt index 654d851e0fb..f11ac95341f 100644 --- a/car_srv/kotlinSrv/src/Main.kt +++ b/car_srv/kotlinSrv/src/Main.kt @@ -1,6 +1,8 @@ import exceptions.RcControlException import net.server.handlers.AbstractHandler import net.server.handlers.flash.LoadBin +import net.server.handlers.main.GetLocation +import net.server.handlers.main.SetRoute import net.server.handlers.rc.Connect import net.server.handlers.rc.Control import net.server.handlers.rc.Disconnect @@ -22,6 +24,9 @@ fun main(args: Array) { val rcSessionConstructor = protoBuf.loadProtoFile(getRelativePathToProto("rc_session.proto")).build("carkot") val carkotConstructor = protoBuf.loadProtoFile(getRelativePathToProto("carkot.proto")).build("carkot") + val routeConstructor = protoBuf.loadProtoFile(getRelativePathToProto("route.proto")).build("carkot") + val locationConstructor = protoBuf.loadProtoFile(getRelativePathToProto("location.proto")).build("carkot") + val handlers: MutableMap = mutableMapOf() handlers.put("/rc/control", Control(controlConstructor.DirectionRequest, controlConstructor.DirectionResponse)) @@ -31,7 +36,8 @@ fun main(args: Array) { handlers.put("/loadBin", LoadBin(carkotConstructor.Upload, carkotConstructor.UploadResult)) - //todo work with main server + handlers.put("/route", SetRoute(routeConstructor.RouteRequest, routeConstructor.RouteResponse)) + handlers.put("/getLocation", GetLocation(null, locationConstructor.LocationResponse)) net.server.start(handlers, serverPort) val udev = Udev() @@ -61,4 +67,9 @@ fun require(name: String): dynamic { @native fun setInterval(callBack: () -> Unit, ms: Int) { +} + +@native +fun setTimeout(callBack: () -> Unit, ms: Int) { + } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/net/server/handlers/AbstractHandler.kt b/car_srv/kotlinSrv/src/net/server/handlers/AbstractHandler.kt index f144a1ce355..495a84289ce 100644 --- a/car_srv/kotlinSrv/src/net/server/handlers/AbstractHandler.kt +++ b/car_srv/kotlinSrv/src/net/server/handlers/AbstractHandler.kt @@ -18,17 +18,16 @@ abstract class AbstractHandler(protoDecoder: dynamic, protoEncoder: dynamic) { fun execute(data: List, response: dynamic) { - val message = if (protoDecoder != null) protoDecoder.decode(data.toByteArray()) else null val resultMessage: dynamic = {} - js("resultMessage = {}")//todo bad? + js("resultMessage = {}") val afterExecute: () -> Unit = { if (this.protoEncoder != null) { val protoEn = this.protoEncoder//temporarily:) val resultMsg = resultMessage - val resultObject = js("new protoEn(resultMsg)") - val resultBuffer = resultObject.encode() - response.write(trimBuffer(resultBuffer.buffer, resultBuffer.limit)) + val resultBuffer = js("new protoEn(resultMsg)").encode() + val trimBuffer = trimBuffer(resultBuffer.buffer, resultBuffer.limit) + response.write(trimBuffer) } response.end() } diff --git a/car_srv/kotlinSrv/src/net/server/handlers/main/GetLocation.kt b/car_srv/kotlinSrv/src/net/server/handlers/main/GetLocation.kt new file mode 100644 index 00000000000..b426fa95d4c --- /dev/null +++ b/car_srv/kotlinSrv/src/net/server/handlers/main/GetLocation.kt @@ -0,0 +1,19 @@ +package net.server.handlers.main + +import net.server.handlers.AbstractHandler + +/** + * Created by user on 7/28/16. + */ +class GetLocation : AbstractHandler { + + constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder) + + override fun makeResponse(message: dynamic, responseMessage: dynamic, finalCallback: () -> Unit) { + val car = MicroController.instance.car + val locationResponseData = {} + js("locationResponseData = {x:car.x, y:car.y, angle:car.angle}") + responseMessage.locationResponseData = locationResponseData + finalCallback.invoke() + } +} \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt b/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt new file mode 100644 index 00000000000..0270b9de7c9 --- /dev/null +++ b/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt @@ -0,0 +1,22 @@ +package net.server.handlers.main + +import net.server.handlers.AbstractHandler + +/** + * Created by user on 7/28/16. + */ +class SetRoute : AbstractHandler { + + constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder) + + override fun makeResponse(message: dynamic, responseMessage: dynamic, finalCallback: () -> Unit) { + val car = MicroController.instance.car + + car.routeExecutor.executeRoute(message) + + responseMessage.code = 0 + responseMessage.errorMsg = "" + + finalCallback.invoke() + } +} \ No newline at end of file