WebSocket RPC ============ Usage: ```go func MyCliFunc(cli *wsrpc.ClientCtx) { cli.Define("btn1.click", func(param ...interface{}) interface{} { // Define a remote interface so javascript client can call log.Println("Async button clicked") return "ok" }) ret := cli.Call("Hello", wsrpc.DataObj{ "couldbe": "interface", }) t := <-ret log.Println("Response:", t) } func main() { var mux = http.NewServeMux() wsrpc.RegisterTo(mux, MyCliFunc) // Client websocket handler, this registers also the JS library mux.HandleFunc("/", webGenerated.AssetHandleFunc) log.Println("Listening :8080") http.ListenAndServe(":8080", mux) } ``` Client side: ```javascript wsrpc = new WsRpc(); wsrpc.connect("ws://"+location.host +"/wsrpc"); obj = { Hello: function(response,param) { console.log("Hello world") response({ok:"OK"}) } } wsrpc.export(obj) btn = document.querySelector("#btn1") btn.addEventListener("click",function(){ console.log("Button clicked") wsrpc.call("btn1.click",{"hello":"ok"}, (res) =>{ // Will call server defined procedure console.log("Answered:",res ); }) }) ```