|
@@ -29,11 +29,13 @@ import (
|
|
|
ScriptingInterpreter models a ECAL script interpreter instance.
|
|
ScriptingInterpreter models a ECAL script interpreter instance.
|
|
|
*/
|
|
*/
|
|
|
type ScriptingInterpreter struct {
|
|
type ScriptingInterpreter struct {
|
|
|
- GM *graph.Manager // GraphManager for the interpreter
|
|
|
|
|
- Dir string // Root dir for interpreter
|
|
|
|
|
- EntryFile string // Entry file for the program
|
|
|
|
|
- LogLevel string // Log level string (Debug, Info, Error)
|
|
|
|
|
- LogFile string // Logfile (blank for stdout)
|
|
|
|
|
|
|
+ GM *graph.Manager // GraphManager for the interpreter
|
|
|
|
|
+ Interpreter *tool.CLIInterpreter // ECAL Interpreter object
|
|
|
|
|
+
|
|
|
|
|
+ Dir string // Root dir for interpreter
|
|
|
|
|
+ EntryFile string // Entry file for the program
|
|
|
|
|
+ LogLevel string // Log level string (Debug, Info, Error)
|
|
|
|
|
+ LogFile string // Logfile (blank for stdout)
|
|
|
|
|
|
|
|
RunDebugServer bool // Run a debug server
|
|
RunDebugServer bool // Run a debug server
|
|
|
DebugServerHost string // Debug server host
|
|
DebugServerHost string // Debug server host
|
|
@@ -65,6 +67,13 @@ const dummyEntryFile = `0 # Write your ECAL code here
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
Run runs the ECAL scripting interpreter.
|
|
Run runs the ECAL scripting interpreter.
|
|
|
|
|
+
|
|
|
|
|
+After this function completes:
|
|
|
|
|
+- EntryScript in config and all related scripts in the interpreter root dir have been executed
|
|
|
|
|
+- ECAL Interpreter object is fully initialized
|
|
|
|
|
+- A debug server might be running which can reload the entry script
|
|
|
|
|
+- ECAL's event processor has been started
|
|
|
|
|
+- GraphManager events are being forwarded to ECAL
|
|
|
*/
|
|
*/
|
|
|
func (si *ScriptingInterpreter) Run() error {
|
|
func (si *ScriptingInterpreter) Run() error {
|
|
|
var err error
|
|
var err error
|
|
@@ -77,6 +86,7 @@ func (si *ScriptingInterpreter) Run() error {
|
|
|
|
|
|
|
|
if err == nil {
|
|
if err == nil {
|
|
|
i := tool.NewCLIInterpreter()
|
|
i := tool.NewCLIInterpreter()
|
|
|
|
|
+ si.Interpreter = i
|
|
|
|
|
|
|
|
i.Dir = &si.Dir
|
|
i.Dir = &si.Dir
|
|
|
i.LogFile = &si.LogFile
|
|
i.LogFile = &si.LogFile
|
|
@@ -89,21 +99,7 @@ func (si *ScriptingInterpreter) Run() error {
|
|
|
|
|
|
|
|
// Adding functions
|
|
// Adding functions
|
|
|
|
|
|
|
|
- stdlib.AddStdlibPkg("db", "EliasDB related functions")
|
|
|
|
|
-
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "storeNode", &dbfunc.StoreNodeFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "removeNode", &dbfunc.RemoveNodeFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "fetchNode", &dbfunc.FetchNodeFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "storeEdge", &dbfunc.StoreEdgeFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "removeEdge", &dbfunc.RemoveEdgeFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "fetchEdge", &dbfunc.FetchEdgeFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "traverse", &dbfunc.TraverseFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "newTrans", &dbfunc.NewTransFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "newRollingTrans", &dbfunc.NewRollingTransFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "commit", &dbfunc.CommitTransFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "query", &dbfunc.QueryFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "graphQL", &dbfunc.GraphQLFunc{GM: si.GM})
|
|
|
|
|
- stdlib.AddStdlibFunc("db", "raiseGraphEventHandled", &dbfunc.RaiseGraphEventHandledFunc{})
|
|
|
|
|
|
|
+ AddEliasDBStdlibFunctions(si.GM)
|
|
|
|
|
|
|
|
if err == nil {
|
|
if err == nil {
|
|
|
|
|
|
|
@@ -127,12 +123,7 @@ func (si *ScriptingInterpreter) Run() error {
|
|
|
err = i.Interpret(false)
|
|
err = i.Interpret(false)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // Rules for the GraphManager are loaded after the code has been
|
|
|
|
|
- // executed and all rules have been added. The ECA processor can now be started.
|
|
|
|
|
-
|
|
|
|
|
- i.RuntimeProvider.Processor.Start()
|
|
|
|
|
-
|
|
|
|
|
- // EliasDB graph events can not be forwarded to ECAL via the eventbridge.
|
|
|
|
|
|
|
+ // EliasDB graph events are now forwarded to ECAL via the eventbridge.
|
|
|
|
|
|
|
|
si.GM.SetGraphRule(&EventBridge{
|
|
si.GM.SetGraphRule(&EventBridge{
|
|
|
Processor: i.RuntimeProvider.Processor,
|
|
Processor: i.RuntimeProvider.Processor,
|
|
@@ -149,3 +140,24 @@ func (si *ScriptingInterpreter) Run() error {
|
|
|
|
|
|
|
|
return err
|
|
return err
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+func AddEliasDBStdlibFunctions(gm *graph.Manager) {
|
|
|
|
|
+ stdlib.AddStdlibPkg("db", "EliasDB related functions")
|
|
|
|
|
+
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "storeNode", &dbfunc.StoreNodeFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "updateNode", &dbfunc.UpdateNodeFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "removeNode", &dbfunc.RemoveNodeFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "fetchNode", &dbfunc.FetchNodeFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "storeEdge", &dbfunc.StoreEdgeFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "removeEdge", &dbfunc.RemoveEdgeFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "fetchEdge", &dbfunc.FetchEdgeFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "traverse", &dbfunc.TraverseFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "newTrans", &dbfunc.NewTransFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "newRollingTrans", &dbfunc.NewRollingTransFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "commit", &dbfunc.CommitTransFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "query", &dbfunc.QueryFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "graphQL", &dbfunc.GraphQLFunc{GM: gm})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "raiseGraphEventHandled", &dbfunc.RaiseGraphEventHandledFunc{})
|
|
|
|
|
+ stdlib.AddStdlibFunc("db", "raiseWebEventHandled", &dbfunc.RaiseWebEventHandledFunc{})
|
|
|
|
|
+
|
|
|
|
|
+}
|