def __clientRPC(self, function, params, conn_time=1.0, resp_time=5.0): """ internal library for pvAccess channel RPC. conn_time: waiting time for connection, 1.0 by default; resp_time: waiting time for response, 5.0 by default """ alarm = Alarm() timeStamp = TimeStamp() ntnv = NTNameValue(function, params) # now do issue + wait channelRPC = ChannelRPC(self.channelname) channelRPC.issueConnect() if not channelRPC.waitConnect(conn_time): #print channelRPC.getMessage() raise Exception(channelRPC.getMessage()) channelRPC.issueRequest(ntnv.getNTNameValue(), False) result = channelRPC.waitResponse(resp_time) if result is None: #print channelRPC.getMessage() raise Exception(channelRPC.getMessage()) if function in ["retrieveSnapshot", "getLiveMachine", "saveSnapshot"]: result = NTMultiChannel(result) elif function in [ "retrieveServiceEvents", "retrieveServiceConfigs", "retrieveServiceConfigProps" ]: result = NTTable(result) elif function == "updateSnapshotEvent": result = NTScalar(result) result.getAlarm(alarm) result.getTimeStamp(timeStamp) return result