From 0bfbc0e50a83c1e2ecd1df6e42a01c9577877aa4 Mon Sep 17 00:00:00 2001 From: MaximZaitsev Date: Tue, 6 Sep 2016 17:52:09 +0300 Subject: [PATCH] format room config file changed to xml --- car_srv/kotlinSrv/package.json | 3 +- car_srv/kotlinSrv/room_config_example.txt | 5 --- car_srv/kotlinSrv/room_config_example.xml | 9 ++++++ car_srv/kotlinSrv/src/Main.kt | 1 + car_srv/kotlinSrv/src/room/Room.kt | 17 +++++++--- car_srv/kotlinSrv/src/room/Wall.kt | 38 +++++++++-------------- 6 files changed, 39 insertions(+), 34 deletions(-) delete mode 100644 car_srv/kotlinSrv/room_config_example.txt create mode 100644 car_srv/kotlinSrv/room_config_example.xml diff --git a/car_srv/kotlinSrv/package.json b/car_srv/kotlinSrv/package.json index a97f563a17d..8a807668a67 100644 --- a/car_srv/kotlinSrv/package.json +++ b/car_srv/kotlinSrv/package.json @@ -12,6 +12,7 @@ "devDependencies": { "udev": "^0.3.0", "commander": "^2.9.0", - "protobufjs": "^5.0.1" + "protobufjs": "^5.0.1", + "xml-parser": "^1.2.1" } } diff --git a/car_srv/kotlinSrv/room_config_example.txt b/car_srv/kotlinSrv/room_config_example.txt deleted file mode 100644 index 5ec609d44b3..00000000000 --- a/car_srv/kotlinSrv/room_config_example.txt +++ /dev/null @@ -1,5 +0,0 @@ -xFrom: 200, yFrom: 300, xTo: -150, yTo: 300 -xFrom: -150, yFrom: 300, xTo: -150, yTo: -45 -xFrom: -150, yFrom: -45, xTo: 200, yTo: -45 -xFrom: 200, yFrom: -45, xTo: 200, yTo: 300 - diff --git a/car_srv/kotlinSrv/room_config_example.xml b/car_srv/kotlinSrv/room_config_example.xml new file mode 100644 index 00000000000..badaf03b020 --- /dev/null +++ b/car_srv/kotlinSrv/room_config_example.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/car_srv/kotlinSrv/src/Main.kt b/car_srv/kotlinSrv/src/Main.kt index aabb105d316..3db6853dcb5 100644 --- a/car_srv/kotlinSrv/src/Main.kt +++ b/car_srv/kotlinSrv/src/Main.kt @@ -16,6 +16,7 @@ val mainServerPort = 7925 val config = Config() val fs: dynamic = require("fs") fun main(args: Array) { + if (!config.loadConfig()) { println("incorrect config format!") js("process.exit(1)") diff --git a/car_srv/kotlinSrv/src/room/Room.kt b/car_srv/kotlinSrv/src/room/Room.kt index 71610b09298..80176964ce3 100644 --- a/car_srv/kotlinSrv/src/room/Room.kt +++ b/car_srv/kotlinSrv/src/room/Room.kt @@ -1,6 +1,7 @@ package room import geometry.Line +import require class Room() { @@ -12,12 +13,18 @@ class Room() { companion object { fun roomFromString(roomString: String): Room? { + val xmlParser = require("xml-parser") + val xmlObject = xmlParser(roomString) + val wallsArray: dynamic + try { + wallsArray = xmlObject.root.children[0].children + } catch (e: Exception) { + return null + } val result = Room() - roomString.split("\n").forEach { wallString -> - if (!wallString.equals("")) { - val wall = Wall.wallFromString(wallString) ?: return null - result.walls.add(wall) - } + for (i in 0..(parseInt(wallsArray.length) - 1)) { + val wall = Wall.wallFromXml(wallsArray[i]) ?: return null + result.walls.add(wall) } return result } diff --git a/car_srv/kotlinSrv/src/room/Wall.kt b/car_srv/kotlinSrv/src/room/Wall.kt index 4b1e5043282..812c616c3fa 100644 --- a/car_srv/kotlinSrv/src/room/Wall.kt +++ b/car_srv/kotlinSrv/src/room/Wall.kt @@ -5,30 +5,22 @@ import geometry.Line class Wall constructor(val line: Line, val xFrom: Int, val xTo: Int, val yFrom: Int, val yTo: Int) { companion object { - fun wallFromString(wall: String): Wall? { - val points = wall.replace(" ", "").split(",") - var xFrom = 0 - var xTo = 0 - var yTo = 0 - var yFrom = 0 - points.forEach { - val keyValue = it.split(":") - if (keyValue.size != 2) { - return null - } - try { - when (keyValue[0]) { - "xFrom" -> xFrom = parseInt(keyValue[1]) - "yFrom" -> yFrom = parseInt(keyValue[1]) - "xTo" -> xTo = parseInt(keyValue[1]) - "yTo" -> yTo = parseInt(keyValue[1]) - } - } catch (e: Exception) { - return null - } + fun wallFromXml(wall: dynamic): Wall? { + val points = wall.attributes + val startX: Int + val endX: Int + val endY: Int + val startY: Int + try { + startX = parseInt(points.startX) + startY = parseInt(points.startY) + endX = parseInt(points.endX) + endY = parseInt(points.endY) + } catch (e: NumberFormatException) { + return null } - val line = Line((yFrom - yTo).toDouble(), (xTo - xFrom).toDouble(), (xFrom * yTo - yFrom * xTo).toDouble()) - return Wall(line, xFrom, xTo, yFrom, yTo) + val line = Line((startY - endY).toDouble(), (endX - startX).toDouble(), (startX * endY - startY * endX).toDouble()) + return Wall(line, startX, endX, startY, endY) } }