def METHOD_NAME(self, msg_params):
    sender_id = msg_params.get(MyMessage.MSG_ARG_KEY_SENDER)
    model_params = msg_params.get(MyMessage.MSG_ARG_KEY_MODEL_PARAMS)
    local_sample_number = msg_params.get(MyMessage.MSG_ARG_KEY_NUM_SAMPLES)
    self.aggregator.add_local_trained_result(
        sender_id - 1, model_params, local_sample_number
    )
    b_all_received = self.aggregator.check_whether_all_receive()
    logging.info("b_all_received = " + str(b_all_received))
    if b_all_received:
        global_model_params = self.aggregator.aggregate()
        self.aggregator.test_on_server_for_all_clients(self.args.round_idx)
        # start the next round
        self.args.round_idx += 1
        if self.args.round_idx == self.round_num:
            # post_complete_message_to_sweep_process(self.args)
            self.finish()
            return
        if self.is_preprocessed:
            if self.preprocessed_client_lists is None:
                # sampling has already been done in data preprocessor
                client_indexes = [self.args.round_idx] * self.args.client_num_per_round
            else:
                client_indexes = self.preprocessed_client_lists[self.args.round_idx]
        else:
            # sampling clients
            client_indexes = self.aggregator.client_sampling(
                self.args.round_idx,
                self.args.client_num_in_total,
                self.args.client_num_per_round,
            )
        print("indexes of clients: " + str(client_indexes))
        print("size = %d" % self.size)
        for receiver_id in range(1, self.size):
            self.send_message_sync_model_to_client(
                receiver_id, global_model_params, client_indexes[receiver_id - 1]
            )