func callRpcService(name string, async bool, failOnErr bool, cr *myStartup.GetUserDataRequest, rep *myStartup.GetUserDataResponse) (err os.Error) { defer checkError(&err) rpcClient, err := skylib.GetRandomClientByProvides(name) if err != nil { log.Println("No service provides", name) if failOnErr { return skylib.NewError(skylib.NO_CLIENT_PROVIDES_SERVICE, sName) } else { return nil } } if async { go rpcClient.Call(name, cr, rep) log.Println("Called service async", name) return nil } log.Println("Calling : " + name) err = rpcClient.Call(name, cr, rep) if err != nil { log.Println("failed connection, retrying", err) // get another one and try again! rpcClient, err := skylib.GetRandomClientByProvides(name) err = rpcClient.Call(name, cr, rep) if err != nil { return skylib.NewError(err.String(), sName) } } log.Println("Called service sync", name) return nil }
// Call the RPC service on the router to process the GetUserDataRequest. func submitGetUserDataRequest(cr *myStartup.GetUserDataRequest) (*myStartup.GetUserDataResponse, os.Error) { var GetUserDataResponse *myStartup.GetUserDataResponse client, err := skylib.GetRandomClientByProvides("RouteService.RouteGetUserDataRequest") if err != nil { if GetUserDataResponse == nil { GetUserDataResponse = &myStartup.GetUserDataResponse{} } GetUserDataResponse.Errors = append(GetUserDataResponse.Errors, err.String()) return GetUserDataResponse, err } err = client.Call("RouteService.RouteGetUserDataRequest", cr, &GetUserDataResponse) if err != nil { if GetUserDataResponse == nil { GetUserDataResponse = &myStartup.GetUserDataResponse{} } GetUserDataResponse.Errors = append(GetUserDataResponse.Errors, err.String()) } return GetUserDataResponse, nil }