예제 #1
0
 def _call(self, method):
     res = ua.CallMethodResult()
     if method.ObjectId not in self._aspace or method.MethodId not in self._aspace:
         res.StatusCode = ua.StatusCode(ua.StatusCodes.BadNodeIdInvalid)
     else:
         node = self._aspace[method.MethodId]
         if node.call is None:
             res.StatusCode = ua.StatusCode(ua.StatusCodes.BadNothingToDo)
         else:
             try:
                 result = node.call(method.ObjectId, *method.InputArguments)
                 if isinstance(result, ua.CallMethodResult):
                     res = result
                 elif isinstance(result, ua.StatusCode):
                     res.StatusCode = result
                 else:
                     res.OutputArguments = result
                 while len(res.InputArgumentResults) < len(
                         method.InputArguments):
                     res.InputArgumentResults.append(ua.StatusCode())
             except Exception:
                 self.logger.exception(
                     "Error executing method call %s, an exception was raised: ",
                     method)
                 res.StatusCode = ua.StatusCode(
                     ua.StatusCodes.BadUnexpectedError)
     return res
예제 #2
0
 def func2(parent, methodname, value):
     if methodname == "panic":
         return ua.StatusCode(ua.StatusCodes.BadOutOfMemory)
     if methodname != "sin":
         res = ua.CallMethodResult()
         res.StatusCode = ua.StatusCode(ua.StatusCodes.BadInvalidArgument)
         res.InputArgumentResults = [ua.StatusCode(ua.StatusCodes.BadNotSupported), ua.StatusCode()]
         return res
     return math.sin(value)