maked all rc handlers and st-flash handler

This commit is contained in:
MaximZaitsev
2016-07-28 16:12:04 +03:00
parent 5fe387db7f
commit ce0d4e2912
7 changed files with 165 additions and 69 deletions
+24 -37
View File
@@ -1,46 +1,33 @@
package server
package net.server
import require
import server.handlers.AbstractHandler
import net.server.handlers.AbstractHandler
/**
* Created by user on 7/27/16.
*/
class Server(handlers: MutableMap<String, AbstractHandler>) {
val http: dynamic
val url: dynamic
val handlers: MutableMap<String, AbstractHandler>
init {
http = require("http")
url = require("url")
this.handlers = handlers
}
fun start() {
http.createServer({ request, response ->
val content = mutableListOf<Byte>()
val urlName = url.parse(request.url).pathname;
val handler = handlers.get(urlName)
request.on("data", {
data ->
for (i in 0..data.length - 1) {
content.add(data[i])
}
})
request.on("end", {
if (handler != null) {
handler.execute(content, response)
} else {
//todo write error on incorrect url
response.end()
}
})
}).listen(8888)
}
fun start(handlers: MutableMap<String, AbstractHandler>, port:Int) {
val http = require("http")
val url = require("url")
http.createServer({ request, response ->
val content = mutableListOf<Byte>()
val urlName = url.parse(request.url).pathname;
val handler = handlers.get(urlName)
request.on("data", {
data ->
for (i in 0..data.length - 1) {
content.add(data[i])
}
})
request.on("end", {
if (handler != null) {
handler.execute(content, response)
} else {
//todo write error on incorrect url
response.end()
}
})
}).listen(port)
}
@@ -1,4 +1,6 @@
package server.handlers
package net.server.handlers
import trimBuffer
/**
* Created by user on 7/27/16.
@@ -16,25 +18,23 @@ abstract class AbstractHandler(protoDecoder: dynamic, protoEncoder: dynamic) {
fun execute(data: List<Byte>, response: dynamic) {
val message = protoDecoder.decode(data.toByteArray())
val message = if (protoDecoder != null) protoDecoder.decode(data.toByteArray()) else null
val resultMessage: dynamic = {}
js("resultMessage = {}")//todo bad?
val afterExecute: () -> Unit = {
val protoEn = this.protoEncoder//temporarily:)
val resultMsg = resultMessage
val resultObject = js("new protoEn(resultMsg)")
val resultBuffer = resultObject.encode()
val byteArray = ByteArray(resultBuffer.limit);
for (i in 0..resultBuffer.limit - 1) {
byteArray[i] = resultBuffer.buffer[i]
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))
}
response.write(js("new Buffer(byteArray)"))
response.end()
}
makeResult(message, resultMessage, afterExecute)
makeResponse(message, resultMessage, afterExecute)
}
abstract fun makeResult(message: dynamic, resultMessage: dynamic, finalCallback: () -> Unit)
abstract fun makeResponse(message: dynamic, responseMessage: dynamic, finalCallback: () -> Unit)
}
@@ -1,6 +1,6 @@
package server.handlers.flash
package net.server.handlers.flash
import server.handlers.AbstractHandler
import net.server.handlers.AbstractHandler
import require
/**
@@ -9,12 +9,43 @@ import require
class LoadBin : AbstractHandler {
val fs: dynamic
val exec: dynamic
constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder) {
this.fs = require("fs")
this.exec = require("child_process").exec
}
override fun makeResult(message: dynamic, resultList: dynamic, finalCallback: () -> Unit) {
throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates.
override fun makeResponse(message: dynamic, responseMessage: dynamic, finalCallback: () -> Unit) {
var stdOut: String = ""
var strErr: String = ""
var resultCode = 0
fs.writeFile("./flash.bin", message.data.buffer, "binary", { error ->
if (error != null) {
resultCode = 14
strErr = error.toString()
responseMessage.stdOut = stdOut
responseMessage.strErr = strErr
responseMessage.resultCode = resultCode
finalCallback.invoke()
} else {
val stFlashCommand = "./st-flash write ./flash.bin " + message.base
exec(stFlashCommand, { err, stdOutRes, stdErrRes ->
if (err != null) {
resultCode = 15
strErr = stdErrRes.toString() + "\n" + err.toString()
stdOut = stdOutRes.toString()
} else {
resultCode = 0
strErr = stdErrRes.toString()
stdOut = stdOutRes.toString()
}
responseMessage.stdOut = stdOut
responseMessage.strErr = strErr
responseMessage.resultCode = resultCode
finalCallback.invoke()
})
}
})
}
}
}
@@ -1,7 +1,33 @@
package server.handlers.rc
package net.server.handlers.rc
import exceptions.RcControlException
import net.server.handlers.AbstractHandler
/**
* Created by user on 7/27/16.
*/
class Connect {
class Connect : AbstractHandler {
constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder)
override fun makeResponse(message: dynamic, responseMessage: dynamic, finalCallback: () -> Unit) {
val resultCode: Int
val resultMsg: String
val sid: Int;
try {
sid = MicroController.instance.connectRC()
resultCode = 0
resultMsg = ""
} catch (e: RcControlException) {
resultCode = 13
resultMsg = "car already controlled by RC"
sid = 0
}
responseMessage.sid = sid
responseMessage.code = resultCode
responseMessage.errorMsg = resultMsg
finalCallback.invoke()
}
}
@@ -1,9 +1,9 @@
package server.handlers.rc
package net.server.handlers.rc
import carControl.RouteExecutorImpl
import server.handlers.AbstractHandler
import thisCar
import MicroController
import carControl.RouteExecutorImpl.MoveDirection
import exceptions.RcControlException
import net.server.handlers.AbstractHandler
/**
* Created by user on 7/27/16.
@@ -12,10 +12,9 @@ class Control : AbstractHandler {
constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder)
override fun makeResult(message: dynamic, resultMessage: dynamic, finalCallback: () -> Unit) {
override fun makeResponse(message: dynamic, responseMessage: dynamic, finalCallback: () -> Unit) {
val commandNumber = message.command
resultMessage.code = 0
resultMessage.errorMsg = ""
val sid = message.sid
val command = when (commandNumber) {
protoDecoder.Command.stop -> {
MoveDirection.STOP
@@ -34,7 +33,18 @@ class Control : AbstractHandler {
}
else -> MoveDirection.STOP
}
thisCar.move(command, 0.0, {})
val resultCode:Int
val resultMsg:String
try {
MicroController.instance.RcMove(command, sid)
resultCode = 0
resultMsg = ""
} catch (e: RcControlException) {
resultCode = 12
resultMsg = "incorrect remote control sid"
}
responseMessage.code = resultCode
responseMessage.errorMsg = resultMsg
finalCallback.invoke()
}
}
@@ -1,8 +1,30 @@
package server.handlers.rc
package net.server.handlers.rc
import exceptions.RcControlException
import net.server.handlers.AbstractHandler
/**
* Created by user on 7/27/16.
*/
class Disconnect {
class Disconnect : AbstractHandler{
constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder)
override fun makeResponse(message: dynamic, responseMessage: dynamic, finalCallback: () -> Unit) {
val resultCode: Int
val resultMsg: String
try {
MicroController.instance.disconnectRC(message.sid)
resultCode = 0
resultMsg = ""
} catch (e: RcControlException) {
resultCode = 12
resultMsg = "incorrect remote control sid"
}
responseMessage.code = resultCode
responseMessage.errorMsg = resultMsg
finalCallback.invoke()
}
}
@@ -1,8 +1,28 @@
package server.handlers.rc
package net.server.handlers.rc
import exceptions.RcControlException
import net.server.handlers.AbstractHandler
/**
* Created by user on 7/27/16.
*/
class Heartbeat {
class Heartbeat : AbstractHandler {
constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder)
override fun makeResponse(message: dynamic, responseMessage: dynamic, finalCallback: () -> Unit) {
val resultCode: Int
val resultMsg: String
try {
MicroController.instance.rcHeartBeat(message.sid)
resultCode = 0
resultMsg = ""
} catch (e: RcControlException) {
resultCode = 12
resultMsg = "incorrect remote control sid"
}
responseMessage.code = resultCode
responseMessage.errorMsg = resultMsg
finalCallback.invoke()
}
}