mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2025-12-19 18:49:19 +01:00
60 lines
2.2 KiB
Scala
60 lines
2.2 KiB
Scala
package ocelot.desktop.entity.traits
|
|
|
|
import ocelot.desktop.entity.traits.OcelotInterface.LogEvent
|
|
import totoro.ocelot.brain.entity.machine.{Arguments, Callback, Context}
|
|
import totoro.ocelot.brain.entity.traits.{result, Entity, Environment}
|
|
import totoro.ocelot.brain.event.{EventBus, NodeEvent}
|
|
|
|
import java.time.Instant
|
|
|
|
trait OcelotInterface extends Entity with Environment {
|
|
@Callback(direct = true, doc = """function(message: string) -- Logs a message to the card's console.""")
|
|
def log(context: Context, args: Arguments): Array[AnyRef] = {
|
|
val message = args.checkString(0)
|
|
EventBus.send(LogEvent.CardToUser(node.address, message))
|
|
result()
|
|
}
|
|
|
|
@Callback(direct = true, doc = """function() -- Clears messages logged to the card's console.""")
|
|
def clearLog(context: Context, args: Arguments): Array[AnyRef] = {
|
|
EventBus.send(LogEvent.Clear(node.address))
|
|
result()
|
|
}
|
|
|
|
@Callback(direct = true,
|
|
doc = """function(): integer -- Returns the current Unix timestamp (UTC, in milliseconds).""")
|
|
def getTimestamp(context: Context, args: Arguments): Array[AnyRef] = {
|
|
result(Instant.now().toEpochMilli)
|
|
}
|
|
|
|
@Callback(direct = true, doc = """function(): integer -- Returns a high-resolution timer value (in nanoseconds).""")
|
|
def getInstant(context: Context, args: Arguments): Array[AnyRef] = {
|
|
result(System.nanoTime())
|
|
}
|
|
|
|
@Callback(direct = true, doc = """function(): number -- Returns the remaining call budget.""")
|
|
def getRemainingCallBudget(context: Context, args: Arguments): Array[AnyRef] = {
|
|
result(context.getRemainingCallBudget)
|
|
}
|
|
|
|
@Callback(direct = true, doc = """function(): number -- Returns the maximum call budget.""")
|
|
def getMaxCallBudget(context: Context, args: Arguments): Array[AnyRef] = {
|
|
result(context.getMaxCallBudget)
|
|
}
|
|
|
|
def pushMessage(message: String): Unit = {
|
|
node.sendToReachable("computer.signal", "ocelot_message", message)
|
|
EventBus.send(LogEvent.UserToCard(node.address, message))
|
|
}
|
|
}
|
|
|
|
object OcelotInterface {
|
|
sealed trait LogEvent extends NodeEvent
|
|
|
|
object LogEvent {
|
|
case class CardToUser(address: String, message: String) extends LogEvent
|
|
case class UserToCard(address: String, message: String) extends LogEvent
|
|
case class Clear(address: String) extends LogEvent
|
|
}
|
|
}
|