def _handle_agent_request(self, request):
        """
            Reply to agents' request for parameters

        Args:
            request: 3 types
             - "info": (None, info)
             - "parameter": (param, info)
             - "parameter:<agent-hash>":
                returns (None, None) if no parameter has been published
                returns (None, info) if the hash
                    of server side parameters is the same as the agent's
                otherwise returns (param, info)
        """
        if request == 'info':
            return None, self.param_info
        elif request.startswith('parameter'):
            if self.parameters is None:
                return None, None
            if ':' in request:
                _, last_hash = request.split(':', 1)
                current_hash = self.param_info['hash']
                if last_hash == current_hash:  # param not changed
                    return None, self.param_info
                else:
                    return self.parameters, self.param_info
            else:
                return self.parameters, self.param_info
        else:
            raise ValueError('invalid request: '+str(request))

            Reply to agents' request for parameters

        Args:
            request: 3 types
             - "info": (None, info)
             - "parameter": (param, info)
             - "parameter:<agent-hash>":
                returns (None, None) if no parameter has been published
                returns (None, info) if the hash
                    of server side parameters is the same as the agent's
                otherwise returns (param, info)
        
surreal/distributed/parameter_server.py