diff --git a/README.md b/README.md index 327f1d7..31b70b6 100644 --- a/README.md +++ b/README.md @@ -32,4 +32,8 @@ myEngine.RegisterFunc("my-func", myFunc) // Start engine myEngine.Start() +// Call function of some other engine +res, err := myEngine.Call("some-engine", "some-func", engine.M{"msg": "space-engine-go is awesome!"}, 1000) +log.println("Res", res, "Err", err) + ``` diff --git a/engine/README.md b/engine/README.md index c5b5dda..7a4af8e 100644 --- a/engine/README.md +++ b/engine/README.md @@ -28,4 +28,8 @@ myEngine.RegisterFunc("my-func", myFunc) // Start engine myEngine.Start() +// Call function of some other engine +res, err := myEngine.Call("some-engine", "some-func", engine.M{"msg": "space-engine-go is awesome!"}, 1000) +log.println("Res", res, "Err", err) + ``` \ No newline at end of file diff --git a/engine/engine.go b/engine/engine.go index 6a1a834..18ecb7e 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -3,6 +3,7 @@ package engine import ( "encoding/json" "log" + "time" nats "github.com/nats-io/go-nats" ) @@ -120,3 +121,29 @@ func (engine *Engine) Start() { } } } + +// Call -- calls a function of any engine +func (engine *Engine) Call(engineName, functionName string, params map[string]interface{}, timeOut int) (*M, error) { + subj := "faas:" + engineName + ":" + functionName + + // Convert params into json + dataBytes, err := json.Marshal(¶ms) + if err != nil { + return nil, err + } + + // Make a nats request + msg, err := engine.natsClient.Request(subj, dataBytes, time.Duration(timeOut)*time.Millisecond) + if err != nil { + return nil, err + } + + // Parse msg + res := M{} + err = json.Unmarshal(msg.Data, &res) + if err != nil { + return nil, err + } + + return &res, nil +}