diff --git a/server/.idea/modules/server.iml b/server/.idea/modules/server.iml index 59f3a1842dc..8b292b004de 100644 --- a/server/.idea/modules/server.iml +++ b/server/.idea/modules/server.iml @@ -4,6 +4,9 @@ + + + @@ -17,9 +20,16 @@ - - - + + + + + + + + + + \ No newline at end of file diff --git a/server/build.gradle b/server/build.gradle index 764aa3fe097..2c7fda93457 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -21,13 +21,11 @@ repositories { mavenCentral() } -task compileProto(type: Exec) { - /* - * XXX Kotlin proto compiler calling convention will change soon. - * It would provide fixed path to protoc in its project directory. - */ - executable "./compileProto.sh" +sourceSets { + main.kotlin.srcDirs += 'src/main/java' + main.kotlin.srcDirs += '../proto/protofiles_sources/out' } + task buildProtoLib(type: Copy) { /* * XXX Will need to rework. @@ -54,8 +52,6 @@ task getDeps(type: Copy) { } build.dependsOn getDeps -compileKotlin.dependsOn compileProto -compileProto.dependsOn buildProtoLib jar { manifest { @@ -70,5 +66,5 @@ jar { dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "io.netty:netty-all:4.1.2.Final" - testCompile group: 'junit', name: 'junit', version: '4.11' + compile files ("../proto/compiler/build/protokot-runtime.jar") } diff --git a/server/src/main/java/ServerMain.kt b/server/src/main/java/ServerMain.kt index 3aa710b794e..2be83f7d386 100644 --- a/server/src/main/java/ServerMain.kt +++ b/server/src/main/java/ServerMain.kt @@ -66,15 +66,19 @@ fun main(args: Array) { if (car != null) { println("print way points in polar coordinate als [distance] [rotation angle] in metres and degrees. after enter all points print \"done\". for reset route print \"reset\"") println("e.g. for move from (x,y) to (x+1,y) and back to (x,y) u need enter: 1 0[press enter] 1 180[press enter] done") - val routeBuilder = RouteRequest.BuilderRouteRequest() + + val distances = arrayListOf() + val angles = arrayListOf() while (true) { val wayPointInputString = readLine()!! if (wayPointInputString.equals("reset", true)) { break } else if (wayPointInputString.equals("done", true)) { - val requestBytes = ByteArrayOutputStream() - routeBuilder.build().writeTo(CodedOutputStream(requestBytes)) - val request = DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, setRouteUrl, Unpooled.copiedBuffer(requestBytes.toByteArray())) + val routeBuilder = RouteRequest.BuilderRouteRequest(distances.toIntArray(), angles.toIntArray()) + val requestObject = routeBuilder.build() + val requestBytes = ByteArray(requestObject.getSizeNoTag()) + requestObject.writeTo(CodedOutputStream(requestBytes)) + val request = DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, setRouteUrl, Unpooled.copiedBuffer(requestBytes)) request.headers().set(HttpHeaderNames.HOST, car.host) request.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE) request.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, request.content().readableBytes()) @@ -88,17 +92,17 @@ fun main(args: Array) { break } else { val wayPointData = wayPointInputString.split(" ") - val distance: Double - val angle: Double + val distance: Int + val angle: Int try { - distance = wayPointData[0].toDouble() - angle = wayPointData[1].toDouble() + distance = wayPointData[0].toInt() + angle = wayPointData[1].toInt() } catch (e: NumberFormatException) { println("error in convertion angle or distance to double. try again") continue } - val wayPoint = RouteRequest.WayPoint.BuilderWayPoint().setDistance(distance).setAngle_delta(angle).build() - routeBuilder.addWayPoint(wayPoint) + distances.add(distance) + angles.add(angle) } } } else { diff --git a/server/src/main/java/car/client/ClientHandler.kt b/server/src/main/java/car/client/ClientHandler.kt index fedcef505d7..88f52cfbc3f 100644 --- a/server/src/main/java/car/client/ClientHandler.kt +++ b/server/src/main/java/car/client/ClientHandler.kt @@ -1,7 +1,6 @@ package car.client import CodedInputStream -import InvalidProtocolBufferException import LocationResponse import getLocationUrl import io.netty.channel.ChannelHandlerContext @@ -9,8 +8,6 @@ import io.netty.channel.SimpleChannelInboundHandler import io.netty.handler.codec.http.DefaultHttpContent import io.netty.util.AttributeKey import objects.Environment -import java.io.ByteArrayInputStream -import java.util.* /** * Created by user on 7/8/16. @@ -27,22 +24,18 @@ class ClientHandler : SimpleChannelInboundHandler { val environment = Environment.instance when (url) { getLocationUrl -> { - try { - val response = LocationResponse.BuilderLocationResponse().build() - response.mergeFrom(CodedInputStream(ByteArrayInputStream(contentBytes))) + val response = LocationResponse.BuilderLocationResponse(LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build(), 0).build() + response.mergeFrom(CodedInputStream(contentBytes)) - if (response.code == 0) { - val data = response.locationResponseData - synchronized(environment, { - val car = environment.map.get(carUid) - if (car != null) { - car.x = data.x - car.y = data.y - } - }) - } - } catch (e: InvalidProtocolBufferException) { - println("invalic proto format!") + if (response.code == 0) { + val data = response.locationResponseData + synchronized(environment, { + val car = environment.map.get(carUid) + if (car != null) { + car.x = data.x + car.y = data.y + } + }) } } else -> { diff --git a/server/src/main/java/car/server/Handler.kt b/server/src/main/java/car/server/Handler.kt index 4cac677a934..13d5c0858ee 100644 --- a/server/src/main/java/car/server/Handler.kt +++ b/server/src/main/java/car/server/Handler.kt @@ -4,7 +4,6 @@ import CodedInputStream import CodedOutputStream import ConnectionRequest import ConnectionResponse -import InvalidProtocolBufferException import RouteDoneRequest import RouteDoneResponse import connectUrl @@ -15,8 +14,6 @@ import io.netty.channel.SimpleChannelInboundHandler import io.netty.handler.codec.http.* import objects.Environment import routeDoneUrl -import java.io.ByteArrayInputStream -import java.io.ByteArrayOutputStream /** * Created by user on 7/6/16. @@ -30,28 +27,22 @@ class Handler : SimpleChannelInboundHandler() { val environment = Environment.instance var success = true; - val answer: ByteArrayOutputStream = ByteArrayOutputStream() + var answer = ByteArray(0) when (url) { connectUrl -> { - val data = ConnectionRequest.BuilderConnectionRequest().build(); - try { - data.mergeFrom(CodedInputStream(ByteArrayInputStream(contentBytes))) - } catch (e: InvalidProtocolBufferException) { - success = false; - ConnectionResponse.BuilderConnectionResponse().setCode(1).setErrorMsg("invalid protobuf request").build().writeTo(CodedOutputStream(answer)) - } + val data = ConnectionRequest.BuilderConnectionRequest(IntArray(0), 0).build(); + data.mergeFrom(CodedInputStream(contentBytes)) if (success) { - val uid = environment.connectCar(data.ip, data.port) - ConnectionResponse.BuilderConnectionResponse().setUid(uid).build().writeTo(CodedOutputStream(answer)) + val ipStr = data.ipValues.map { elem -> elem.toString() }.reduce { elem1, elem2 -> elem1 + "." + elem2 } + val uid = environment.connectCar(ipStr, data.port) + val responseObject = ConnectionResponse.BuilderConnectionResponse(uid, 0).build() + answer = ByteArray(responseObject.getSizeNoTag()) + responseObject.writeTo(CodedOutputStream(answer)) } } routeDoneUrl -> { - val data = RouteDoneRequest.BuilderRouteDoneRequest().build() - try { - data.mergeFrom(CodedInputStream(ByteArrayInputStream(contentBytes))) - } catch (e: InvalidProtocolBufferException) { - success = false; - } + val data = RouteDoneRequest.BuilderRouteDoneRequest(0).build() + data.mergeFrom(CodedInputStream(contentBytes)) if (success) { val id = data.uid synchronized(environment.map, { @@ -59,10 +50,14 @@ class Handler : SimpleChannelInboundHandler() { if (car != null) { car.free = true car.lastAction = System.currentTimeMillis() - RouteDoneResponse.BuilderRouteDoneResponse().setCode(0).setErrorMsg("").build().writeTo(CodedOutputStream(answer)) + val responseObject = RouteDoneResponse.BuilderRouteDoneResponse(0).build() + answer = ByteArray(responseObject.getSizeNoTag()) + responseObject.writeTo(CodedOutputStream(answer)) } else { success = false - RouteDoneResponse.BuilderRouteDoneResponse().setCode(2).setErrorMsg("car not found by id").build().writeTo(CodedOutputStream(answer)) + val responseObject = RouteDoneResponse.BuilderRouteDoneResponse(2).build() + answer = ByteArray(responseObject.getSizeNoTag()) + responseObject.writeTo(CodedOutputStream(answer)) } }) } @@ -71,7 +66,7 @@ class Handler : SimpleChannelInboundHandler() { success = false } } - val response = DefaultFullHttpResponse(HttpVersion.HTTP_1_1, if (success) HttpResponseStatus.OK else HttpResponseStatus.BAD_REQUEST, Unpooled.copiedBuffer(answer.toByteArray())) + val response = DefaultFullHttpResponse(HttpVersion.HTTP_1_1, if (success) HttpResponseStatus.OK else HttpResponseStatus.BAD_REQUEST, Unpooled.copiedBuffer(answer)) response.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, response.content().readableBytes()) ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE); } diff --git a/server/src/main/java/objects/Car.kt b/server/src/main/java/objects/Car.kt index 6400c3e3bde..c969a9335a7 100644 --- a/server/src/main/java/objects/Car.kt +++ b/server/src/main/java/objects/Car.kt @@ -12,16 +12,16 @@ class Car constructor(uid: Int, host: String, port: Int) { var free: Boolean var lastAction: Long - var x: Double - var y: Double + var x: Int + var y: Int init { this.uid = uid this.host = host this.port = port this.free = true - x = 0.toDouble() - y = 0.toDouble() + x = 0 + y = 0 this.lastAction = System.currentTimeMillis() }