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)
}
}