Calling a service
$ (wait-for-service "my_service" 10) $ (setq response (call-service "my_service" 'ServiceType :arg1 42 :arg2 24)) $ (with-fields (field1 field2) response (* field1 field2))
Note that you don't have to explicitly create a request object for call-service.
Providing a service
$ (def-service-callback AddTwoInts (a b) (make-response :data (+ a b)) $ (register-service "add_two_ints" 'AddTwoInts')
Note that def-service-callback takes care of getting the arguments out of the request, and creating the response when you're done. If you want to use a lambda function instead of one with a name,
$ (register-service-fn "add_two_ints" #'(lambda (req) (with-fields (a b) req (make-msg "my_package/AddTwoIntsResponse" :data (+ a b)))))
would do the same thing.