async def send_rpc(self, msg, _context):
        """Send an RPC to a service on behalf of a client."""

        service = msg.get('name')
        rpc_id = msg.get('rpc_id')
        payload = msg.get('payload')
        timeout = msg.get('timeout')

        response_id = await self.service_manager.send_rpc_command(service, rpc_id, payload,
                                                                  timeout)

        try:
            result = await self.service_manager.rpc_results.get(response_id, timeout=timeout)
        except asyncio.TimeoutError:
            self._logger.warning("RPC 0x%04X on service %s timed out after %f seconds",
                                 rpc_id, service, timeout)
            result = dict(result='timeout', response=b'')

        return result
Send an RPC to a service on behalf of a client.