132 lines
3.4 KiB
JavaScript
132 lines
3.4 KiB
JavaScript
"use strict";
|
|
/**
|
|
* Game Iframe SDK - Message Sender
|
|
* Gửi message đến iframe
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.MessageSender = void 0;
|
|
const types_1 = require("./types");
|
|
/**
|
|
* MessageSender - Gửi messages đến iframe
|
|
*/
|
|
class MessageSender {
|
|
constructor(config) {
|
|
this.iframe = null;
|
|
this.config = config;
|
|
}
|
|
/**
|
|
* Set iframe element
|
|
*/
|
|
setIframe(iframe) {
|
|
this.iframe = iframe;
|
|
return this;
|
|
}
|
|
/**
|
|
* Get current iframe
|
|
*/
|
|
getIframe() {
|
|
return this.iframe;
|
|
}
|
|
/**
|
|
* Check if iframe is available
|
|
*/
|
|
isReady() {
|
|
return !!this.iframe?.contentWindow;
|
|
}
|
|
/**
|
|
* Send raw message to iframe
|
|
*/
|
|
sendRaw(message) {
|
|
if (!this.iframe?.contentWindow) {
|
|
return {
|
|
success: false,
|
|
error: new Error('Iframe not available'),
|
|
};
|
|
}
|
|
try {
|
|
this.iframe.contentWindow.postMessage(message, this.config.targetOrigin);
|
|
this.log('Sent message', { type: message.type });
|
|
return { success: true };
|
|
}
|
|
catch (error) {
|
|
const err = error;
|
|
this.log('Send failed', { error: err.message });
|
|
return { success: false, error: err };
|
|
}
|
|
}
|
|
/**
|
|
* Send game data (SERVER_PUSH_DATA)
|
|
*/
|
|
sendGameData(payload) {
|
|
// Inline message creation
|
|
const message = {
|
|
type: types_1.MESSAGE_TYPES.SERVER_PUSH_DATA,
|
|
jsonData: payload,
|
|
};
|
|
const result = this.sendRaw(message);
|
|
if (result.success) {
|
|
const dataLength = payload.data?.length || 0;
|
|
this.log('Sent game data', {
|
|
game_id: payload.game_id,
|
|
items: dataLength,
|
|
});
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Send leaderboard (SERVER_PUSH_LEADERBOARD)
|
|
*/
|
|
sendLeaderboard(data) {
|
|
// Inline message creation
|
|
const message = {
|
|
type: types_1.MESSAGE_TYPES.SERVER_PUSH_LEADERBOARD,
|
|
leaderboardData: data,
|
|
};
|
|
const result = this.sendRaw(message);
|
|
if (result.success) {
|
|
this.log('Sent leaderboard', {
|
|
players: data.top_players?.length || 0,
|
|
hasUserRank: !!data.user_rank,
|
|
});
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Reload iframe
|
|
*/
|
|
reloadIframe() {
|
|
if (!this.iframe) {
|
|
return false;
|
|
}
|
|
const currentSrc = this.iframe.src;
|
|
if (!currentSrc || currentSrc === 'about:blank') {
|
|
return false;
|
|
}
|
|
this.iframe.src = '';
|
|
setTimeout(() => {
|
|
if (this.iframe) {
|
|
this.iframe.src = currentSrc;
|
|
this.log('Iframe reloaded');
|
|
}
|
|
}, 100);
|
|
return true;
|
|
}
|
|
/**
|
|
* Debug log
|
|
*/
|
|
log(message, data) {
|
|
if (this.config.debug) {
|
|
console.log('[MessageSender]', message);
|
|
if (data) {
|
|
try {
|
|
console.log(JSON.stringify(data, null, 2));
|
|
}
|
|
catch (e) {
|
|
console.log(data);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exports.MessageSender = MessageSender;
|
|
//# sourceMappingURL=MessageSender.js.map
|