onIncomingCloudMessage(msg) {
        switch (msg.method) {
            case "_sync.gen_tmp_presigned_url":
            case "_sync.gen_presigned_url":
            case "_sync.batch_gen_room_up_url": {
                const key = msg.params?.suffix ?? "urls";
                const indices = msg.params?.indexes ?? [0, 1, 2, 3];

                let result = {ok: true};

                const expires = Math.floor(new Date(new Date().getTime() + 15 * 60000).getTime() / 1000); //+15min;
                let url = `${this.mapUploadUrlPrefix}/api/miio/fds_upload_handler?ts=${process.hrtime().toString().replace(/,/g, "")}&suffix=${key}&Expires=${expires}`;

                if (msg.method === "_sync.gen_tmp_presigned_url") {
                    result[key] = indices.map(i => {
                        return {
                            url: url + "&index=" + i + "&method=" + msg.method,
                            obj_name: process.hrtime().toString().replace(/,/g, "") + "/" + i,
                            method: "PUT",
                            expires_time: expires
                        };
                    });
                } else if (msg.method === "_sync.gen_presigned_url") {
                    result[key] = {
                        url: url + "&method=" + msg.method,
                        ok: true,
                        expires_time: expires,
                        obj_name: process.hrtime().toString().replace(/,/g, ""),
                        method: "PUT",
                        pwd: "helloworld"
                    };
                } else if (msg.method === "_sync.batch_gen_room_up_url") {
                    result = indices.map(i => {
                        return (url + "&index=" + i + "&method=" + msg.method);
                    });
                }

                this.sendCloud({id: msg.id, result: result}).catch((reason => {
                    Logger.error("Failed to send map request response:", reason);
                }));

                return true;
            }
        }
        return false;
    }
@protected
@param {any} msg the json object sent by the remote device
@returns {boolean} True if the message was handled.