diff --git a/car_srv/kotlinSrv/src/CarState.kt b/car_srv/kotlinSrv/src/CarState.kt index 1cc8e1bace2..ce264c5ac09 100644 --- a/car_srv/kotlinSrv/src/CarState.kt +++ b/car_srv/kotlinSrv/src/CarState.kt @@ -1,14 +1,3 @@ -import control.RouteExecutor -import control.emulator.RouteExecutorImpl.MoveDirection - -private val MOVE_VELOCITY = 0.3278 -private val ROTATION_VELOCITY = 12.3 - -// TODO make Car class mutable state saving entity -// that almost doesn't have behavior -/** - * Created by user on 7/27/16. - */ class CarState private constructor() { //position var x: Double diff --git a/car_srv/kotlinSrv/src/Config.kt b/car_srv/kotlinSrv/src/Config.kt index 48b9f9b70e3..94e4ea20e8a 100644 --- a/car_srv/kotlinSrv/src/Config.kt +++ b/car_srv/kotlinSrv/src/Config.kt @@ -1,6 +1,3 @@ -/** - * Created by user on 8/16/16. - */ class Config(val configFileName: String = "config.cfg") { @@ -10,7 +7,7 @@ class Config(val configFileName: String = "config.cfg") { fun loadConfig(): Boolean { try { - fs.accessSync(configFileName, fs.F_OK); + fs.accessSync(configFileName, fs.F_OK) } catch (e: dynamic) { // create it fs.openSync(configFileName, "w") diff --git a/car_srv/kotlinSrv/src/JSImport.kt b/car_srv/kotlinSrv/src/JSImport.kt index 9f4848f51b2..7da11dfb356 100644 --- a/car_srv/kotlinSrv/src/JSImport.kt +++ b/car_srv/kotlinSrv/src/JSImport.kt @@ -1,20 +1,2 @@ -/** - * Created by user on 8/18/16. - */ - @native fun require(name: String): dynamic = noImpl - -@native -fun setInterval(callBack: () -> Unit, ms: Int): dynamic = noImpl - -@native -fun setTimeout(callBack: () -> Unit, ms: Int): dynamic = noImpl - -fun encodeProtoBuf(protoMessage: dynamic): ByteArray { - val protoSize = protoMessage.getSizeNoTag() - val routeBytes = ByteArray(protoSize) - - protoMessage.writeTo(CodedOutputStream(routeBytes)) - return routeBytes -} \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/MCConnectObservable.kt b/car_srv/kotlinSrv/src/MCConnectObservable.kt deleted file mode 100644 index db9c4308321..00000000000 --- a/car_srv/kotlinSrv/src/MCConnectObservable.kt +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Created by user on 8/18/16. - */ -interface MCConnectObservable { - - fun addObserver(MCConnectObserver: MCConnectObserver) - fun removeObserver(MCConnectObserver: MCConnectObserver) - -} \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/MCConnectObserver.kt b/car_srv/kotlinSrv/src/MCConnectObserver.kt index 12e07fc0e2e..9e1ba9649cc 100644 --- a/car_srv/kotlinSrv/src/MCConnectObserver.kt +++ b/car_srv/kotlinSrv/src/MCConnectObserver.kt @@ -1,9 +1,6 @@ -/** - * Created by user on 8/18/16. - */ -interface MCConnectObserver { +interface MCConnectObserver { - fun connect(vararg params: V) + fun connect(transportFileName: V) fun disconnect() } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/MCConnection.kt b/car_srv/kotlinSrv/src/MCConnection.kt index e264eea6cd0..cc41690f068 100644 --- a/car_srv/kotlinSrv/src/MCConnection.kt +++ b/car_srv/kotlinSrv/src/MCConnection.kt @@ -1,34 +1,27 @@ -/** - * Created by user on 8/16/16. - */ - -class McTransport() { +class McTransport() : MCConnectObserver { private var writeStream: dynamic = null private var readStream: dynamic = null private val resultBytes = arrayListOf() private var callback: (bytes: ByteArray) -> Unit = {} + init { + McConditionMonitor.instance.addObserver(this) + } + fun sendBytes(bytes: ByteArray) { val bytesHeader = encodeInt(bytes.size) - println("write: " + bytesHeader) + println("write: $bytesHeader") writeStream.write(js("new Buffer(bytesHeader)")) - println("write: " + bytes) + println("write: $bytes") writeStream.write(js("new Buffer(bytes)")) } - fun sendBytes(byte: Byte) { - sendBytes(ByteArray(1, { idx -> byte })) - } - - fun initStreams(pathToFile: String) { - writeStream = fs.createWriteStream(pathToFile); + private fun initStreams(pathToFile: String) { + writeStream = fs.createWriteStream(pathToFile) readStream = fs.createReadStream(pathToFile) readStream.on("readable", fun() { - val data = readStream.read() - if (data == null) { - return - } + val data = readStream.read() ?: return var messageLength = getBodyLength(resultBytes) for (i in 0..data.length - 1) { @@ -43,11 +36,19 @@ class McTransport() { }) } + override fun connect(transportFileName: String) { + initStreams(transportFileName) + } + + override fun disconnect() { + closeStreams() + } + fun setCallBack(cb: (bytes: ByteArray) -> Unit) { this.callback = cb } - fun closeStreams() { + private fun closeStreams() { writeStream.end() writeStream = null readStream = null diff --git a/car_srv/kotlinSrv/src/Main.kt b/car_srv/kotlinSrv/src/Main.kt index 601c572f9d1..0162766d76e 100644 --- a/car_srv/kotlinSrv/src/Main.kt +++ b/car_srv/kotlinSrv/src/Main.kt @@ -1,22 +1,18 @@ -import control.car.RouteExecutorToUsb +import control.car.ControllerToUsb +import net.Client import net.server.handlers.AbstractHandler +import net.server.handlers.ProtoType import net.server.handlers.debug.Memory import net.server.handlers.flash.LoadBin import net.server.handlers.main.GetLocation import net.server.handlers.main.SetRoute import net.server.handlers.rc.Control -/** - * Created by user on 7/26/16. - */ - -val deltaTimeLocationRefresh: Int = 100 - val carServerPort: Int = 8888 val mainServerPort = 7925 val config = Config() -val fs = require("fs") +val fs: dynamic = require("fs") fun main(args: Array) { if (!config.loadConfig()) { println("incorrect config format!") @@ -25,17 +21,21 @@ fun main(args: Array) { val handlers: MutableMap = mutableMapOf() - val routeExecutor = RouteExecutorToUsb() + val carController = ControllerToUsb() handlers.put("/rc/control", Control()) handlers.put("/loadBin", LoadBin()) - handlers.put("/route", SetRoute(routeExecutor)) + handlers.put("/route", SetRoute(carController)) handlers.put("/getLocation", GetLocation()) - handlers.put("/debug/memoty", Memory()) + handlers.put("/debug/memory", Memory()) + handlers.put("/protoType", ProtoType()) + + Client.instance.connectToServer(config.getCarIp(), carServerPort) + + mcTransport.setCallBack { bytes -> + println("read: " + bytes.toString()) + } net.server.start(handlers, carServerPort) val mcConditionMonitor = McConditionMonitor.instance mcConditionMonitor.start() - - MicroController.instance.start() - } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/McConditionMonitor.kt b/car_srv/kotlinSrv/src/McConditionMonitor.kt index 1da22a83f9b..d1672893cc2 100644 --- a/car_srv/kotlinSrv/src/McConditionMonitor.kt +++ b/car_srv/kotlinSrv/src/McConditionMonitor.kt @@ -2,7 +2,7 @@ * Created by user on 7/27/16. * observable class, check mc condition and notify observers about changes */ -class McConditionMonitor private constructor() : MCConnectObservable { +class McConditionMonitor private constructor() { private val udev: dynamic = require("udev") private val exec: dynamic = require("child_process").execSync @@ -25,14 +25,10 @@ class McConditionMonitor private constructor() : MCConnectObservable { readFileIfMcConnected() } - override fun addObserver(MCConnectObserver: MCConnectObserver) { + fun addObserver(MCConnectObserver: MCConnectObserver) { observersList.add(MCConnectObserver) } - override fun removeObserver(MCConnectObserver: MCConnectObserver) { - observersList.remove(MCConnectObserver) - } - private fun notifyMCConnect(nodeName: String) { for (observer in observersList) { observer.connect(nodeName) @@ -46,9 +42,9 @@ class McConditionMonitor private constructor() : MCConnectObservable { } private fun isOurMcDevice(device: dynamic): Boolean { - val microController = MicroController.instance - return (device.ID_VENDOR_ID == microController.vendorID) - && (device.ID_MODEL_ID == microController.modelID) + val mcState = McState.instance + return (device.ID_VENDOR_ID == mcState.VENDORID) + && (device.ID_MODEL_ID == mcState.MODELID) && (device.SUBSYSTEM == "tty") } @@ -59,8 +55,6 @@ class McConditionMonitor private constructor() : MCConnectObservable { private fun connectDevice(device: dynamic) { val transportFile: String = device.DEVNAME - mcTransport.initStreams(transportFile) - McState.instance.connect() println("mc connected. transport file is " + transportFile) exec("stty -F $transportFile raw -echo -echoe -echok") notifyMCConnect(transportFile) diff --git a/car_srv/kotlinSrv/src/McState.kt b/car_srv/kotlinSrv/src/McState.kt index d2887a6355f..40658e109fa 100644 --- a/car_srv/kotlinSrv/src/McState.kt +++ b/car_srv/kotlinSrv/src/McState.kt @@ -1,20 +1,27 @@ -/** - * Created by user on 8/18/16. - */ -class McState { +class McState : MCConnectObserver { + val VENDORID = "0483" + val MODELID = "5740" private var connected = false + private var transportFileName = "" + init { + McConditionMonitor.instance.addObserver(this) + } fun isConnected(): Boolean { return connected } - fun connect() { - this.connected = true + override fun connect(transportFileName: String) { + this.transportFileName = transportFileName + connected = true } + override fun disconnect() { + connected = false + } companion object { val instance = McState() diff --git a/car_srv/kotlinSrv/src/MicroController.kt b/car_srv/kotlinSrv/src/MicroController.kt deleted file mode 100644 index 624a9e1b1a0..00000000000 --- a/car_srv/kotlinSrv/src/MicroController.kt +++ /dev/null @@ -1,67 +0,0 @@ -import control.emulator.RouteExecutorImpl -import control.car.RouteExecutorToUsb -import exceptions.RcControlException -import kotlin.js.Date - -/** - * Created by user on 7/28/16. - */ -class MicroController private constructor() { - - var uid: Int - - var rcSid: Int - var rcLastRequest: Int//heartbeat - - val vendorID: String - val modelID: String - var transportFilePath: String - - val car: CarState - - init { - this.rcSid = 0 - this.rcLastRequest = 0 - this.uid = 0 - this.vendorID = "0483" - this.modelID = "5740" - this.transportFilePath = "" - - - this.car = CarState.instance - } - - fun start() { - - connectToServer(config.getCarIp(), carServerPort) - - mcTransport.setCallBack { bytes -> - println("read: " + bytes.toString()) - } - -// setInterval({ this.car.refreshLocation(deltaTimeLocationRefresh) }, deltaTimeLocationRefresh); - } - - fun connectToServer(thisIp: String, thisPort: Int) { - val requestObject = ConnectionRequest.BuilderConnectionRequest(thisIp.split(".").map { str -> parseInt(str, 10) }.toIntArray(), thisPort).build() - val bytes = ByteArray(requestObject.getSizeNoTag()) - requestObject.writeTo(CodedOutputStream(bytes)) - net.sendRequest(js("new Buffer(bytes)"), "/connect", { resultData -> - val responseObject = ConnectionResponse.BuilderConnectionResponse(0, 0).build() - responseObject.mergeFrom(CodedInputStream(resultData)) - if (responseObject.code == 0) { - this.uid = responseObject.uid - } else { - println("server login error\n" + - "code: ${responseObject.code}") - } - }, { error -> - println("connection error (to main server). error message:\n" + error) - }) - } - - companion object { - val instance = MicroController() - } - -} diff --git a/car_srv/kotlinSrv/src/control/RouteExecutor.kt b/car_srv/kotlinSrv/src/control/Controller.kt similarity index 52% rename from car_srv/kotlinSrv/src/control/RouteExecutor.kt rename to car_srv/kotlinSrv/src/control/Controller.kt index 01b23ee0a93..3e48056b1da 100644 --- a/car_srv/kotlinSrv/src/control/RouteExecutor.kt +++ b/car_srv/kotlinSrv/src/control/Controller.kt @@ -2,11 +2,10 @@ package control import RouteRequest -/** - * Created by user on 7/27/16. - */ -interface RouteExecutor { +interface Controller { fun executeRoute(route: RouteRequest) + fun getSensorData(degrees: IntArray): IntArray + } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/control/car/RouteExecutorToUsb.kt b/car_srv/kotlinSrv/src/control/car/ControllerToUsb.kt similarity index 69% rename from car_srv/kotlinSrv/src/control/car/RouteExecutorToUsb.kt rename to car_srv/kotlinSrv/src/control/car/ControllerToUsb.kt index 2f75f1e1c09..455ca800e28 100644 --- a/car_srv/kotlinSrv/src/control/car/RouteExecutorToUsb.kt +++ b/car_srv/kotlinSrv/src/control/car/ControllerToUsb.kt @@ -1,12 +1,11 @@ package control.car -import RouteRequest -import control.RouteExecutor -import encodeProtoBuf -import mcTransport import CodedOutputStream +import RouteRequest +import control.Controller +import mcTransport -class RouteExecutorToUsb : RouteExecutor { +class ControllerToUsb : Controller { override fun executeRoute(route: RouteRequest) { println("Execute Route:") @@ -21,4 +20,8 @@ class RouteExecutorToUsb : RouteExecutor { mcTransport.sendBytes(routeBytes) } -} + + override fun getSensorData(degrees: IntArray): IntArray { + return IntArray(0)//todo make after connect sensor to car + } +} \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/control/emulator/RouteExecutorImpl.kt b/car_srv/kotlinSrv/src/control/emulator/ControllerEmulator.kt similarity index 75% rename from car_srv/kotlinSrv/src/control/emulator/RouteExecutorImpl.kt rename to car_srv/kotlinSrv/src/control/emulator/ControllerEmulator.kt index f7df8d962ab..e65ff0eb85d 100644 --- a/car_srv/kotlinSrv/src/control/emulator/RouteExecutorImpl.kt +++ b/car_srv/kotlinSrv/src/control/emulator/ControllerEmulator.kt @@ -1,49 +1,47 @@ package control.emulator import RouteRequest -import control.RouteExecutor +import control.Controller -/** - * Created by user on 7/27/16. - */ -class RouteExecutorImpl : RouteExecutor { +class ControllerEmulator : Controller { + + private val MOVE_VELOCITY = 0.3278 + private val ROTATION_VELOCITY = 12.3 enum class MoveDirection { LEFT, RIGHT, FORWARD, BACKWARD, - STOP + ERROR } override fun executeRoute(route: RouteRequest) { - val angles = route.angles - val distances = route.distances + val moveTimes = route.moveTime + val moveDirections = route.moveDirection + //list of move direction and time to this move in ms val commands: MutableList> = mutableListOf() - for (i in 0..angles.size - 1) { - val angle: Int = angles[i] - val distance: Int = distances[i] - if (angle != 0) { - val command = if (angle > 180) { - MoveDirection.RIGHT - } else { - MoveDirection.LEFT - } - commands.add(Pair(command, angle)) - } - if (distance != 0) { - val command = if (distance > 0) { - MoveDirection.FORWARD - } else { - MoveDirection.BACKWARD - } - commands.add(Pair(command, distance)) - } + + moveTimes.forEachIndexed { idx, value -> + val moveDirection = + when (moveDirections[idx]) { + 0 -> MoveDirection.FORWARD + 1 -> MoveDirection.BACKWARD + 2 -> MoveDirection.LEFT + 3 -> MoveDirection.RIGHT + else -> MoveDirection.ERROR + } + + commands.add(Pair(moveDirection, value)) } - commands.add(Pair(MoveDirection.STOP, 0)) + executeCommand(commands, 0) } + override fun getSensorData(degrees: IntArray): IntArray { + throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. + } + fun executeCommand(commands: List>, currentCommandIdx: Int) { // if (currentCommandIdx == commands.size) { // MicroController.instance.car.routeDone() diff --git a/car_srv/kotlinSrv/src/exceptions/RcControlException.kt b/car_srv/kotlinSrv/src/exceptions/RcControlException.kt deleted file mode 100644 index 4c368fc918a..00000000000 --- a/car_srv/kotlinSrv/src/exceptions/RcControlException.kt +++ /dev/null @@ -1,8 +0,0 @@ -package exceptions - -/** - * Created by user on 7/28/16. - */ -class RcControlException : Exception() { - -} \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/net/Client.kt b/car_srv/kotlinSrv/src/net/Client.kt index 0d7ffe76082..c345db33b2e 100644 --- a/car_srv/kotlinSrv/src/net/Client.kt +++ b/car_srv/kotlinSrv/src/net/Client.kt @@ -1,34 +1,62 @@ package net -import require -import mainServerPort +import CodedInputStream +import CodedOutputStream +import ConnectionRequest +import ConnectionResponse import config +import mainServerPort +import require -/** - * Created by user on 7/28/16. - */ -val http = require("http") +class Client() { -fun sendRequest(dataBuffer: dynamic, url: String, successCallback: (responseData: ByteArray) -> Unit, errorCallback: (err: dynamic) -> Unit) { - val options: dynamic = {} - val serverAddress = config.getIp() - val port = mainServerPort - js("options = {hostname:serverAddress, port:port, path:url, method:'POST'}") + private val http = require("http") + private var uid: Int = -1 - val request = http.request(options, { response -> - val resData = mutableListOf() - response.on("data", { datas -> - for (i in 0..datas.length - 1) { - resData.add(datas[i]) + fun sendRequest(dataBuffer: dynamic, url: String, successCallback: (responseData: ByteArray) -> Unit, errorCallback: (err: dynamic) -> Unit) { + val options: dynamic = {} + //serverAddress, port and url used on js function. Idea don's see this + val serverAddress = config.getIp() + val port = mainServerPort + js("options = {hostname:serverAddress, port:port, path:url, method:'POST'}") + + val request = http.request(options, { response -> + val resData = mutableListOf() + response.on("data", { data -> + for (i in 0..data.length - 1) { + resData.add(data[i]) + } + }) + response.on("end", { + successCallback.invoke(resData.toByteArray()) + }) + }) + request.on("error", { err -> + errorCallback.invoke(err) + }) + request.write(dataBuffer) + request.end() + } + + fun connectToServer(thisIp: String, thisPort: Int) { + val requestObject = ConnectionRequest.BuilderConnectionRequest(thisIp.split(".").map { str -> parseInt(str, 10) }.toIntArray(), thisPort).build() + val bytes = ByteArray(requestObject.getSizeNoTag()) + requestObject.writeTo(CodedOutputStream(bytes)) + sendRequest(js("new Buffer(bytes)"), "/connect", { resultData -> + val responseObject = ConnectionResponse.BuilderConnectionResponse(0, 0).build() + responseObject.mergeFrom(CodedInputStream(resultData)) + if (responseObject.code == 0) { + this.uid = responseObject.uid + } else { + println("server login error\n" + + "code: ${responseObject.code}") } + }, { error -> + println("connection error (to main server). error message:\n" + error) }) - response.on("end", { - successCallback.invoke(resData.toByteArray()) - }) - }) - request.on("error", { err -> - errorCallback.invoke(err) - }) - request.write(dataBuffer) - request.end() + } + + companion object { + val instance = Client() + } } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/net/server/Server.kt b/car_srv/kotlinSrv/src/net/server/Server.kt index 118af2a0516..d970a117854 100644 --- a/car_srv/kotlinSrv/src/net/server/Server.kt +++ b/car_srv/kotlinSrv/src/net/server/Server.kt @@ -1,20 +1,16 @@ package net.server -import require import net.server.handlers.AbstractHandler - -/** - * Created by user on 7/27/16. - */ +import require fun start(handlers: MutableMap, port: Int) { val http = require("http") val url = require("url") http.createServer({ request, response -> val content = mutableListOf() - val urlName = url.parse(request.url).pathname; - val handler = handlers.get(urlName) + val urlName = url.parse(request.url).pathname + val handler = handlers[urlName] request.on("data", { data -> for (i in 0..data.length - 1) { @@ -23,9 +19,12 @@ fun start(handlers: MutableMap, port: Int) { }) request.on("end", { if (handler != null) { - handler.execute(content, response) + try { + handler.execute(content, response) + } catch (e: dynamic) { + response.end() + } } else { - //todo write error on incorrect url response.end() } }) diff --git a/car_srv/kotlinSrv/src/net/server/handlers/AbstractHandler.kt b/car_srv/kotlinSrv/src/net/server/handlers/AbstractHandler.kt index 94bc0b6695a..c505f9eac89 100644 --- a/car_srv/kotlinSrv/src/net/server/handlers/AbstractHandler.kt +++ b/car_srv/kotlinSrv/src/net/server/handlers/AbstractHandler.kt @@ -1,10 +1,14 @@ package net.server.handlers import CodedOutputStream +import DebugResponseMemoryStats +import DirectionResponse +import LocationResponse +import RouteDoneRequest +import RouteRequest +import RouteResponse +import UploadResult -/** - * Created by user on 7/27/16. - */ abstract class AbstractHandler { fun execute(data: List, response: dynamic) { @@ -18,4 +22,48 @@ abstract class AbstractHandler { abstract fun getBytesResponse(data: ByteArray, callback: (b: ByteArray) -> Unit) + protected fun encodeProtoBuf(protoMessage: T): ByteArray { + val routeBytes: ByteArray + if (protoMessage is LocationResponse) { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } else if (protoMessage is UploadResult) { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } else if (protoMessage is DebugResponseMemoryStats) { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } else if (protoMessage is DirectionResponse) { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } else if (protoMessage is RouteResponse) { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } else if (protoMessage is RouteRequest) { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } else if (protoMessage is RouteDoneRequest) { + val protoSize = protoMessage.getSizeNoTag() + routeBytes = ByteArray(protoSize) + val codedOutput = CodedOutputStream(routeBytes) + protoMessage.writeTo(codedOutput) + } else { + println("PROTO MESSAGE DON'T ENCODE!") + routeBytes = ByteArray(0) + } + return routeBytes + } + } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/net/server/handlers/ProtoType.kt b/car_srv/kotlinSrv/src/net/server/handlers/ProtoType.kt new file mode 100644 index 00000000000..7e1c61dc187 --- /dev/null +++ b/car_srv/kotlinSrv/src/net/server/handlers/ProtoType.kt @@ -0,0 +1,24 @@ +package net.server.handlers + +import McState +import TaskRequest +import mcTransport + +class ProtoType : AbstractHandler { + + val fromServerObjectBuilder: TaskRequest.BuilderTaskRequest + + constructor() : super() { + fromServerObjectBuilder = TaskRequest.BuilderTaskRequest(TaskRequest.TYPE.DEBUG) + } + + override fun getBytesResponse(data: ByteArray, callback: (ByteArray) -> Unit) { + if (!McState.instance.isConnected()) { + println("mc is disconnected!") + callback.invoke(ByteArray(0)) + return + } + mcTransport.sendBytes(data) + callback.invoke(ByteArray(0)) + } +} \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/net/server/handlers/debug/Memory.kt b/car_srv/kotlinSrv/src/net/server/handlers/debug/Memory.kt index 3e4336be722..3ac4de7236a 100644 --- a/car_srv/kotlinSrv/src/net/server/handlers/debug/Memory.kt +++ b/car_srv/kotlinSrv/src/net/server/handlers/debug/Memory.kt @@ -3,13 +3,9 @@ package net.server.handlers.debug import DebugRequest import DebugResponseMemoryStats import McState -import encodeProtoBuf import mcTransport import net.server.handlers.AbstractHandler -/** - * Created by user on 8/18/16. - */ class Memory : AbstractHandler { val fromServerObjectBuilder: DebugRequest.BuilderDebugRequest diff --git a/car_srv/kotlinSrv/src/net/server/handlers/flash/LoadBin.kt b/car_srv/kotlinSrv/src/net/server/handlers/flash/LoadBin.kt index 145970e9ac3..6cc81ba5b7a 100644 --- a/car_srv/kotlinSrv/src/net/server/handlers/flash/LoadBin.kt +++ b/car_srv/kotlinSrv/src/net/server/handlers/flash/LoadBin.kt @@ -3,14 +3,10 @@ package net.server.handlers.flash import CodedInputStream import Upload import UploadResult -import encodeProtoBuf import mcTransport import net.server.handlers.AbstractHandler import require -/** - * Created by user on 7/27/16. - */ class LoadBin : AbstractHandler { val exec: dynamic diff --git a/car_srv/kotlinSrv/src/net/server/handlers/main/GetLocation.kt b/car_srv/kotlinSrv/src/net/server/handlers/main/GetLocation.kt index 6f5c4e4fb4f..02a042bb5da 100644 --- a/car_srv/kotlinSrv/src/net/server/handlers/main/GetLocation.kt +++ b/car_srv/kotlinSrv/src/net/server/handlers/main/GetLocation.kt @@ -1,13 +1,9 @@ package net.server.handlers.main +import CarState import LocationResponse -import MicroController -import encodeProtoBuf import net.server.handlers.AbstractHandler -/** - * Created by user on 7/28/16. - */ class GetLocation : AbstractHandler { val toServerObjectBuilder: LocationResponse.BuilderLocationResponse @@ -18,8 +14,8 @@ class GetLocation : AbstractHandler { } override fun getBytesResponse(data: ByteArray, callback: (ByteArray) -> Unit) { - val car = MicroController.instance.car - val locationData = LocationResponse.LocationData.BuilderLocationData(car.x.toInt(), car.y.toInt(), car.angle.toInt()).build() + val carState = CarState.instance + val locationData = LocationResponse.LocationData.BuilderLocationData(carState.x.toInt(), carState.y.toInt(), carState.angle.toInt()).build() val responseMessage = toServerObjectBuilder.setLocationResponseData(locationData).build() callback.invoke(encodeProtoBuf(responseMessage)) } diff --git a/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt b/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt index 553f5c36694..7e0db967e90 100644 --- a/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt +++ b/car_srv/kotlinSrv/src/net/server/handlers/main/SetRoute.kt @@ -1,31 +1,25 @@ package net.server.handlers.main import CodedInputStream -import MicroController +import McState import RouteRequest import RouteResponse -import control.RouteExecutor -import CodedOutputStream +import control.Controller import net.server.handlers.AbstractHandler -/** - * Created by user on 7/28/16. - */ class SetRoute : AbstractHandler { val fromServerObjectBuilder: RouteRequest.BuilderRouteRequest val toServerObjectBuilder: RouteResponse.BuilderRouteResponse - val routeExecutor: RouteExecutor + val controller: Controller - constructor(routeExecutor: RouteExecutor) : super() { - this.routeExecutor = routeExecutor + constructor(routeExecutor: Controller) : super() { + this.controller = routeExecutor this.fromServerObjectBuilder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) this.toServerObjectBuilder = RouteResponse.BuilderRouteResponse(0) } override fun getBytesResponse(data: ByteArray, callback: (ByteArray) -> Unit) { - println("set route handler") - val car = MicroController.instance.car val message = fromServerObjectBuilder.build() message.mergeFrom(CodedInputStream(data)) if (!McState.instance.isConnected()) { @@ -34,17 +28,9 @@ class SetRoute : AbstractHandler { callback.invoke(encodeProtoBuf(responseMessage)) return } - routeExecutor.executeRoute(message) + controller.executeRoute(message) val responseMessage = toServerObjectBuilder.setCode(0).build() callback.invoke(encodeProtoBuf(responseMessage)) } - fun encodeProtoBuf(protoMessage: RouteResponse): ByteArray { - val protoSize = protoMessage.getSizeNoTag() - val routeBytes = ByteArray(protoSize) - - protoMessage.writeTo(CodedOutputStream(routeBytes)) - return routeBytes - } - } \ No newline at end of file diff --git a/car_srv/kotlinSrv/src/net/server/handlers/rc/Control.kt b/car_srv/kotlinSrv/src/net/server/handlers/rc/Control.kt index 8229eb18ae1..0642e316aac 100644 --- a/car_srv/kotlinSrv/src/net/server/handlers/rc/Control.kt +++ b/car_srv/kotlinSrv/src/net/server/handlers/rc/Control.kt @@ -3,15 +3,9 @@ package net.server.handlers.rc import CodedInputStream import DirectionRequest import DirectionResponse -import MicroController -import control.emulator.RouteExecutorImpl.MoveDirection -import encodeProtoBuf -import exceptions.RcControlException +import control.emulator.ControllerEmulator.MoveDirection import net.server.handlers.AbstractHandler -/** - * Created by user on 7/27/16. - */ class Control : AbstractHandler { val fromServerObjectBuilder: DirectionRequest.BuilderDirectionRequest @@ -23,6 +17,7 @@ class Control : AbstractHandler { } override fun getBytesResponse(data: ByteArray, callback: (b: ByteArray) -> Unit) { + //TODO now this handler don't make nothing. need fix:) val message = fromServerObjectBuilder.build() message.mergeFrom(CodedInputStream(data)) val commandNumber = message.command @@ -45,13 +40,7 @@ class Control : AbstractHandler { } else -> MoveDirection.STOP } - val resultCode: Int - try { -// MicroController.instance.RcMove(command, sid) - resultCode = 0 - } catch (e: RcControlException) { - resultCode = 12 - } + val resultCode: Int = 0 val resultMessage = toServerObjectBuilder.setCode(resultCode).build() callback.invoke(encodeProtoBuf(resultMessage)) }