57 lines
1.4 KiB
Plaintext
57 lines
1.4 KiB
Plaintext
/* go run Distributed_programming_client.go */
|
|
|
|
package main
|
|
|
|
import(
|
|
wren "github.com/crazyinfin8/WrenGo"
|
|
"log"
|
|
"net/rpc"
|
|
"strings"
|
|
)
|
|
|
|
type any = interface{}
|
|
|
|
func dialHTTP(vm *wren.VM, parameters []any) (any, error) {
|
|
network := parameters[1].(string)
|
|
address := parameters[2].(string)
|
|
client, err := rpc.DialHTTP(network, address)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
return &client, nil
|
|
}
|
|
|
|
func call(vm *wren.VM, parameters []any) (any, error) {
|
|
handle := parameters[0].(*wren.ForeignHandle)
|
|
ifc, _ := handle.Get()
|
|
client := ifc.(**rpc.Client)
|
|
serviceMethod := parameters[1].(string)
|
|
amount := parameters[2].(float64)
|
|
var tax float64
|
|
err := (*client).Call(serviceMethod, amount, &tax)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
return tax, nil
|
|
}
|
|
|
|
func moduleFn(vm *wren.VM, name string) (string, bool) {
|
|
if name != "meta" && name != "random" && !strings.HasSuffix(name, ".wren") {
|
|
name += ".wren"
|
|
}
|
|
return wren.DefaultModuleLoader(vm, name)
|
|
}
|
|
|
|
func main() {
|
|
cfg := wren.NewConfig()
|
|
cfg.LoadModuleFn = moduleFn
|
|
vm := cfg.NewVM()
|
|
fileName := "Distributed_programming_client.wren"
|
|
clientMethodMap := wren.MethodMap { "call(_,_)": call }
|
|
classMap := wren.ClassMap { "Client": wren.NewClass(dialHTTP, nil, clientMethodMap) }
|
|
module := wren.NewModule(classMap)
|
|
vm.SetModule(fileName, module)
|
|
vm.InterpretFile(fileName)
|
|
vm.Free()
|
|
}
|