API Reference
Important Notes
You must successfully call TapSDK_Init before calling any Online Multiplayer API. Calling Online Multiplayer functions without initialization or after initialization failure will return errors or unexpected results.
All string parameters (char*) accepted and returned by Online Multiplayer APIs are UTF-8 encoded. Convert as needed for your project.
Data Type Definitions
Enumeration Types
TapOnlineBattleEventID
Online multiplayer event type enumeration: [1, 1000) is reserved for async request callbacks (Response), [1000, 2000) for server-pushed notifications (Notification).
enum {
TapOnlineBattleEventID_Unknown = 0,
// [1, 1000) reserved for async request callbacks (Response)
TapOnlineBattleEventID_ConnectResponse = 1, // Connect callback; on success cast event_data to TapOnlineBattleConnectResponse*
TapOnlineBattleEventID_DisconnectResponse = 2, // Disconnect callback; always success, event_data is NULL
TapOnlineBattleEventID_CreateRoomResponse = 3, // Create room callback; on success cast event_data to TapOnlineBattleCreateRoomResponse*
TapOnlineBattleEventID_MatchRoomResponse = 4, // Match room callback; on success cast event_data to TapOnlineBattleMatchRoomResponse*
TapOnlineBattleEventID_GetRoomListResponse = 5, // Get room list callback; on success cast event_data to TapOnlineBattleGetRoomListResponse*
TapOnlineBattleEventID_JoinRoomResponse = 6, // Join room callback; on success cast event_data to TapOnlineBattleJoinRoomResponse*
TapOnlineBattleEventID_LeaveRoomResponse = 7, // Leave room callback; event_data is NULL
TapOnlineBattleEventID_UpdatePlayerCustomStatusResponse = 8, // Update player custom status callback; event_data is NULL
TapOnlineBattleEventID_UpdatePlayerCustomPropertiesResponse = 9, // Update player custom properties callback; event_data is NULL
TapOnlineBattleEventID_UpdateRoomPropertiesResponse = 10, // Update room properties callback; event_data is NULL
TapOnlineBattleEventID_SendCustomMessageResponse = 11, // Send custom message callback; event_data is NULL
TapOnlineBattleEventID_KickRoomPlayerResponse = 12, // Kick player callback; event_data is NULL
TapOnlineBattleEventID_StartFrameSyncResponse = 13, // Start frame sync callback; event_data is NULL
TapOnlineBattleEventID_SendFrameInputResponse = 14, // Send frame input callback; event_data is NULL
TapOnlineBattleEventID_StopFrameSyncResponse = 15, // Stop frame sync callback; event_data is NULL
// [1000, 2000) reserved for server-pushed notifications (Notification)
TapOnlineBattleEventID_ServiceErrorNotification = 1000, // Server error; game should restore to a state as it has just finished a successfully Connect (all states are lost at server-side)
TapOnlineBattleEventID_DisconnectNotification = 1001, // Kicked or unexpected disconnect; check error field. Reconnect on disconnect; do not reconnect when kicked
TapOnlineBattleEventID_PlayerOfflineNotification = 1002, // Player offline; cast event_data to TapOnlineBattlePlayerOfflineNotification*
TapOnlineBattleEventID_EnterRoomNotification = 1003, // Player entered room; cast event_data to TapOnlineBattlePlayerEnterRoomNotification*
TapOnlineBattleEventID_LeaveRoomNotification = 1004, // Player left room; cast event_data to TapOnlineBattlePlayerLeaveRoomNotification*
TapOnlineBattleEventID_PlayerCustomStatusNotification = 1005, // Player custom status changed; cast event_data to TapOnlineBattlePlayerCustomStatusNotification*
TapOnlineBattleEventID_PlayerCustomPropertiesNotification = 1006, // Player custom properties changed; cast event_data to TapOnlineBattlePlayerCustomPropertiesNotification*
TapOnlineBattleEventID_RoomPropertiesNotification = 1007, // Room properties updated; cast event_data to TapOnlineBattleRoomPropertiesNotification*
TapOnlineBattleEventID_CustomMessageNotification = 1008, // Custom message received; cast event_data to TapOnlineBattleCustomMessageNotification*
TapOnlineBattleEventID_RoomPlayerKickedNotification = 1009, // Player kicked from room; cast event_data to TapOnlineBattleRoomPlayerKickedNotification*
TapOnlineBattleEventID_FrameSyncStartNotification = 1010, // Frame sync started; cast event_data to TapOnlineBattleFrameSyncStartNotification*
TapOnlineBattleEventID_FrameNotification = 1011, // Latest match frame; cast event_data to TapOnlineBattleFrame*
TapOnlineBattleEventID_FrameSyncStopNotification = 1012, // Frame sync stopped; cast event_data to TapOnlineBattleFrameSyncStopNotification*
};
// Online multiplayer event type; see TapOnlineBattleEventID_* for values
typedef uint32_t TapOnlineBattleEventID;
Structure Types
All structure types used by Online Multiplayer use 8-byte alignment: #pragma pack(push, 8).
TapOnlineBattleEvent
Common event structure for online multiplayer:
typedef struct {
int64_t request_id; // Request ID; same as passed to async API; 0 for server notifications
const TapSDK_Error* error; // Error info; NULL on success, non-NULL on failure
TapOnlineBattleEventID event_id; // Use correct struct to cast event_data according to event_id
const void* event_data; // Event payload, e.g. async result or server notification
} TapOnlineBattleEvent;
TapOnlineBattleConnectResponse
Returned when TapOnlineBattle_AsyncConnect() succeeds:
typedef struct {
const char* player_id; // Player ID
} TapOnlineBattleConnectResponse;
TapOnlineBattleMatchParam
Match parameter key-value pair:
typedef struct {
const char* key; // Match param key, max 32 bytes
const char* value; // Match param value, max 64 bytes
} TapOnlineBattleMatchParam;
TapOnlineBattleRoomConfig
Room configuration:
typedef struct {
uint32_t max_player_count; // Max players, [1,20], required
const char* room_type; // Room type, max 32 bytes, required
uint32_t match_param_count; // Length of match_params array, up to 3 rules
const TapOnlineBattleMatchParam* match_params; // Custom match params; match requires max_player_count+room_type+match_params
const char* name; // Room name
const char* custom_properties; // Room custom properties, max 2048 bytes
} TapOnlineBattleRoomConfig;
TapOnlineBattlePlayerConfig
Player configuration:
typedef struct {
int32_t custom_status; // Player custom status
const char* custom_properties; // Player custom properties, max 2048 bytes
} TapOnlineBattlePlayerConfig;
TapOnlineBattleCreateRoomRequest
Create room request for TapOnlineBattle_AsyncCreateRoom():
typedef struct {
TapOnlineBattleRoomConfig room_cfg; // Room config
TapOnlineBattlePlayerConfig player_cfg; // Player config
} TapOnlineBattleCreateRoomRequest;
TapOnlineBattlePlayerInfo
Player information:
typedef struct {
const char* id; // Player ID
int32_t status; // Player status: 0-offline, 1-online
int32_t custom_status; // Player custom status
const char* custom_properties; // Player custom properties, max 2048 bytes
} TapOnlineBattlePlayerInfo;
TapOnlineBattleRoomInfo
Room information:
typedef struct {
const char* id; // Room ID
const char* name; // Room name
const char* room_type; // Room type
const char* owner_id; // Room owner ID
int32_t status; // Room status: 0-frame sync not started, 1-frame sync in progress
const char* custom_properties; // Room custom properties, max 2048 bytes
uint32_t max_player_count; // Max players, [1,20]
uint32_t player_count; // Current player count
const TapOnlineBattlePlayerInfo* players; // Player list, length player_count
int64_t create_time; // Room creation time, seconds since 1970
} TapOnlineBattleRoomInfo;
TapOnlineBattleCreateRoomResponse
Returned when TapOnlineBattle_AsyncCreateRoom() succeeds:
typedef struct {
const TapOnlineBattleRoomInfo* room_info; // Created room info
} TapOnlineBattleCreateRoomResponse;
TapOnlineBattleMatchRoomRequest
Match room request for TapOnlineBattle_AsyncMatchRoom():
typedef struct {
TapOnlineBattleRoomConfig room_cfg; // Room config, used to create room when no match
TapOnlineBattlePlayerConfig player_cfg; // Player config
} TapOnlineBattleMatchRoomRequest;
TapOnlineBattleMatchRoomResponse
Returned when TapOnlineBattle_AsyncMatchRoom() succeeds:
typedef struct {
const TapOnlineBattleRoomInfo* room_info; // Matched or created room info
} TapOnlineBattleMatchRoomResponse;
TapOnlineBattleGetRoomListRequest
Get room list request for TapOnlineBattle_AsyncGetRoomList():
typedef struct {
const char* room_type; // Room type; omit to fetch all types
uint32_t offset; // Offset, 0 for first request
uint32_t limit; // Number of rooms to fetch, default 20, max 100
} TapOnlineBattleGetRoomListRequest;
TapOnlineBattleRoomBasicInfo
Basic room information:
typedef struct {
const char* id; // Room ID
const char* name; // Room name
const char* room_type; // Room type
int32_t status; // Room status: 0-frame sync not started, 1-frame sync in progress
const char* custom_properties; // Room custom properties, max 2048 bytes
uint32_t max_player_count; // Max players
uint32_t player_count; // Current player count
int64_t create_time; // Room creation time, seconds since 1970
} TapOnlineBattleRoomBasicInfo;
TapOnlineBattleGetRoomListResponse
Returned when TapOnlineBattle_AsyncGetRoomList() succeeds:
typedef struct {
uint32_t room_count; // Length of rooms array
const TapOnlineBattleRoomBasicInfo* rooms; // Joinable room list, length room_count
uint32_t offset; // Offset for next page
bool has_more; // Whether more rooms are available
} TapOnlineBattleGetRoomListResponse;
TapOnlineBattleJoinRoomRequest
Join room request for TapOnlineBattle_AsyncJoinRoom():
typedef struct {
const char* room_id; // Room ID, cannot be null
TapOnlineBattlePlayerConfig player_cfg; // Player config
} TapOnlineBattleJoinRoomRequest;
TapOnlineBattleJoinRoomResponse
Returned when TapOnlineBattle_AsyncJoinRoom() succeeds:
typedef struct {
const TapOnlineBattleRoomInfo* room_info; // Joined room info
} TapOnlineBattleJoinRoomResponse;
TapOnlineBattleUpdateRoomPropertiesRequest
Update room properties request for TapOnlineBattle_AsyncUpdateRoomProperties():
typedef struct {
const char* name; // Room name, max 64 bytes
const char* custom_properties; // Room custom properties, max 2048 bytes
} TapOnlineBattleUpdateRoomPropertiesRequest;
TapOnlineBattleSendCustomMessageRequest
Send custom message request for TapOnlineBattle_AsyncSendCustomMessage():
typedef struct {
const char* msg; // Custom message, non-empty, UTF-8, max 2048 bytes
uint32_t receiver_type; // Receiver type: 0-all in room (excluding sender), 1-specific players
uint32_t receiver_count; // Length of receivers array, max 20 player IDs
const char** receivers; // Receiver ID array, valid when receiver_type is 1
} TapOnlineBattleSendCustomMessageRequest;
TapOnlineBattleSendFrameInputRequest
Send frame input for TapOnlineBattle_AsyncSendFrameInput():
typedef struct {
const char* data; // Game input, UTF-8 string, max 1024 bytes
} TapOnlineBattleSendFrameInputRequest;
TapOnlineBattlePlayerOfflineNotification
Player offline notification (only sent when player goes offline after frame sync has started):
typedef struct {
const char* room_id; // Room ID of offline player
const char* room_owner_id; // Room owner ID; if offline player was owner, this is new owner; otherwise unchanged
const char* player_id; // Offline player ID
} TapOnlineBattlePlayerOfflineNotification;
TapOnlineBattlePlayerEnterRoomNotification
Player entered room notification:
typedef struct {
const char* room_id; // Room ID the player entered
const TapOnlineBattlePlayerInfo* player_info; // Player info
} TapOnlineBattlePlayerEnterRoomNotification;
TapOnlineBattlePlayerLeaveRoomNotification
Player left room notification:
typedef struct {
const char* room_id; // Room ID the player left
const char* room_owner_id; // Room owner ID; if leaver was owner, this is new owner; otherwise unchanged
const char* player_id; // Player ID
} TapOnlineBattlePlayerLeaveRoomNotification;
TapOnlineBattlePlayerCustomStatusNotification
Player custom status change notification:
typedef struct {
const char* player_id; // Player ID
int32_t status; // Player custom status
} TapOnlineBattlePlayerCustomStatusNotification;
TapOnlineBattlePlayerCustomPropertiesNotification
Player custom properties change notification:
typedef struct {
const char* player_id; // Player ID
const char* properties; // Player custom properties
} TapOnlineBattlePlayerCustomPropertiesNotification;
TapOnlineBattleRoomPropertiesNotification
Room properties change notification:
typedef struct {
const char* id; // Room ID
const char* name; // Room name
const char* custom_properties; // Room custom properties
} TapOnlineBattleRoomPropertiesNotification;
TapOnlineBattleCustomMessageNotification
Custom message notification:
typedef struct {
const char* player_id; // Sender player ID
const char* msg; // Custom message, UTF-8, max 2048 bytes
} TapOnlineBattleCustomMessageNotification;
TapOnlineBattleRoomPlayerKickedNotification
Player kicked from room notification:
typedef struct {
const char* room_id; // Room ID of kicked player
const char* player_id; // Kicked player ID
} TapOnlineBattleRoomPlayerKickedNotification;
TapOnlineBattleFrameSyncStartNotification
Frame sync start notification:
typedef struct {
const TapOnlineBattleRoomInfo* room_info; // Room info when frame sync started
int32_t frame_sync_id; // Frame sync ID, unique in room, changes each start
int32_t seed; // Seed for consistent random number generation, such as TapSDK_CreateRandomNumberGenerator()
int64_t server_tms; // Server time when match started, ms since 1970
} TapOnlineBattleFrameSyncStartNotification;
TapOnlineBattleFrameInput
Player input in one frame:
typedef struct {
const char* player_id; // Player ID
const char* data; // One input, UTF-8 string
int64_t server_tms; // Server time when input was received, ms since 1970
} TapOnlineBattleFrameInput;
TapOnlineBattleFrame
Frame sync data structure:
typedef struct {
uint32_t id; // Frame ID, starting from 1
uint32_t input_count; // Length of inputs array
const TapOnlineBattleFrameInput* inputs; // All player inputs this frame, server receive order
} TapOnlineBattleFrame;
TapOnlineBattleFrameSyncStopNotification
Frame sync stop notification:
typedef struct {
const char* room_id; // Room ID where frame sync stopped
int32_t frame_sync_id; // Frame sync ID, unique in room
int32_t reason; // Reason: 0-owner stopped, 1-timeout
} TapOnlineBattleFrameSyncStopNotification;
ITapOnlineBattle
Online multiplayer interface object, obtained via TapOnlineBattle():
typedef struct ITapOnlineBattle ITapOnlineBattle;
Callback
Async request results and server notifications are delivered through the callback.
- Event object memory in the callback is managed by the SDK; do not free it
- After the callback returns, the SDK frees that memory; copy if you need to keep it
TapOnlineBattleCallback
Callback type for online multiplayer:
typedef void (*TapOnlineBattleCallback)(const TapOnlineBattleEvent*);
TapOnlineBattle_RunCallbacks
Invoke the callback to process request results and server notifications. Call every frame.
uint32_t TapOnlineBattle_RunCallbacks(
ITapOnlineBattle* self,
TapOnlineBattleCallback cb,
uint32_t maxEvents,
uint32_t* leftEvents
);
Parameters:
self: Online multiplayer singleton from TapOnlineBattle()cb: Event handlermaxEvents: Max events to process this call; 0 = all. Typically 10leftEvents: Output; number of events left. Use to decide whether to call again
Return value:
- Number of events processed this call
Usage example:
void onlineBattleEventHandler(const TapOnlineBattleEvent* event);
int main() {
// Assume SDK initialized successfully
bool running = true;
while (running) {
uint32_t leftEvents;
auto handledEvents = TapOnlineBattle_RunCallbacks(TapOnlineBattle(), onlineBattleEventHandler, 10, &leftEvents);
// Your game logic
// ...
Sleep(33);
}
TapSDK_Shutdown();
return 0;
}
void onlineBattleEventHandler(const TapOnlineBattleEvent* event)
{
// Note: event and referenced memory are freed by SDK after callback returns; copy if you need to keep
switch (event->event_id) {
case TapOnlineBattleEventID_ConnectResponse:
handleConnectResponse(event);
break;
case TapOnlineBattleEventID_CreateRoomResponse:
handleCreateRoomResponse(event);
break;
// other cases...
default:
break;
}
}
API Reference
TapOnlineBattle
Get the online multiplayer singleton.
ITapOnlineBattle* TapOnlineBattle();
Return value:
- Online multiplayer singleton
Usage example:
static int64_t gRequestID = 0;
ITapOnlineBattle* onlineBattle = TapOnlineBattle();
TapSDK_Result ret = TapOnlineBattle_AsyncConnect(onlineBattle, ++gRequestID);
TapOnlineBattle_AsyncConnect
Start an async request to connect to the online multiplayer service. Result is delivered via TapOnlineBattleEventID_ConnectResponse.
TapSDK_Result TapOnlineBattle_AsyncConnect(
ITapOnlineBattle* self,
int64_t request_id
);
Parameters:
self: Singleton from TapOnlineBattle()request_id: Developer-defined request ID, echoed in callback
Return value:
TapSDK_Result; if notTapSDK_Result_OK, request was not started and callback will not be invoked
Note: After connect success is delivered, you can call create room, match room, etc.
TapOnlineBattle_AsyncDisconnect
Start an async request to disconnect. Result via TapOnlineBattleEventID_DisconnectResponse.
TapSDK_Result TapOnlineBattle_AsyncDisconnect(
ITapOnlineBattle* self,
int64_t request_id
);
Parameters: self, request_id
Return value: Same as above
Note: After disconnect, create room / match room etc. are not allowed until connect succeeds again.
TapOnlineBattle_AsyncCreateRoom
Start async create room. Result via TapOnlineBattleEventID_CreateRoomResponse.
TapSDK_Result TapOnlineBattle_AsyncCreateRoom(
ITapOnlineBattle* self,
int64_t request_id,
const TapOnlineBattleCreateRoomRequest* request
);
Parameters: self, request_id, request (non-null)
Return value: Same as above
Usage example:
TapOnlineBattleCreateRoomRequest createRoomRequest;
// Zero-initialize struct to avoid wild pointers
// C++11+: TapOnlineBattleCreateRoomRequest createRoomRequest{};
memset(&createRoomRequest, 0, sizeof(createRoomRequest));
createRoomRequest.room_cfg.max_player_count = 4;
createRoomRequest.room_cfg.room_type = "ranked";
createRoomRequest.room_cfg.name = "MyRoom";
createRoomRequest.room_cfg.custom_properties = "{}";
createRoomRequest.player_cfg.custom_status = 0;
createRoomRequest.player_cfg.custom_properties = "{}";
auto ret = TapOnlineBattle_AsyncCreateRoom(TapOnlineBattle(), ++gRequestID, &createRoomRequest);
if (ret != TapSDK_Result_OK) {
return -1;
}
TapOnlineBattle_AsyncMatchRoom
Start async match room. Result via TapOnlineBattleEventID_MatchRoomResponse.
TapSDK_Result TapOnlineBattle_AsyncMatchRoom(
ITapOnlineBattle* self,
int64_t request_id,
const TapOnlineBattleMatchRoomRequest* request
);
Parameters: self, request_id, request (non-null)
Return value: Same as above
Usage example:
TapOnlineBattleMatchRoomRequest matchRoomRequest;
// Zero-initialize; C++11+: matchRoomRequest{}
memset(&matchRoomRequest, 0, sizeof(matchRoomRequest));
matchRoomRequest.room_cfg.max_player_count = 4;
matchRoomRequest.room_cfg.room_type = "ranked";
matchRoomRequest.room_cfg.name = "MyRoom";
matchRoomRequest.room_cfg.custom_properties = "{}";
matchRoomRequest.player_cfg.custom_status = 0;
matchRoomRequest.player_cfg.custom_properties = "{}";
auto ret = TapOnlineBattle_AsyncMatchRoom(TapOnlineBattle(), ++gRequestID, &matchRoomRequest);
if (ret != TapSDK_Result_OK) { return -1; }
TapOnlineBattle_AsyncGetRoomList
Start async get room list. Result via TapOnlineBattleEventID_GetRoomListResponse.
TapSDK_Result TapOnlineBattle_AsyncGetRoomList(
ITapOnlineBattle* self,
int64_t request_id,
const TapOnlineBattleGetRoomListRequest* request
);
Usage example:
TapOnlineBattleGetRoomListRequest getRoomListRequest;
memset(&getRoomListRequest, 0, sizeof(getRoomListRequest));
getRoomListRequest.room_type = "ranked";
getRoomListRequest.offset = 0;
getRoomListRequest.limit = 20;
auto ret = TapOnlineBattle_AsyncGetRoomList(TapOnlineBattle(), ++gRequestID, &getRoomListRequest);
if (ret != TapSDK_Result_OK) { return -1; }
TapOnlineBattle_AsyncJoinRoom
Start async join room. Result via TapOnlineBattleEventID_JoinRoomResponse.
TapSDK_Result TapOnlineBattle_AsyncJoinRoom(
ITapOnlineBattle* self,
int64_t request_id,
const TapOnlineBattleJoinRoomRequest* request
);
Usage example:
TapOnlineBattleJoinRoomRequest joinRoomRequest;
memset(&joinRoomRequest, 0, sizeof(joinRoomRequest));
joinRoomRequest.room_id = "room_id_from_list";
joinRoomRequest.player_cfg.custom_status = 0;
joinRoomRequest.player_cfg.custom_properties = "{}";
auto ret = TapOnlineBattle_AsyncJoinRoom(TapOnlineBattle(), ++gRequestID, &joinRoomRequest);
if (ret != TapSDK_Result_OK) { return -1; }
TapOnlineBattle_AsyncLeaveRoom
Start async leave room. Result via TapOnlineBattleEventID_LeaveRoomResponse.
TapSDK_Result TapOnlineBattle_AsyncLeaveRoom(
ITapOnlineBattle* self,
int64_t request_id
);
Note: Not allowed during frame sync; error returned via event.
TapOnlineBattle_AsyncUpdatePlayerCustomStatus
Start async update player custom status. Result via TapOnlineBattleEventID_UpdatePlayerCustomStatusResponse.
TapSDK_Result TapOnlineBattle_AsyncUpdatePlayerCustomStatus(
ITapOnlineBattle* self,
int64_t request_id,
int32_t status
);
Note: Not allowed during frame sync. Shared rate limit of 15 calls/sec with UpdatePlayerCustomProperties, UpdateRoomProperties, SendCustomMessage.
TapOnlineBattle_AsyncUpdatePlayerCustomStatus, TapOnlineBattle_AsyncUpdatePlayerCustomProperties(), TapOnlineBattle_AsyncUpdateRoomProperties(), TapOnlineBattle_AsyncSendCustomMessage() share a limit of 15 calls per second.
TapOnlineBattle_AsyncUpdatePlayerCustomProperties
Start async update player custom properties. Result via TapOnlineBattleEventID_UpdatePlayerCustomPropertiesResponse.
TapSDK_Result TapOnlineBattle_AsyncUpdatePlayerCustomProperties(
ITapOnlineBattle* self,
int64_t request_id,
const char* properties
);
Note: Not allowed during frame sync. Shared 15/sec limit with UpdatePlayerCustomStatus, UpdateRoomProperties, SendCustomMessage.
TapOnlineBattle_AsyncUpdateRoomProperties
Start async update room properties. Result via TapOnlineBattleEventID_UpdateRoomPropertiesResponse.
TapSDK_Result TapOnlineBattle_AsyncUpdateRoomProperties(
ITapOnlineBattle* self,
int64_t request_id,
const TapOnlineBattleUpdateRoomPropertiesRequest* request
);
Usage example:
TapOnlineBattleUpdateRoomPropertiesRequest updateRoomPropsRequest;
memset(&updateRoomPropsRequest, 0, sizeof(updateRoomPropsRequest));
updateRoomPropsRequest.name = "NewRoomName";
updateRoomPropsRequest.custom_properties = "{}";
auto ret = TapOnlineBattle_AsyncUpdateRoomProperties(TapOnlineBattle(), ++gRequestID, &updateRoomPropsRequest);
if (ret != TapSDK_Result_OK) { return -1; }
Note: Not allowed during frame sync; room owner only. Shared 15/sec limit.
TapOnlineBattle_AsyncSendCustomMessage
Start async send custom message. Result via TapOnlineBattleEventID_SendCustomMessageResponse.
TapSDK_Result TapOnlineBattle_AsyncSendCustomMessage(
ITapOnlineBattle* self,
int64_t request_id,
const TapOnlineBattleSendCustomMessageRequest* request
);
Usage example:
TapOnlineBattleSendCustomMessageRequest sendMsgRequest;
memset(&sendMsgRequest, 0, sizeof(sendMsgRequest));
sendMsgRequest.msg = "hello";
sendMsgRequest.receiver_type = 0; // 0=all in room (excl. sender), 1=specific players
// When receiver_type==1: set receiver_count and receivers
// const char* targets[] = { "player_id_1" };
// sendMsgRequest.receiver_type = 1; sendMsgRequest.receiver_count = 1; sendMsgRequest.receivers = targets;
auto ret = TapOnlineBattle_AsyncSendCustomMessage(TapOnlineBattle(), ++gRequestID, &sendMsgRequest);
if (ret != TapSDK_Result_OK) { return -1; }
Note: Shared 15/sec limit with UpdatePlayerCustomStatus, UpdatePlayerCustomProperties, UpdateRoomProperties.
TapOnlineBattle_AsyncKickRoomPlayer
Start async kick player from room. Result via TapOnlineBattleEventID_KickRoomPlayerResponse.
TapSDK_Result TapOnlineBattle_AsyncKickRoomPlayer(
ITapOnlineBattle* self,
int64_t request_id,
const char* player_id
);
Note: Not allowed during frame sync; room owner only. Error returned via event.
TapOnlineBattle_AsyncStartFrameSync
Start async start frame sync. Result via TapOnlineBattleEventID_StartFrameSyncResponse.
TapSDK_Result TapOnlineBattle_AsyncStartFrameSync(
ITapOnlineBattle* self,
int64_t request_id
);
TapOnlineBattle_AsyncSendFrameInput
Start async send player input. Result via TapOnlineBattleEventID_SendFrameInputResponse.
TapSDK_Result TapOnlineBattle_AsyncSendFrameInput(
ITapOnlineBattle* self,
int64_t request_id,
const TapOnlineBattleSendFrameInputRequest* request
);
Usage example:
TapOnlineBattleSendFrameInputRequest sendFrameInputRequest;
memset(&sendFrameInputRequest, 0, sizeof(sendFrameInputRequest));
sendFrameInputRequest.data = "{\"x\":1,\"y\":0}";
auto ret = TapOnlineBattle_AsyncSendFrameInput(TapOnlineBattle(), ++gRequestID, &sendFrameInputRequest);
if (ret != TapSDK_Result_OK) { return -1; }
Note: At most 5 inputs per frame; over limit returns error via event.
TapOnlineBattle_AsyncStopFrameSync
Start async stop frame sync. Result via TapOnlineBattleEventID_StopFrameSyncResponse.
TapSDK_Result TapOnlineBattle_AsyncStopFrameSync(
ITapOnlineBattle* self,
int64_t request_id
);
Parameters:
self: Singleton from TapOnlineBattle()request_id: Developer-defined request ID, echoed in callback
Return value:
TapSDK_Result; if notTapSDK_Result_OK, request was not started and callback will not be invoked