maked all rc handlers and st-flash handler
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user