Liaविकासकर्ता

मार्गदर्शन

एक दो खिलाड़ी कमरा। अपने सर्वर पर बनाएं, Lia के दोस्त चुनने वाले के साथ एक दोस्त को आमंत्रित करें या एक लिंक के साथ, और दोनों खिलाड़ियों को एक ही कमरे में लैंड करें।

विचार: एक कमरे में एक आईडी होती है, और आईडी आमंत्रण में जाती है's startParam. जो आमंत्रण खोलता है, वह आपकी एप्लिकेशन को उस startParam के साथ खोलता है, और आपकी पृष्ठ उसके साथ कमरे में शामिल हो जाती है। Lia'अपना Lia XO इस तरह काम करता है।

#1. अपने सर्वर पर एक कमरा बनाएं

server.js
app.post("/api/rooms", async (req, res) => {
  const playerId = await playerFrom(req.body.session); // see Verify on your server
  if (!playerId) return res.status(401).end();
  const room = "room-" + crypto.randomUUID().replace(/-/g, "").slice(0, 10);
  await db.createRoom(room, { host: playerId, players: [playerId] });
  res.json({ room });
});

app.post("/api/rooms/join", async (req, res) => {
  const playerId = await playerFrom(req.body.session);
  if (!playerId) return res.status(401).end();
  const room = await db.room(req.body.room);
  if (!room) return res.status(404).json({ error: "no_room" });
  if (room.players.length >= 2 && !room.players.includes(playerId)) return res.status(409).json({ error: "full" });
  await db.addPlayer(req.body.room, playerId);
  res.json({ room: req.body.room });
});

रूम आईडी के लिए startParam के अनुरूप होना आवश्यक है: 1 से 64 अक्षर, अंक, _ और -.

#2. एक दोस्त आमंत्रित करें

game.js
async function playWithAFriend() {
  const { room } = await api("/api/rooms", {});
  showWaiting(room);
  const { invited } = await Lia.inviteFriend({ startParam: room });
  if (!invited) Lia.toast("Share the link to invite someone");
}

// Or a link to send anywhere: opens your app in Lia, or the App Store without it.
async function shareRoom(room) {
  await Lia.share("Play with me: " + Lia.inviteLink(room));
}

प्रत्येक दोस्त जिसे चुना गया है उसके Lia चैट में एक कार्ड होता है। Lia केवल लोगों को अपने दोस्तों के आमंत्रण की अनुमति देता है, और केवल वे दोस्त जो आपके एप्लिकेशन को खोल सकते हैं (जबकि यह'में परीक्षण, केवल आपके परीक्षक।

#3. कमरे में भर जाएं

जब आपका एप खुलता है तो startParam पढ़ें, और जब यह खुला रहता है तो एक आने वाले के लिए सुनें'खुला (व्यक्ति दूसरा आमंत्रण टैप करता है):

function route(startParam) {
  if (startParam && startParam.startsWith("room-")) joinRoom(startParam);
}

Lia.init().then(function () {
  route(Lia.startParam);
  Lia.ready();
});
Lia.on("startParam", function (data) { route(data.startParam); });

async function joinRoom(room) {
  try {
    await api("/api/rooms/join", { room });
    openTable(room);
  } catch (error) {
    Lia.toast(error.message === "full" ? "That game is full" : "That game has ended");
  }
}

एक startParam केवल एक संकेत है: कोई भी किसी भी startParam के साथ एक लिंक बना सकता है, इसलिए आपके सर्वर निर्णय लेता है कि कमरा मौजूद है और खिलाड़ी शामिल हो सकता है।

#4. लाइव खेलें

दोनों खिलाड़ियों को अपने सर्वर से जोड़ें (एक WebSocket आम बात है), और प्रत्येक खिलाड़ी की पुष्टि करें'के सत्र को कमरे में शामिल करने से पहले। जब एक खेल चल रहा होता है:

Lia.enableClosingConfirmation(); // "Leave the game?" if they close
Lia.disableVerticalSwipes();     // a swipe down won't close the sheet mid move
Lia.onPause(function () { socket.send(JSON.stringify({ type: "away" })); });
Lia.onResume(function () { socket.send(JSON.stringify({ type: "back" })); });

#5. अब आपकी बारी, सूचना के माध्यम से

जब यह'किसी भी व्यक्ति'अपने चलने और वे'आप अपने एप्लिकेशन छोड़ दिया, एक सूचना के साथ कमरे के रूप में इसके startParam उन्हें सीधे वापस ले आता है:

{ "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "text": "@kofi played. Your move.", "startParam": "room-a81c2e09f4" }

#सार्वजनिक टेबल

आमंत्रण दोस्तों के लिए हैं। किसी भी व्यक्ति को Lia पर शामिल करने के लिए, सार्वजनिक टेबल के लिए रूम की सूची भी दें लॉबी जब यह प्रतीक्षा कर रहा है:

server.js
// When the room is made: list it (as the host, with one seat taken).
await lia("POST", "/lobby/tables", { tableId: room, hostPlayerId: playerId, seats: 2, taken: 1, title: "Quick game" });

// When someone joins from the lobby: seat them through Lia first (it refuses blocked players and full tables).
app.post("/api/rooms/sit", async (req, res) => {
  const playerId = await playerFrom(req.body.session);
  if (!playerId) return res.status(401).end();
  try {
    const { full } = await lia("POST", `/lobby/tables/${encodeURIComponent(req.body.room)}/sit`, { playerId });
    await db.addPlayer(req.body.room, playerId);
    if (full) startGame(req.body.room);
    res.json({ room: req.body.room });
  } catch (error) {
    res.status(409).json({ error: error.data?.error ?? "failed" }); // full, not_found, own_table
  }
});

// When the game starts or the room closes: take it out (safe to repeat).
await lia("DELETE", `/lobby/tables/${encodeURIComponent(room)}`);

अपने पृष्ठ में, खुले टेबल दिखाएं, और Lia में अपनी टेबल चुने वाले लोगों को बैठाएं'अपना लॉबी (वे startParam के साथ आते हैं lobby-<table id>):

const { tables } = await Lia.lobby.tables();
renderTables(tables, (table) => api("/api/rooms/sit", { room: table.id }));

function route(startParam) {
  if (startParam?.startsWith("lobby-")) return api("/api/rooms/sit", { room: startParam.slice(6) }).then(openTable);
  if (startParam?.startsWith("room-")) return joinRoom(startParam);
}

अजनबी कर सकते हैं'तब Lia के माध्यम से चैट करें, ब्लॉक किए गए हैं, और खिलाड़ी चुन सकते हैं रिपोर्ट एक दूसरे के।

#जाने वाली सीमाएं

  • एक व्यक्ति एक दिन में आपके ऐप में 20 दोस्तों को आमंत्रित कर सकता है, इसलिए आमंत्रण लोगों के चैट में स्वागत के रूप में रहते हैं।
  • एक होस्ट के पास आपके एप्प में एक समय पर अधिकतम 3 खुले सार्वजनिक टेबल हो सकते हैं, और एक सूची अधिकतम एक घंटा तक रहती है।
  • Lia.inviteFriend() उत्तर { invited }, कभी भी जो आमंत्रित किया गया था: आपके सर्वर को जब वे जुड़ते हैं तो पता चलता है कि कौन जुड़ा।

स्वचालित अनुवाद। अंग्रेजी सत्य का स्रोत है। अंग्रेजी में पढ़ें

किसी भी पृष्ठ, विधि और एंडपॉइंट के लिए खोजने के लिए प्रकार।