up
All checks were successful
Deploy to Production / deploy (push) Successful in 8s

This commit is contained in:
lubukhu
2026-01-24 13:35:11 +07:00
parent 6c3e93636e
commit 65fd0158a3
145 changed files with 10262 additions and 0 deletions

View File

@@ -0,0 +1,128 @@
/**
* Game Iframe SDK - Message Sender
* Gửi message đến iframe
*/
import { MESSAGE_TYPES } from './types';
/**
* MessageSender - Gửi messages đến iframe
*/
export 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: 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: 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);
}
}
}
}
}
//# sourceMappingURL=MessageSender.js.map