func clientHandler(ctx context.Context, c *wsock.Client, f *RPCFunction) { var ( // err error ) defer c.Done() // state := make(ScalarState) log.Println("clientProcessor Client connected. ", c.Request()) fromWS, toWS, doneCh := c.GetChannels() Loop: for { log.Println("Reading loop") select { case request, ok := <-fromWS: if !ok { break Loop } log.Println("Request", (*request)["method"]) method := (*request)["method"].(string) params := (*request)["params"] log.Println("type of params", reflect.TypeOf(params)) m := reflect.ValueOf(f).MethodByName(method) if !m.IsValid() { js := wsock.MessageT{} js["error"] = "ERROR: No method found. " + method toWS <- &js return } mInterface := m.Interface() mm := mInterface.(func([]interface{}) (interface{}, error)) ch, err := mm(params.([]interface{})) if err != nil { log.Println("Error calling method. ", err) return } log.Println("Function returned", ch) js := wsock.MessageT{} js["jsonrpc"] = (*request)["jsonrpc"] js["id"] = (*request)["id"] js["result"] = ch toWS <- &js break case <-doneCh: log.Println("Client disconnected. Exit goroutine") break Loop } } return }