Implementation
Panduan Implementasi
6 langkah — dari connect sampai game jalan multiplayer.
Platform
Game Type
Join
Masuk ke room — dibuat otomatis jika belum ada.
await mabarin.room.join(roomId, game)Send
Relay event + data ke semua member.
mabarin.room.send({ action, ...data })On
Terima event dari pemain lain.
mabarin.room.on('room:message', ({ from, payload }) => ...)from = userId pengirim · payload = object dari send() // e.g. payload.action · payload.x · payload.cell
1
Setup
Tambahkan SDK ke HTML game kamu — satu baris cukup.
html
<!-- Tambahkan di <head> -->
<script src="https://cdn.jsdelivr.net/npm/@mabar/sdk/dist/mabar.min.js"></script>
<!-- npm (untuk bundler seperti Vite/Webpack): npm install @mabar/sdk -->2
Initialize
Inisialisasi sekali saja — API key dari Mabarin Dashboard.
javascript
const mabarin = new Mabar.MabarClient();
// npm/ESM: import { MabarClient } from '@mabar/sdk'; const mabarin = new MabarClient();
// (Opsional) Login dulu untuk dapat userId
const user = await mabarin.auth.login(email, password);
// atau register: await mabarin.auth.register(email, password, displayName);
await mabarin.initialize({
apiKey: 'YOUR_API_KEY', // salin dari Mabarin Dashboard
userId: user?.uid, // optional
name: user?.displayName,
});3
Join Room
Masuk ke room — room dibuat otomatis jika belum ada. Bagikan roomId ke pemain lain.
javascript
const roomId = 'game-room-01'; // ID bebas — bagikan ke pemain lain
await mabarin.room.join(roomId, 'my-game');
// ► Tampilkan roomId di UI agar pemain lain bisa join room yang sama→Tidak ada create/join terpisah — semua pemain join dengan roomId yang sama. Room dibuat jika belum ada.
4
Lobby — Track Pemain
Dengarkan pemain yang masuk dan keluar.
javascript
const players = {}; // { userId: name }
mabarin.room.on('room:joined', ({ userId, name }) => {
players[userId] = name;
addToLobbyUI(userId, name);
});
mabarin.room.on('room:left', ({ userId }) => {
delete players[userId];
removeFromLobbyUI(userId);
});5
Ready & Start
Semua pemain tandai ready, host mulai game.
javascript
// Semua pemain panggil ini saat siap
mabarin.room.setReady(true);
// Host mulai game → semua pemain terima 'room:started'
mabarin.room.start(); // ← host only
mabarin.room.on('room:started', () => {
showGameBoard();
myTurn = true; // tentukan siapa giliran pertama di logic kamu
});→room.start() hanya bisa dipanggil oleh player yang pertama kali join room (host).
6
Send & Receive
Kirim giliran — semua event di-relay ke player lain via room:message.
javascript
// ── Kirim aksi kamu ────────────────────────────────────
mabarin.room.send({ action: 'end_turn', cell: 4 });
mabarin.room.send({ action: 'game_over', winner: 'Alice' });
// ── Terima dari pemain lain ─────────────────────────────
mabarin.room.on('room:message', ({ from, payload }) => {
// from = userId pengirim
// payload = object dari send()
if (payload.action === 'end_turn') {
myTurn = true;
drawOpponentMove(payload.cell);
}
if (payload.action === 'game_over') {
showResult(payload.winner);
}
});
// ── Selesai ─────────────────────────────────────────────
mabarin.room.leave();Full Example— copy, sesuaikan, jalankan
Tic-Tac-Toe — Turn-Based 1v1
Copy, sesuaikan renderBoard() dan checkWin(), jalankan di browser.
javascript
// HTML: <script src="https://cdn.jsdelivr.net/npm/@mabar/sdk/dist/mabar.min.js"></script>
const mabarin = new Mabar.MabarClient();
let myTurn = false;
const board = new Array(9).fill(null);
async function init() {
const user = await mabarin.auth.login(email, password);
await mabarin.initialize({ apiKey: 'YOUR_API_KEY', userId: user.uid, name: user.displayName });
await mabarin.room.join('ttt-room-01', 'tictactoe');
// ► Atau join room yang dibuat host: await mabarin.room.join('ttt-room-02', 'tictactoe')
mabarin.room.on('room:joined', ({ userId, name }) => {
addToLobby(userId, name);
});
mabarin.room.on('room:left', ({ userId }) => {
removeFromLobby(userId);
});
mabarin.room.on('room:started', () => {
myTurn = true; // host giliran pertama
showBoard();
});
mabarin.room.on('room:message', ({ from, payload }) => {
if (payload.action === 'end_turn') {
board[payload.cell] = 'O';
renderBoard();
myTurn = true;
}
if (payload.action === 'game_over') {
alert(payload.winner ? payload.winner + ' menang!' : 'Draw!');
}
});
mabarin.room.setReady(true);
}
async function onCellClick(cell) {
if (!myTurn || board[cell]) return;
board[cell] = 'X';
renderBoard();
myTurn = false;
const me = mabarin.auth.currentUser?.displayName ?? 'Player';
if (checkWin('X')) mabarin.room.send({ action: 'game_over', winner: me });
else if (board.every(Boolean)) mabarin.room.send({ action: 'game_over', winner: null });
else mabarin.room.send({ action: 'end_turn', cell });
}
function onStartClick() { mabarin.room.start(); } // host only
function renderBoard() { /* update tampilan 3x3 grid */ }
function showBoard() { /* tampilkan game board */ }
function addToLobby(id, name) { /* tambah ke UI lobby */ }
function removeFromLobby(id) { /* hapus dari UI lobby */ }
function checkWin(p) {
const lines = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]];
return lines.some(([a,b,c]) => board[a]===p && board[b]===p && board[c]===p);
}
init();