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 require
|
||||||
import server.handlers.AbstractHandler
|
import net.server.handlers.AbstractHandler
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by user on 7/27/16.
|
* 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.
|
* 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) {
|
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 = {}
|
val resultMessage: dynamic = {}
|
||||||
js("resultMessage = {}")//todo bad?
|
js("resultMessage = {}")//todo bad?
|
||||||
val afterExecute: () -> Unit = {
|
val afterExecute: () -> Unit = {
|
||||||
val protoEn = this.protoEncoder//temporarily:)
|
if (this.protoEncoder != null) {
|
||||||
val resultMsg = resultMessage
|
val protoEn = this.protoEncoder//temporarily:)
|
||||||
val resultObject = js("new protoEn(resultMsg)")
|
val resultMsg = resultMessage
|
||||||
|
val resultObject = js("new protoEn(resultMsg)")
|
||||||
val resultBuffer = resultObject.encode()
|
val resultBuffer = resultObject.encode()
|
||||||
val byteArray = ByteArray(resultBuffer.limit);
|
response.write(trimBuffer(resultBuffer.buffer, resultBuffer.limit))
|
||||||
for (i in 0..resultBuffer.limit - 1) {
|
|
||||||
byteArray[i] = resultBuffer.buffer[i]
|
|
||||||
}
|
}
|
||||||
response.write(js("new Buffer(byteArray)"))
|
|
||||||
response.end()
|
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
|
import require
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -9,12 +9,43 @@ import require
|
|||||||
class LoadBin : AbstractHandler {
|
class LoadBin : AbstractHandler {
|
||||||
|
|
||||||
val fs: dynamic
|
val fs: dynamic
|
||||||
|
val exec: dynamic
|
||||||
|
|
||||||
constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder) {
|
constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder) {
|
||||||
this.fs = require("fs")
|
this.fs = require("fs")
|
||||||
|
this.exec = require("child_process").exec
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun makeResult(message: dynamic, resultList: dynamic, finalCallback: () -> Unit) {
|
override fun makeResponse(message: dynamic, responseMessage: dynamic, finalCallback: () -> Unit) {
|
||||||
throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates.
|
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.
|
* 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 MicroController
|
||||||
import server.handlers.AbstractHandler
|
|
||||||
import thisCar
|
|
||||||
import carControl.RouteExecutorImpl.MoveDirection
|
import carControl.RouteExecutorImpl.MoveDirection
|
||||||
|
import exceptions.RcControlException
|
||||||
|
import net.server.handlers.AbstractHandler
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by user on 7/27/16.
|
* Created by user on 7/27/16.
|
||||||
@@ -12,10 +12,9 @@ class Control : AbstractHandler {
|
|||||||
|
|
||||||
constructor(protoDecoder: dynamic, protoEncoder: dynamic) : super(protoDecoder, protoEncoder)
|
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
|
val commandNumber = message.command
|
||||||
resultMessage.code = 0
|
val sid = message.sid
|
||||||
resultMessage.errorMsg = ""
|
|
||||||
val command = when (commandNumber) {
|
val command = when (commandNumber) {
|
||||||
protoDecoder.Command.stop -> {
|
protoDecoder.Command.stop -> {
|
||||||
MoveDirection.STOP
|
MoveDirection.STOP
|
||||||
@@ -34,7 +33,18 @@ class Control : AbstractHandler {
|
|||||||
}
|
}
|
||||||
else -> MoveDirection.STOP
|
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()
|
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.
|
* 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.
|
* 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