Scala Agent

November 15, 2020 ยท View on GitHub

This is a generic example of Scala agent following the generic structure within CoFlows.

Note: The Scala <-> CoreCLR interop is achieved through QuantApp.Kernel/JVM.

import scala.collection._
import collection.JavaConverters._

import app.quant.clr._
import app.quant.clr.scala.{SCLRObject => CLR}

import java.time._
import java.util._

import com.google.gson._

class XXX {
    private val workspaceID = "$WID$"
    def pkg() = {
        val Utils = CLR("QuantApp.Engine.Utils")
        val M = CLR("QuantApp.Kernel.M")

        CLR("QuantApp.Engine.FPKG",
            workspaceID + "-Agent", //ID
            workspaceID, //Workflow ID  
            "Scala Agent", //Name
            "Scala Agent", //Description
            null, //MID

            Utils.SetFunction("Load", CLR.Delegate[Array[AnyRef], Unit]("QuantApp.Engine.Load", data => { })),

            Utils.SetFunction("Add", CLR.Delegate[String, AnyRef, Unit]("QuantApp.Kernel.MCallback", (id, addedObject) => { })),

            Utils.SetFunction("Exchange", CLR.Delegate[String, AnyRef, Unit]("QuantApp.Kernel.MCallback", (id, data) => { })),

            Utils.SetFunction("Remove", CLR.Delegate[String, AnyRef, Unit]("QuantApp.Kernel.MCallback", (id, data) => { })),

            Utils.SetFunction("Body", CLR.Delegate[AnyRef, AnyRef]("QuantApp.Engine.Body", data => { 
                val map = new Gson().fromJson(data.toString(), classOf[HashMap[String, String]]).asScala
                if(map.contains("Data") && map("Data") == "Initial Execution")
                    println("     Agent Initial Execute @ : " + (new Date()))
                data 
            })),
            "0 * * ? * *", //Cron Schedule
            Utils.SetFunction("Job", CLR.Delegate[LocalDateTime, AnyRef, Unit]("QuantApp.Engine.Job", (date, command) => { 
            }))
        )
    }
}