Topik ini menjelaskan cara menggunakan edisi Windows SDK C++ untuk Cloud Phone.
1. Memulai
1.1 Mendapatkan SDK dan demo
Kebutuhan lingkungan integrasi
Rilis Windows x64
Mengimpor SDK
Contoh Visual Studio 2019:
Buka Project Properties > Configuration Properties > VC++ Directories. Tambahkan direktori include asp-client-sdk ke Include Directories.
Buka Project Properties > Configuration Properties > VC++ Directories. Tambahkan direktori lib asp-client-sdk ke Library Directories.
Buka Project Properties > Configuration Properties > Linker > General. Tambahkan direktori lib asp-client-sdk ke Additional Library Directories.
Buka Project Properties > Configuration Properties > Linker > Input. Tambahkan asp-client-sdk.lib, asp-engine.lib, dan glog.lib ke Additional Dependencies.
Contoh Qt Creator:
Tambahkan baris berikut ke file .pro proyek Anda:
INCLUDEPATH+=$$PWD/asp-client-sdk/include \
LIBS+=$$PWD/asp-client-sdk/lib/asp-client-sdk.lib \
$$PWD/asp-client-sdk/lib/asp-engine.lib \
$$PWD/asp-client-sdk/lib/glog.lib \Jalankan demo dengan cepat
Unduh Windows_Demo_Release dan ekstrak untuk mendapatkan dua direktori: server dan client. Direktori ini masing-masing berisi demo sisi server dan sisi client.
Jalankan server
Ubah file konfigurasi:
{
"httpPort": "8328",
"accessKeyId": "AK",
"accessKeySecret": "SK",
"androidRegionId": "cn-hangzhou"
}Ganti AK dan SK dengan ID AccessKey dan AccessKey Secret Anda yang sebenarnya. Atur androidRegionId ke ID wilayah instans Anda.
Jalankan server/run_server.bat. Pesan berikut akan muncul:
2024-11-01T13:48:27.002Z Server is running on http://127.0.0.1:8328/listAicServer telah berhasil dijalankan.
Jalankan client
{
"CLOUD_SCREENSIZE_HEIGHT": 100,
"CLOUD_SCREENSIZE_WIDTH": 100,
"DEBUG_MODE": 2,
"DISPLAY_COL": 11,
"DISPLAY_GROUP": 20,
"GROUPIDS": [
"ag-1jknz4zyznleim503"
],
"GROUP_SCREENSIZE_HEIGHT": 100,
"GROUP_SCREENSIZE_WIDTH": 100,
"LOCAL_SCREENSIZE_HEIGHT": 720,
"LOCAL_SCREENSIZE_WIDTH": 480,
"DISPLAY_SCALE": 1,
"GROUP_SCALE": 8,
"MAX_PHONE_NUM": 0,
"PROXY_CONN_TYPE": 0,
"QUIC_OPTION": false,
"PHONE_URL": "http://127.0.0.1",
"PORT": 8328,
"AUDIO_ENABLE": false,
"USE_DUMP": false,
"USE_OPENGL": true
}
Ganti GROUPIDS dengan ID grup instans Cloud Phone yang ingin Anda kendalikan. ID tersebut harus diawali dengan ag-. Anda dapat menentukan beberapa ID grup. Simpan file setelah memperbaruinya dengan ID grup instans Cloud Phone berawalan ag- Anda.
Deskripsi parameter konfigurasi:
CLOUD_SCREENSIZE_HEIGHT: Tinggi awal layar cloud
CLOUD_SCREENSIZE_WIDTH: Lebar awal layar cloud
DEBUG_MODE: Tingkat log (0 = tanpa log, 1 = debug, 2 = info)
DISPLAY_COL: Jumlah maksimum kolom yang ditampilkan (10)
GROUPIDS: Grup instans (mendukung daftar)
GROUP_SCREENSIZE_HEIGHT: Tinggi awal jendela gambar mini lokal
GROUP_SCREENSIZE_WIDTH: Lebar awal jendela gambar mini lokal
LOCAL_SCREENSIZE_HEIGHT: Tinggi awal jendela kontrol utama lokal
LOCAL_SCREENSIZE_WIDTH: Lebar awal jendela kontrol utama lokal
DISPLAY_SCALE: Rasio penskalaan kontrol utama
GROUP_SCALE: Rasio penskalaan gambar mini
MAX_PHONE_NUM: Jumlah maksimum koneksi
PROXY_CONN_TYPE: Jenis koneksi (nilai tetap)
QUIC_OPTION: Apakah menggunakan QUIC (nilai tetap)
PHONE_URL: Alamat server
PORT: Port server
AUDIO_ENABLE: Apakah audio diaktifkan
EndUserId: Username streaming kolaboratif
IS_COO: Apakah streaming kolaboratif diaktifkan
SALE_MODE: Apakah CPS diaktifkan
SHOW_INSTENCE_NAME: Apakah nama atau ID instans ditampilkan
USE_OPENGL: Apakah rendering OpenGL diaktifkanJalankan client/WuyingDemo.exe.
1.2 Alur integrasi
1.3 Praktik terbaik
Untuk panduan integrasi terperinci, lihat Praktik terbaik untuk mengintegrasikan Cloud Phone dengan cepat. Arsitektur integrasi Cloud Phone secara keseluruhan ditunjukkan pada diagram berikut:
Beberapa metode login tersedia untuk mendapatkan tiket yang diperlukan untuk integrasi SDK. Bagan alir berikut menunjukkan prosesnya:
Untuk detail implementasi spesifik, rujuk kode contoh pada bagian antarmuka siklus hidup.
2. Antarmuka siklus hidup
2.1 Membuat koneksi gambar mini
Prototipe fungsi: static AspClient* create(AspTicket& ticket, wuying::asp::shared_ptr<IAspClientCallback> callback);
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
ticket | AspTicket | AspTicket berisi informasi apakah dalam mode gambar mini, detail instans, dan kredensial koneksi. Untuk informasi lebih lanjut, lihat 4.1 AspTicket. |
callback | IAspClientCallback | Callback koneksi. Untuk informasi lebih lanjut, lihat 2.5.1 Proxy callback koneksi IAspClientCallback. |
Deskripsi fungsi: Antarmuka ini membuat koneksi gambar mini ke Cloud Phone.
Contoh kode:
AspTicket ticket;
// Set ticket
ticket.ticket = "";
// Set AppInstanceId
ticket.id = "";//AppInstanceId;
// Set user
ticket.user = "";//Nama Cloud Phone
// uuid harus sesuai dengan uuid backend
ticket.uuid = "wyClient";
// Tetap untuk Windows
ticket.systemType = "Windows";
// Tetap ke 0
ticket.partner = 0;
// Apakah mode gambar mini diaktifkan. Tetap ke true.
ticket.isThumbnailEnable = true;
// Tambahkan callback koneksi. Lihat detail di bawah.
shared_ptr<AspClientCbImpl> iClient(new AspClientCbImpl(cert.Id));
AspClient *client=AspClient::create(ticket, iClient);
// Callback clipboard. Lihat detail di bawah.
shared_ptr<AspClipboardlmpl> clipboardCallback(new AspClipboardlmpl());
client->setClipboardCallback(clipboardCallback);
// Callback perintah shell. Lihat detail di bawah.
shared_ptr<AspShellCmdlmpl> shellCmdCallBack(new AspShellCmdlmpl());
client->setShellCmdCallback(shellCmdCallBack);
// Atur ukuran tampilan gambar mini: lebar (int), tinggi (int), fps (int)
client->setThumbnailDisplay(with, height, 1);
// Atur jenis koneksi. Tetap ke socket dan false.
client->setProxyConnType(ASP_CONN_SOCKET);
client->setQuicOption(false);
// Atur callback tampilan
shared_ptr<IAspDisplayCallback> iDisplay(nullptr);
auto display = client->addDisplay(iDisplay);
// Hubungkan ke ponsel
client->open();2.2 Membuat koneksi kontrol utama
Prototipe fungsi: static AspClient* create(AspTicket& ticket, wuying::asp::shared_ptr<IAspClientCallback> callback);
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
ticket | AspTicket | AspTicket berisi informasi instans dan kredensial koneksi. Untuk informasi lebih lanjut, lihat 4.1 AspTicket. |
callback | IAspClientCallback | Callback koneksi. Untuk informasi lebih lanjut, lihat 2.5.1 Proxy callback koneksi IAspClientCallback. |
Deskripsi fungsi: Antarmuka ini membuat koneksi kontrol utama ke Cloud Phone.
Contoh kode:
AspTicket ticket;
// Set the ticket.
ticket.ticket = "";
// Set the AppInstanceId.
ticket.id = "";//AppInstanceId;
// Set the user.
ticket.user = "";// Nama cloud phone.
// UUID harus sama dengan UUID di backend.
ticket.uuid = "wyClient";
// Tetap ke nilai: Windows.
ticket.systemType = "Windows";
// Tetap ke nilai: 0.
ticket.partner = 0;
// Aktifkan fitur gambar mini. Tetap ke nilai: true.
ticket.isThumbnailEnable = true;
// Tambahkan callback koneksi. Untuk informasi lebih lanjut, lihat bagian selanjutnya.
shared_ptr<AspClientCbImpl> iClient(new AspClientCbImpl(cert.Id));
AspClient *client=AspClient::create(ticket, iClient);
// Callback clipboard. Untuk informasi lebih lanjut, lihat bagian selanjutnya.
shared_ptr<AspClipboardlmpl> clipboardCallback(new AspClipboardlmpl());
client->setClipboardCallback(clipboardCallback);
// Tambahkan callback perintah Shell. Untuk informasi lebih lanjut, lihat bagian selanjutnya.
shared_ptr<AspShellCmdlmpl> shellCmdCallBack(new AspShellCmdlmpl());
client->setShellCmdCallback(shellCmdCallBack);
// Atur ukuran jendela gambar mini. Parameter: lebar (int), tinggi (int), dan fps (int).
client->setThumbnailDisplay(with, height, 1);
// Atur jenis koneksi. Jenis tetap ke socket dan opsi QUIC diatur ke false.
client->setProxyConnType(ASP_CONN_SOCKET);
client->setQuicOption(false);
// Atur callback jendela.
shared_ptr<IAspDisplayCallback> iDisplay(nullptr);
auto display = client->addDisplay(iDisplay);
// Hubungkan ke cloud phone.
client->open();2.3 reopen
Prototipe fungsi: void reopen(std::string& ticket)
Deskripsi fungsi: Membuka ulang koneksi atau menyambungkan kembali setelah terputus. Hanya berlaku setelah memanggil close(false).
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
ticket | std::string | Ticket adalah kredensial koneksi. Biasanya berlaku selama 10 menit. |
Contoh kode:
client->reopen(ticket);2.4 close
Prototipe fungsi: void close(bool destroyClient = false)
Deskripsi fungsi: Menutup koneksi.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
destroyClient | bool | Apakah membersihkan sumber daya. Nilai default adalah false. |
Contoh kode:
client->close(false)2.5 Deskripsi callback
2.5.1 Proxy callback koneksi IAspClientCallback
Deskripsi antarmuka proxy:
Antarmuka | Deskripsi |
void onThumbnailUpdate(void* buffer, uint32_t width, uint32_t height, AspImageFormat format) | Dipanggil saat gambar mini berhasil diperbarui untuk koneksi Cloud Phone. Untuk detail format, lihat 5.2 AspImageFormat. |
void onConnectEvent(ConnectEvent& event) | Dipanggil saat terjadi event koneksi. Untuk detail event, lihat 4.2 ConnectEvent. |
Contoh kode:
class AspClientCbImpl : public IAspClientCallback
{
public:
AspClientCbImpl() {}
// Callback pembaruan gambar mini
void onThumbnailUpdate(void* buffer, uint32_t width, uint32_t height, AspImageFormat format) override {
}
// Callback event koneksi
void onConnectEvent(ConnectEvent& event) override {
switch(event.type) {
case ConnectEventType::EVENT_CONNECT_SUCCESS:
break;
case ConnectEventType::EVENT_CONNECT_FAILED:
break;
case ConnectEventType::EVENT_DISCONNECT_SUCCESS:
break;
case ConnectEventType::EVENT_RECONNECT_START:
break;
case ConnectEventType::EVENT_RECONNECT_FAILED:
break;
default:
break;
}
}
};2.5.2 Proxy callback aliran kontrol utama IAspDisplayCallback
Deskripsi antarmuka proxy:
Antarmuka | Deskripsi |
void onImageFrameReady(AspImageFrame& frame) | Dipanggil saat aliran kontrol utama siap setelah koneksi Cloud Phone berhasil. Untuk detail frame, lihat 4.3 AspImageFrame. |
Contoh kode:
class AspDisplayCbImpl : public IAspDisplayCallback
{
public:
void onImageFrameReady(AspImageFrame& frame) override {
// Pointer ke array byte gambar kontrol utama (panjang = lebar × tinggi × 4)
uint8_t* ptr = static_cast<uint8_t*>(frame.buffer);
// Lebar gambar
int width = frame.width;
// Tinggi gambar
int height = frame.height;
// Harus dilepas secara manual
frame.releaseBuffer();
}
};2.5.3 Proxy callback audio AspAudio
Deskripsi antarmuka proxy:
Antarmuka | Deskripsi |
void onAudioFrameRender(AspAudioFrame &frame) | Tidak perlu diimplementasikan. Untuk detail frame, lihat 4.4 AspAudioFrame. Rendering audio ditangani secara internal oleh SDK. |
void onAudioVolumeUpdate(uint32_t volume) | Tidak perlu diimplementasikan. Rendering audio ditangani secara internal oleh SDK. |
void onAudioMuteUpdate(bool isMute) | Tidak perlu diimplementasikan. Rendering audio ditangani secara internal oleh SDK. |
void onAudioPlaybackUpdate(AspAudioPlayback &playback) | Tidak perlu diimplementasikan. Untuk detail playback, lihat 4.5 AspAudioPlayback. Rendering audio ditangani secara internal oleh SDK. |
void onAudioPlaybackStart() | Tidak perlu diimplementasikan. Rendering audio ditangani secara internal oleh SDK. |
void onAudioPlaybackStop() | Tidak perlu diimplementasikan. Rendering audio ditangani secara internal oleh SDK. |
Contoh kode:
class AspAudioImpl : public AspAudio
{
public:
void onAudioFrameRender(AspAudioFrame &frame) override{
}
void onAudioVolumeUpdate(uint32_t volume) override{
}
void onAudioMuteUpdate(bool isMute) override{
}
void onAudioPlaybackUpdate(AspAudioPlayback &playback) override{
}
void onAudioPlaybackStart() override{
}
void onAudioPlaybackStop() override{
}
};3. Antarmuka bisnis
3.1 Antarmuka logging
3.1.1 Inisialisasi
Deskripsi fungsi: Antarmuka ini mencetak log internal SDK untuk troubleshooting.
Contoh kode:
// Inisialisasi logging. AspLogSinkImpl adalah callback log.
auto logSinkImpl = std::make_shared<AspLogSinkImpl>();
AspLogSink::setLogSink(logSinkImpl.get());3.1.2 Proxy callback AspLogSink
Deskripsi antarmuka proxy:
Antarmuka | Deskripsi |
void debug(const std::string& tag, const std::string& msg) | Callback log debug SDK |
void info(const std::string& tag, const std::string& msg) | Callback log info SDK |
void warning(const std::string& tag, const std::string& msg) | Callback log warning SDK |
void fatal(const std::string& tag, const std::string& msg) | Callback log fatal SDK |
void error(const std::string& tag, const std::string& msg) | Callback log error SDK |
Contoh kode:
#include "AspLogSink.h"
using namespace wuying::asp;
class AspLogSinkImpl : public AspLogSink
{
public:
AspLogSinkImpl() {
}
void debug(const std::string& tag, const std::string& msg) override {
// Cetak log debug
}
void info(const std::string& tag, const std::string& msg) override {
// Cetak log info
}
void warning(const std::string& tag, const std::string& msg) override {
// Cetak log warning
}
void fatal(const std::string& tag, const std::string& msg) override {
// Cetak log fatal
}
void error(const std::string& tag, const std::string& msg) override {
// Cetak log error
}
};3.2 Antarmuka bisnis gambar mini
3.2.1 suspendThumbnailDisplay
Prototipe fungsi: void suspendThumbnailDisplay()
Deskripsi fungsi: Menangguhkan streaming gambar mini.
Contoh kode:
client->suspendThumbnailDisplay();3.2.2 resumeThumbnailDisplay
Prototipe fungsi: void resumeThumbnailDisplay()
Deskripsi fungsi: Melanjutkan streaming gambar mini dan dapat memaksa mendorong satu frame.
Contoh kode:
client->resumeThumbnailDisplay();3.3 Fitur tambahan kontrol utama
3.3.1 setOutputImageFormat
Prototipe fungsi: void setOutputImageFormat(AspImageFormat format)
Deskripsi fungsi: Mengatur format frame callback kontrol utama.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
format | AspImageFormat | Format frame callback kontrol utama. Untuk detail, lihat 5.2 AspImageFormat. |
Contoh kode:
client->setOutputImageFormat(AspImageFormat::BGRA);3.3.2 requestGraphicsKeyFrame
Prototipe fungsi: void requestGraphicsKeyFrame(AspDisplay* display) = 0;
Deskripsi fungsi: Mendorong satu keyframe untuk aliran kontrol utama. Parameter adalah AspDisplay.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
display | AspDisplay* | Pointer kelas tampilan |
Contoh kode:
client->requestGraphicsKeyFrame(display);3.3.3 setGraphicsQuality
Prototipe fungsi: void setGraphicsQuality(AspImageQuality quality) = 0;
Deskripsi fungsi: Mengatur kualitas gambar. Kualitas bergantung pada resolusi. Secara umum, atur parameter ini ke AUTO. Untuk parameter terperinci, lihat definisi struct.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
quality | AspImageQuality | Kualitas gambar. Untuk detail, lihat 5.4 AspImageQuality. |
client->setGraphicsQuality(ASP_IMAGE_QUALITY_AUTO)3.3.4 setGraphicsFps
Prototipe fungsi: void setGraphicsFps(int fps) = 0;
Deskripsi fungsi: Mengatur frame per detik (FPS).
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
fps | int | Laju frame |
Contoh kode:
client->setGraphicsFps(30)3.3.5 setGraphicsBitrate
Prototipe fungsi: void setGraphicsBitrate(int32_t bps) = 0;
Deskripsi fungsi: Mengatur bitrate, yang memengaruhi ukuran gambar.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
bps | int32_t | Bitrate |
Bitrate berikut hanya sebagai referensi:
Kualitas gambar | Bitrate |
Kualitas rendah | 1×1024 |
Sedang | 5×1024 |
Kualitas tinggi | 10×1024 |
Tanpa loss | 50×1024 |
Contoh kode:
client->setGraphicsBitrate(1*1024)3.4 Mouse
3.4.1 sendMouseClick
Prototipe fungsi: void sendMouseClick(AspAction action, uint32_t button, uint32_t buttonState) = 0;
Deskripsi fungsi: Mengirim event klik mouse.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
action | AspAction | Untuk detail, lihat 5.5 AspAction. |
button | uint32_t | Untuk detail, lihat 5.6 AspMouseButtonMask. |
buttonState | uint32_t | Untuk detail, lihat 5.7 AspMouseButton. |
Contoh kode:
// Tekan tombol kiri mouse
display->sendMouseClick(AspAction::ACTION_DOWN, ASP_MOUSE_BUTTON_MASK_L, ASP_MOUSE_BUTTON_LEFT);
// Lepas tombol kiri mouse
display->sendMouseClick(AspAction::ACTION_UP, ASP_MOUSE_BUTTON_MASK_L, ASP_MOUSE_BUTTON_LEFT);3.4.2 sendMouseMove
Prototipe fungsi: virtual void sendMouseMove(uint32_t x, uint32_t y, uint32_t buttonState) = 0;
Deskripsi fungsi: Mengirim event gerakan mouse.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
x | uint32_t | Koordinat horizontal Cloud Phone |
y | uint32_t | Koordinat vertikal Cloud Phone |
buttonState | uint32_t | Untuk detail, lihat 5.6 AspMouseButtonMask. |
Contoh kode:
// x dan y adalah koordinat Cloud Phone
sendMouseMove(x, y, ASP_MOUSE_BUTTON_MASK_L)3.5 Keyboard
3.5.1 sendKeyEvent
Prototipe fungsi: virtual void sendKeyEvent(AspAction action, int scancode) = 0;
Fitur ini menjelaskan event keyboard.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
action | AspAction | Jenis aksi. Untuk detail, lihat 5.5 AspAction. |
scancode | int | Kode scan tombol |
Contoh kode:
// Tekan tombol
display->sendKeyEvent(AspAction::ACTION_DOWN,scanCode);
// Lepas tombol
display->sendKeyEvent(AspAction::ACTION_UP,scanCode);3.6 Clipboard
Dari lokal ke cloud
Dari cloud ke lokal
3.6.1 setClipBoardTypes
Prototipe fungsi: virtual void setClipBoardTypes(std::vector<AspClipboardType> types) = 0;
Mengirim format data konten clipboard saat Anda menyalin ke clipboard atau menempel dengan menekan Ctrl+V. Hanya teks yang didukung.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
types | std::vector<AspClipboardType> | Array jenis clipboard. Untuk detail, lihat 5.8 AspClipboardType. |
Contoh kode:
std::vector<AspClipboardType> types;
types.push_back(AspClipboardType::CLIPBOARD_UTF8_TEXT);
client->setClipBoardTypes(types);3.6.2 notifyClipboardReadComplete
Prototipe fungsi: virtual void notifyClipboardReadComplete(AspClipboardType type, uint8_t* buf, size_t len) = 0;
Deskripsi fungsi: Mengirim konten ke Cloud Phone. Fungsi ini dipanggil saat onClipboardRead(uint8_t selection, AspClipboardType type) dipicu.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
type | AspClipboardType | Jenis clipboard. Saat ini hanya mendukung teks. |
buf | uint8_t* | Pointer ke array byte konten clipboard |
len | size_t | Ukuran buf |
Contoh kode:
void onClipboardRead(uint8_t selection, AspClipboardType type) override {
// Dipicu saat menyalin dari lokal ke Cloud Phone melalui client->setClipBoardTypes(types)
// Panggil notifyClipboardReadComplete untuk mengirim konten clipboard
client->notifyClipboardReadComplete(type, reinterpret_cast<uint8_t *>(utf8Data.data()), utf8Data.size());
}3.6.3 Proxy callback IClipboardCallback
Deskripsi antarmuka proxy:
Antarmuka | Deskripsi |
void onClipboardRead(uint8_t selection, AspClipboardType type) | Dipicu saat menyalin dari lokal ke Cloud Phone melalui setClipBoardTypes(types). Panggil notifyClipboardReadComplete untuk mengirim konten clipboard. Untuk detail jenis, lihat 5.8 AspClipboardType. |
void onClipboardWrite(std::vector<AspClipboardData> dataV) | Dipicu saat menyalin dari Cloud Phone ke lokal. Tulis dataV ke clipboard lokal. Untuk detail data, lihat 4.6 AspClipboardData. |
Contoh kode:
class AspClipboardlmpl :public IClipboardCallback
{
public:
AspClipboardlmpl() {};
void onClipboardRead(uint8_t selection, AspClipboardType type) override {
// Dipicu saat menyalin dari lokal ke Cloud Phone melalui client->setClipBoardTypes(types)
// Panggil notifyClipboardReadComplete untuk mengirim konten clipboard
//client->notifyClipboardReadComplete(type, reinterpret_cast<uint8_t *>(utf8Data.data()), utf8Data.size());
}
void onClipboardWrite(std::vector<AspClipboardData> dataV) override {
// Tulis dataV ke clipboard lokal saat menyalin dari Cloud Phone
}
};3.7 Saluran perintah Shell
3.7.1 sendStringDataToShell
Prototipe fungsi: virtual bool sendStringDataToShell(const std::string& val) = 0;
Deskripsi fungsi: Mengirim perintah Shell.
Deskripsi parameter:
Nama parameter | Jenis parameter | Deskripsi |
val | std::string | Perintah ADB Shell dalam format JSON: {"id":"","cmd":""} |
Contoh kode:
client->sendStringDataToShell(jsonString)Perintah ADB umum:
Fungsi | Perintah |
Kembali | input keyevent KEYCODE_BACK |
Home | input keyevent KEYCODE_HOME |
Tombol switch | input keyevent KEYCODE_APP_SWITCH |
Bisukan | input keyevent 164 |
Naikkan volume | input keyevent KEYCODE_VOLUME_UP |
Turunkan volume | input keyevent KEYCODE_VOLUME_DOWN |
Sembunyikan bilah navigasi | setprop persist.wy.hasnavibar false; killall com.android.systemui |
Tampilkan bilah navigasi | setprop persist.wy.hasnavibar true; killall com.android.systemui |
Tangkapan layar | screencap -p /sdcard/Download/abc.png |
3.7.2 Proxy callback IShellCmdCallback
Deskripsi antarmuka proxy:
Antarmuka | Deskripsi |
void onReceiveStringData(const std::string& val) | Menerima tanggapan perintah Shell berbasis string |
void onReceiveRawData(const std::vector<uint8_t> val) | Menerima tanggapan perintah Shell berbasis byte mentah |
Contoh kode:
class AspShellCmdlmpl :public IShellCmdCallback
{
public:
AspShellCmdlmpl() {};
void onReceiveStringData(const std::string& val) override {
// Callback untuk tanggapan string
}
void onReceiveRawData(const std::vector<uint8_t> val) override {
// Callback untuk tanggapan byte mentah
}
};4. Detail parameter
4.1 AspTicket
struct AspTicket {
std::string ticket; // String tiket untuk mengakses Cloud Phone
std::string id; // ID Desktop
std::string user; // Username
std::string uuid; // UUID lokal (harus sesuai dengan UUID yang digunakan saat meminta tiket)
std::string systemType; // Jenis sistem operasi
uint8_t partner; // ID mitra
bool isThumbnailEnable = false; // Apakah mode gambar mini diaktifkan
};4.2 ConnectEvent
struct ConnectEvent {
ConnectEventType type; // Jenis event seperti keberhasilan atau kegagalan koneksi
int reason; // Alasan pemicu event
};4.3 AspImageFrame
struct AspImageFrame {
uint32_t frameId;
void* buffer;
uint32_t width;
uint32_t height;
AspImageFormat format;
ReleaseBuffer releaseBuffer;
};4.4 AspAudioFrame
struct AspAudioFrame {
int sample; // Laju sampel
int channels; // Saluran
int size; // Ukuran data
uint8_t *data; // Alamat data
ReleaseBuffer releaseBuffer; // Fungsi untuk melepas data. Harus dipanggil setelah menggunakan data.
};4.5 AspAudioPlayback
struct AspAudioPlayback {
AspAudioReadType readType; // Metode pengambilan data audio: PUSH atau PULL
AspAudioMode mode; // PCM atau OPUS
uint32_t channels; // Jumlah saluran
uint32_t frequency; // Laju sampel
AspAudioFormat format; // RAW atau OPUS
AudioReader audioReader; // Fungsi untuk pembacaan data dalam mode PULL. Lihat implementasi demo.
};4.6 AspClipboardData
struct AspClipboardData {
AspClipboardType type;
uint8_t* data;
uint32_t size;
};5. Enumerasi
5.1 AspConnType
enum AspConnType {
ASP_CONN_SOCKET = 0,
ASP_CONN_SOCKPAIR = 1,
ASP_CONN_PIPE = 2,
ASP_CONN_SOCKET_UNIX = 3,
ASP_CONN_END = ASP_CONN_PIPE,
};5.2 AspImageFormat
enum class AspImageFormat {
YUV420P,
YUV422P,
YUV444P,
RGB24,
RGBA,
BGRA,
ARGB,
ABGR,
NV12
};5.3 ConnectEventType
enum ConnectEventType {
EVENT_CONNECT_SUCCESS,
EVENT_CONNECT_FAILED,
EVENT_DISCONNECT_SUCCESS,
EVENT_RECONNECT_START,
EVENT_RECONNECT_FAILED
};5.4 AspImageQuality
enum AspImageQuality {
ASP_IMAGE_QUALITY_LOSSLESS = 0,
ASP_IMAGE_QUALITY_HIGH = 1,
ASP_IMAGE_QUALITY_MEDIUM = 2,
ASP_IMAGE_QUALITY_LOW = 3,
ASP_IMAGE_QUALITY_AUTO = 4,
};5.5 AspAction
enum AspAction {
ACTION_UP,
ACTION_DOWN
};5.6 AspMouseButtonMask
enum AspMouseButtonMask {
ASP_MOUSE_BUTTON_MASK_L = (1 << 0),
ASP_MOUSE_BUTTON_MASK_M = (1 << 1),
ASP_MOUSE_BUTTON_MASK_R = (1 << 2),
ASP_MOUSE_BUTTON_MASK_F = (1 << 3),
ASP_MOUSE_BUTTON_MASK_B = (1 << 4),
ASP_MOUSE_BUTTON_MASK = 0x1f
};5.7 AspMouseButton
enum AspMouseButton {
ASP_MOUSE_BUTTON_INVALID,
ASP_MOUSE_BUTTON_LEFT,
ASP_MOUSE_BUTTON_MIDDLE,
ASP_MOUSE_BUTTON_RIGHT,
ASP_MOUSE_BUTTON_UP,
ASP_MOUSE_BUTTON_DOWN,
ASP_MOUSE_BUTTON_SIDE_FORWARD,
ASP_MOUSE_BUTTON_SIDE_BACK,
ASP_MOUSE_BUTTON_ENUM_END
};5.8 AspClipboardType
enum AspClipboardType {
CLIPBOARD_NONE = 0,
CLIPBOARD_UTF8_TEXT,
CLIPBOARD_IMAGE_PNG, /* Semua klien yang mendukung gambar harus mendukung ini */
CLIPBOARD_IMAGE_BMP, /* opsional */
CLIPBOARD_IMAGE_TIFF, /* opsional */
CLIPBOARD_IMAGE_JPG, /* opsional */
CLIPBOARD_FILE, /* opsional, file tunggal */
CLIPBOARD_DIRECTORY, /* opsional, mendukung rekursif direktori */
CLIPBOARD_HTML,
CLIPBOARD_RTF,
CLIPBOARD_XML_SPREAD_SHEET,
};6. Kode kesalahan
Kode kesalahan | Pesan kesalahan ( | Modul | Penyebab |
Kode kesalahan 2–26: Masalah terkait jaringan | |||
2 | Gagal terhubung ke %s. | ASP SDK | MAGIC tidak valid. |
3 | Gagal terhubung ke %s. | ASP SDK | Data salah. |
4 | Versi client tidak sesuai dengan versi server. | ASP SDK | Ketidaksesuaian versi. |
5 | Koneksi memerlukan TLS. | ASP SDK | TLS diperlukan. |
6 | Koneksi tidak memerlukan TLS. | ASP SDK | TLS digunakan padahal tidak diperlukan. |
7 | Anda tidak memiliki izin untuk terhubung ke %s. | ASP SDK | Izin ditolak. |
8 | ASP SDK | ID client tidak valid selama migrasi. | |
9 | Gagal terhubung ke %s. | ASP SDK | Saluran yang ditentukan tidak ada. |
20 | Gagal terhubung ke server ASP. | ASP SDK | Kesalahan koneksi saluran. |
21 | Otentikasi TLS gagal. | ASP SDK | Otentikasi TLS gagal. |
22 | Gagal terhubung ke %s. | ASP SDK | Kesalahan tautan saluran. |
23 | Gagal terhubung ke %s. | ASP SDK | Kesalahan otentikasi koneksi. |
24 | Gagal terhubung ke %s. | ASP SDK | Kesalahan I/O koneksi. |
25 | Gagal terhubung ke %s. | ASP SDK | Validasi tiket gagal. Kesalahan ini juga terjadi jika Anda menggunakan tiket yang sama untuk koneksi baru setelah sesi sebelumnya terputus. |
26 | ASP SDK | Kegagalan jabat tangan XQUIC. | |
1206 | Satu tiket hanya mendukung satu koneksi aktif dalam satu waktu. Kesalahan ini terjadi jika Anda mencoba menggunakannya untuk koneksi baru saat sesi sudah aktif. | ASP SDK | |
1207 | Me-restart instans membuat tiket tidak valid. | ASP SDK | |
Kode kesalahan kolaborasi aliran SDK | |||
1000 | token empty | ASP SDK | Kesalahan kolaborasi aliran ini terjadi ketika validasi sekunder antara client dan server gagal. |
1001 | user empty | ASP SDK | |
1200 | token invalid | ASP SDK | |
1201 | vm invalid | ASP SDK | |
1202 | ADMIN internal error | ASP SDK | |
1203 | user invalid | ASP SDK | |
1204 | token expired | ASP SDK | |
1500 | server internal error | ASP SDK | |
1501 | server network error | ASP SDK | |
Putus koneksi dan kesalahan koneksi | |||
2000 | Koneksi ke server timeout saat mengambil data dari %s. | ASP SDK | Putus koneksi normal. |
2001 | %s terputus dari server. Hal ini dapat terjadi jika proses %s dipaksa dihentikan. | ASP SDK | Hal ini biasanya terjadi ketika proses aplikasi sisi client dihentikan, misalnya saat pengguna menutup aplikasi. |
2002 | Pengguna lain telah terhubung ke %s dari client berbeda. Silakan coba lagi nanti. | ASP SDK | Sesi diambil alih oleh pengguna lain dalam mode preemptive. |
2003 | %s sedang dimatikan atau direstart. Operasi ini biasanya diinisiasi oleh administrator. Silakan coba lagi nanti. | ASP SDK | Cloud phone dimatikan atau direstart, biasanya oleh administrator. |
2004 | Koneksi pengguna saat ini dihentikan. | ASP SDK | Client menginisiasi pemutusan koneksi, atau server menghentikan sesi. |
2005 | %s terputus karena sesi mencapai batas penggunaan yang ditetapkan oleh administrator. | ASP SDK | Sesi dihentikan karena mencapai batas penggunaan yang ditetapkan oleh administrator. |
2006 | Administrator mencabut izin Anda untuk menggunakan cloud phone ini. Sesi Anda akan terputus. | ASP SDK | Administrator mencabut izin pengguna. |
2010 | Gagal terhubung ke %s. | ASP SDK | Kegagalan koneksi Vdagent. |
2011 | Parameter koneksi tidak valid. | ASP SDK | Client mencoba terhubung dengan parameter yang tidak valid. |
2027 | Mode pull aliran telah dialihkan. | ASP SDK | Mode pull aliran dialihkan dari mode preemptive ke mode kolaboratif, atau sebaliknya. |
2100 | Izin clipboard ditolak: menyalin dari %s ke client lokal tidak diizinkan. | ASP SDK | Izin clipboard ditolak: menyalin dari VM ke client lokal tidak diizinkan. |
2101 | Izin clipboard ditolak: menyalin dari client lokal ke %s tidak diizinkan. | ASP SDK | Izin clipboard ditolak: menyalin dari client lokal ke VM tidak diizinkan. |
2200 | %s sedang mencoba menyambungkan kembali... | ASP SDK | Masalah jaringan menyebabkan kehilangan koneksi. ASP SDK sedang mencoba menyambungkan kembali. |
2201 | %s terputus karena masalah jaringan pada perangkat Anda. | ASP SDK | Masalah jaringan menyebabkan kehilangan koneksi. ASP SDK tidak mendukung koneksi ulang otomatis untuk image saat ini, sehingga sisi aplikasi harus menginisiasinya. |
2202 | Koneksi ulang ke %s timeout. Periksa jaringan perangkat Anda dan coba lagi. | ASP SDK | Timeout koneksi ulang ASP SDK. |
2210 | Cloud phone terputus karena perangkat client memasuki mode tidur, menyebabkan kehilangan jaringan. | ASP SDK | |
2212 | Cloud phone terputus karena masalah jaringan lokal. | ASP SDK | |
2220 | Cloud phone terputus karena masalah jaringan lokal. | ASP SDK | |
2240 | Koneksi ulang gagal karena token dalam tiket tidak valid. | ||
2300 | Koneksi gagal karena parameter tidak valid yang dikirim dari sisi aplikasi. | ||
2501 | Client gagal terhubung ke gateway aliran. Jaringan tidak dapat dijangkau. | ||
2502 | Client gagal terhubung ke gateway aliran. Koneksi TCP ke IP gateway aliran timeout setelah tiga percobaan (total 15 detik). | ||
2503 | Client gagal terhubung ke gateway aliran karena kesalahan jaringan yang tidak diketahui. | ||
2504 | Koneksi client ke gateway aliran terganggu oleh perangkat lunak. | ||
2505 | Koneksi client ke gateway aliran ditolak. | ||
2506 | Tiket tidak valid. Gateway aliran gagal mengurai token. | ||
2507 | Tiket tidak valid. Tiket telah kedaluwarsa. | ||
2508 | Tiket tidak valid. UUID tidak sesuai. | ||
2509 | Gateway aliran gagal melakukan probe ke server ASP. | ||
2510 | Server menolak probe. | ||
2511 | Probe server gagal karena alasan selain timeout atau penolakan. | ||
2512 | Validasi token gerbang stream gagal. VpcId di dalam token manajemen tidak sesuai dengan vpcId gerbang aliran. | ||
2513 | Koneksi TCP tiba-tiba di-reset selama pertukaran "hello" antara client dan gateway aliran. | ||
2520 | Koneksi gagal. Diagnosis mandiri client menunjukkan adanya masalah jaringan. | ||
2521 | Koneksi terputus secara abnormal tiga kali selama fase jabat tangan TLS antara client dan gateway aliran. | ||
2522 | Terjadi kesalahan koneksi di lingkungan VPN. | ||
2523 | Client mencoba terhubung menggunakan protokol kriptografi nasional. Verifikasi pengaturan server atau pilih metode koneksi yang kompatibel. | ||
2701 | Masalah jaringan sisi client. Sebagai uji coba, coba terhubung menggunakan hotspot seluler 5G untuk melihat apakah masalah masih berlanjut. | ||
2702 | Jabat tangan SSL antara client dan gateway aliran timeout. | ||
2703 | Pertukaran "hello" antara client dan gateway aliran timeout. | ||
2704 | Server ASP mengalami waktu habis saat merespons permintaan pembuatan koneksi. Kemungkinan penyebabnya meliputi server ASP yang macet, masalah jaringan, gambar yang tidak responsif, atau penggunaan CPU/memori yang tinggi. | ||
2705 | Klien ASP mengalami waktu habis saat menunggu frame pertama. Kemungkinan penyebab meliputi server ASP yang macet, kegagalan pembuatan frame (disebabkan oleh penangkapan layar atau masalah driver GPU), masalah jaringan, atau penggunaan CPU/memori yang tinggi. | ||
2706 | Koneksi gagal karena penggunaan CPU atau memori tinggi pada perangkat client. | ||
2707 | Server ASP timeout saat mengambil frame tangkapan layar pertama dari OS guest. | ||
2708 | Koneksi gagal karena thread SDK macet. | ||
Kesalahan logika sisi client | |||
5100 | Koneksi ke server ASP timeout. Silakan coba lagi nanti. | Sisi aplikasi | Sisi client tidak menerima event "connected" dalam jangka waktu yang diharapkan. |
5102 | Timeout saat menunggu data dari %s. Silakan coba lagi nanti. | Sisi aplikasi | Sisi client menerima event "connected" tetapi tidak menerima event "display" dalam jangka waktu yang diharapkan. |
5004 | Client mengalami kesalahan. Silakan restart client. | Sisi aplikasi | Sisi client menerima parameter startup yang tidak valid. Hal ini biasanya terjadi selama pengembangan. |
5200 | Koneksi ulang client timeout. Silakan coba lagi nanti. | Sisi aplikasi | |
7. FAQ
Bagaimana cara me-restart Cloud Phone?
Panggil API manajemen Restart instance untuk me-restart Cloud Phone. Setelah memanggil API ini, koneksi sisi client ke Cloud Phone akan terputus. Lakukan koneksi ulang setelah proses restart selesai.
Beralih antara gambar mini dan kontrol utama
Untuk beralih dari gambar mini ke kontrol utama, tutup terlebih dahulu koneksi gambar mini dan tunggu hingga pemutusan koneksi selesai sebelum membuka koneksi kontrol utama.
Untuk beralih dari kontrol utama ke gambar mini, tutup terlebih dahulu koneksi kontrol utama dan tunggu hingga pemutusan koneksi selesai sebelum membuka kembali koneksi gambar mini.
sequenceDiagram
participant App
participant Sdk
App->>Sdk: close(true)
Sdk-->>App: onConnectEvent EVENT_DISCONNECT_SUCCESS
App->>Sdk: reopen(Ticket)