Error Codes
1. Overview
WebGLHost C++ SDK error codes are defined in the IBrowsingService.h header file.
2. Error Code Definitions
// Error codes
#define WMPF_ERRCODE_SUCCESS 0
#define WMPF_ERRCODE_FAIL -1
#define WMPF_ERRCODE_INVALID_PARAM -2
#define WMPF_ERRCODE_NOT_INITIALIZED -3
#define WMPF_ERRCODE_ALREADY_INITIALIZED -4
3. Error Code Details
3.1 WMPF_ERRCODE_SUCCESS (0)
Description: Operation completed successfully
Return Scenarios:
InitializeBrowsingCoreinitialization successfulQueryInterfacequery successful- Game launch successful (via
LaunchCallback)
Code Example:
int result = service->InitializeBrowsingCore(config, "", &handler);
if (result == WMPF_ERRCODE_SUCCESS) {
std::cout << "Initialization successful!" << std::endl;
}
3.2 WMPF_ERRCODE_FAIL (-1)
Description: General failure error
Possible Causes:
- Runtime startup failed
- Runtime file does not exist or is corrupted
- Insufficient system resources
- Network request failed
Return Scenarios:
InitializeBrowsingCoreinitialization failedQueryInterfacequerying non-existent interface- Game launch failed (runtime error)
Code Example:
int result = service->InitializeBrowsingCore(config, "", &handler);
if (result == WMPF_ERRCODE_FAIL) {
std::cerr << "Initialization failed!" << std::endl;
std::cerr << "Possible causes:" << std::endl;
std::cerr << " - Runtime not found" << std::endl;
std::cerr << " - Invalid configuration" << std::endl;
}
Troubleshooting Steps:
- Check if runtime path is correct
- Confirm runtime file exists and is executable
- Check system logs and SDK logs
- Verify network connection (if remote resources needed)
3.3 WMPF_ERRCODE_INVALID_PARAM (-2)
Description: Invalid parameter
Possible Causes:
configJSON format is incorrect- Required parameters are missing (e.g.,
sdkKey,sdkSecret) - Parameter values are invalid
- Passed
nullptrwhere a valid pointer was expected
Return Scenarios:
InitializeBrowsingCoreconfiguration parameter errorQueryInterfacepassed invalid type name ornullptroutput pointer
Code Example:
// Bad: Invalid JSON format
const char* badConfig = "{sdkKey: no-quotes}"; // Missing quotes
int result = service->InitializeBrowsingCore(badConfig, "", nullptr);
if (result == WMPF_ERRCODE_INVALID_PARAM) {
std::cerr << "Invalid parameters!" << std::endl;
std::cerr << "Check your configuration JSON format" << std::endl;
}
Correct Configuration Format:
// Good: Valid JSON
const char* goodConfig = R"({
"sdkKey": "your-sdk-key",
"sdkSecret": "your-sdk-secret",
"debug": true
})";
int result = service->InitializeBrowsingCore(goodConfig, "", nullptr);
3.4 WMPF_ERRCODE_NOT_INITIALIZED (-3)
Description: SDK not initialized
Possible Causes:
- Attempting to use SDK features before calling
InitializeBrowsingCore - Continuing to use SDK after calling
UninitializeBrowsingCore
Return Scenarios:
- Calling SDK methods without initialization
- Continuing to call after uninitialization
Code Example:
IBrowsingService* service = GetBrowsingService();
// Bad: Query interface before initialization
IAppletManagerV3* appletMgr = nullptr;
int result = service->QueryInterface("IAppletManagerV3", (void**)&appletMgr);
if (result == WMPF_ERRCODE_NOT_INITIALIZED) {
std::cerr << "SDK not initialized!" << std::endl;
std::cerr << "Call InitializeBrowsingCore first" << std::endl;
}
// Good: Initialize first
service->InitializeBrowsingCore(config, "", nullptr);
result = service->QueryInterface("IAppletManagerV3", (void**)&appletMgr);
3.5 WMPF_ERRCODE_ALREADY_INITIALIZED (-4)
Description: SDK already initialized
Possible Causes:
- Repeatedly calling
InitializeBrowsingCore - Attempting to reinitialize without calling
UninitializeBrowsingCore
Return Scenarios:
- Calling
InitializeBrowsingCoreagain on an already initialized service
Code Example:
IBrowsingService* service = GetBrowsingService();
// First initialization
int result = service->InitializeBrowsingCore(config, "", nullptr);
std::cout << "First init: " << result << std::endl;
// Try to initialize again
result = service->InitializeBrowsingCore(config, "", nullptr);
if (result == WMPF_ERRCODE_ALREADY_INITIALIZED) {
std::cout << "Already initialized, no need to initialize again" << std::endl;
// This is not necessarily an error - continue using the SDK
}
Handling Recommendation:
- This is not a serious error; you can continue using the already initialized service
- If reinitialization is needed, call
UninitializeBrowsingCorefirst
4. Error Handling Best Practices
4.1 Using switch Statement
int result = service->InitializeBrowsingCore(config, "", &handler);
switch (result) {
case WMPF_ERRCODE_SUCCESS:
std::cout << "Initialization successful" << std::endl;
break;
case WMPF_ERRCODE_FAIL:
std::cerr << "Initialization failed: general error" << std::endl;
return 1;
case WMPF_ERRCODE_INVALID_PARAM:
std::cerr << "Initialization failed: invalid parameters" << std::endl;
return 1;
case WMPF_ERRCODE_NOT_INITIALIZED:
std::cerr << "Not initialized (shouldn't happen here)" << std::endl;
return 1;
case WMPF_ERRCODE_ALREADY_INITIALIZED:
std::cout << "Already initialized - continuing..." << std::endl;
break;
default:
std::cerr << "Unknown error: " << result << std::endl;
return 1;
}
4.2 Creating Error Handling Helper Function
const char* GetErrorString(int errorCode) {
switch (errorCode) {
case WMPF_ERRCODE_SUCCESS:
return "Success";
case WMPF_ERRCODE_FAIL:
return "General failure";
case WMPF_ERRCODE_INVALID_PARAM:
return "Invalid parameter";
case WMPF_ERRCODE_NOT_INITIALIZED:
return "Not initialized";
case WMPF_ERRCODE_ALREADY_INITIALIZED:
return "Already initialized";
default:
return "Unknown error";
}
}
// Usage
int result = service->InitializeBrowsingCore(config, "", nullptr);
std::cout << "Result: " << GetErrorString(result) << std::endl;
4.3 Logging
void LogError(const char* operation, int errorCode) {
std::cerr << "[ERROR] " << operation << " failed with code "
<< errorCode << " (" << GetErrorString(errorCode) << ")"
<< std::endl;
}
// Usage
int result = service->InitializeBrowsingCore(config, "", nullptr);
if (result != WMPF_ERRCODE_SUCCESS) {
LogError("InitializeBrowsingCore", result);
}
5. Game Launch Error Codes
Game launch returns error codes via LaunchCallback:
void OnLaunchComplete(const char* app_id, int result_code, const char* error_desc) {
if (result_code == WMPF_ERRCODE_SUCCESS) {
std::cout << "Game launched: " << app_id << std::endl;
} else {
std::cerr << "Game launch failed" << std::endl;
std::cerr << " App ID: " << app_id << std::endl;
std::cerr << " Error code: " << result_code << std::endl;
std::cerr << " Description: " << (error_desc ? error_desc : "N/A") << std::endl;
// Handle specific errors
switch (result_code) {
case WMPF_ERRCODE_FAIL:
std::cerr << " Possible causes:" << std::endl;
std::cerr << " - Invalid launch key" << std::endl;
std::cerr << " - Network error" << std::endl;
std::cerr << " - Game file download failed" << std::endl;
break;
case WMPF_ERRCODE_INVALID_PARAM:
std::cerr << " Check launch configuration JSON" << std::endl;
break;
}
}
}
6. Complete Error Handling Example
#include <iostream>
#include "IBrowsingService.h"
#include "IAppletManagerV3.h"
class ErrorHandler {
public:
static const char* GetErrorString(int code) {
switch (code) {
case WMPF_ERRCODE_SUCCESS: return "Success";
case WMPF_ERRCODE_FAIL: return "Failure";
case WMPF_ERRCODE_INVALID_PARAM: return "Invalid parameter";
case WMPF_ERRCODE_NOT_INITIALIZED: return "Not initialized";
case WMPF_ERRCODE_ALREADY_INITIALIZED: return "Already initialized";
default: return "Unknown";
}
}
static void LogResult(const char* operation, int code) {
if (code == WMPF_ERRCODE_SUCCESS) {
std::cout << "[OK] " << operation << " succeeded" << std::endl;
} else {
std::cerr << "[ERROR] " << operation << " failed: "
<< GetErrorString(code) << " (" << code << ")" << std::endl;
}
}
static bool HandleError(const char* operation, int code) {
LogResult(operation, code);
return (code == WMPF_ERRCODE_SUCCESS ||
code == WMPF_ERRCODE_ALREADY_INITIALIZED);
}
};
int main() {
IBrowsingService* service = GetBrowsingService();
// Initialize
const char* config = R"({"sdkKey": "xxx", "sdkSecret": "yyy"})";
int result = service->InitializeBrowsingCore(config, "", nullptr);
if (!ErrorHandler::HandleError("Initialize", result)) {
service->Release();
return 1;
}
// Query interface
IAppletManagerV3* appletMgr = nullptr;
result = service->QueryInterface("IAppletManagerV3", (void**)&appletMgr);
if (!ErrorHandler::HandleError("QueryInterface", result)) {
service->UninitializeBrowsingCore();
service->Release();
return 1;
}
// Continue with application logic...
// Cleanup
appletMgr->Release();
service->UninitializeBrowsingCore();
service->Release();
return 0;
}
7. Important Notes
- Always Check Return Values: Never assume operations succeed
- Error Logging: Record error details for troubleshooting
- User Friendly: Display understandable error messages to users
- Recovery Strategy: Provide retry mechanisms for recoverable errors
- Resource Cleanup: Properly release resources when errors occur
8. Troubleshooting Workflow
1. Get error code
|
2. View error description (if available)
|
3. Check log files
|
4. Verify configuration parameters
|
5. Check runtime files
|
6. Confirm system resources
|
7. Try minimal example
|
8. Contact technical support