การจับคู่¶
การจับคู่ คือกระบวนการเชื่อมต่อผู้ใช้เกมในเกมออนไลน์เพื่อให้พวกเขาสามารถเล่นด้วยกัน โดยให้ประสบการณ์การเล่นเกมที่สมดุลโดยการจับคู่กับคู่ต่อสู้ที่มีระดับทักษะใกล้เคียงกัน.
เริ่มต้น¶
มีสองวิธีหลักในการใช้การจับคู่ใน Hive:
- Hive SDK\n2. Hive Server API
คู่มือนี้จะมุ่งเน้นไปที่การใช้ SDK ของ Hive
ในการใช้การจับคู่กับ SDK ของแบรนด์ Hive คุณต้องทำตามขั้นตอนเหล่านี้ก่อน:
สำหรับข้อมูลรายละเอียดเกี่ยวกับวิธีการจับคู่และจำนวนผู้เล่น โปรดดูที่คู่มือคอนโซลด้านบน
โฟลว์โดยรวมของ SDK การจับคู่¶
โปรดดูตามกระบวนการต่อไปนี้เมื่อดำเนินการฟีเจอร์การจับคู่
การขอจับคู่¶
มีการส่งคำขอการแข่งขัน ผู้ใช้แต่ละคนต้องทำการขอ และข้อมูลการแข่งขันที่ตรงกับ matchId
จะต้องลงทะเบียนในคอนโซล Hive ล่วงหน้า นอกจากนี้คุณยังต้องระบุคะแนน point
(จำนวนเต็มตั้งแต่ 0 ถึงน้อยกว่า 10^10) ที่จะใช้ในการแข่งขัน รวมถึงข้อมูลเพิ่มเติม extraData
(ชื่อเล่น, ระดับ, ประเทศ ฯลฯ จำกัดที่ 256 ตัวอักษร) เป็นพารามิเตอร์สำหรับคำขอ
Note
หากคุณขอการจับคู่ใหม่ในขณะที่มีคำขอการจับคู่ที่มีอยู่แล้ว คำขอการจับคู่ที่มีอยู่จะไม่ถูกยกเลิก แต่จะมีการส่งคืนการเรียกกลับข้อผิดพลาด (MatchMakingResponseError
) โปรดตรวจสอบ สถานะการจับคู่ ก่อนที่จะขอการจับคู่ใหม่อีกครั้ง
ด้านล่างคือตัวอย่างโค้ดสำหรับคำขอการจับคู่
API Reference: MatchMaking .requestMatchMaking
using hive;
string matchId = "25"; // Registered matchId in the console
int point = 300; // Score used for the match
string extraData = "your extraData"; // Additional information to be used in the match
MatchMaking.requestMatchMaking(matchId, point, extraData, (ResultAPI result, MatchMaking.MatchMakingData data) => {
if (result.isSuccess()) {
// call successful
} else {
// Call failed. See error code below
}
});
API Reference: MatchMaking ::requestMatchMaking
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
string matchId = "25"; // ลงทะเบียน matchId ในคอนโซล
int point = 300; // คะแนนที่ใช้สำหรับการแข่งขัน
string extraData = "your extraData"; // ข้อมูลเพิ่มเติมที่จะใช้ในการแข่งขัน
MatchMaking::requestMatchMaking(matchId, point, extraData, [=](ResultAPI const & result, MatchMakingData data) {
if (result.isSuccess()) {
// call successful
} else {
// Call failed. See error code below
}
});
API Reference: MatchMaking.requestMatchMaking
import com.hive.MatchMaking
import com.hive.ResultAPI
val matchId = "25" // หมายเลขการแข่งขันที่ลงทะเบียนในคอนโซล
val point = 300 // คะแนนที่ใช้สำหรับการแข่งขัน
val extraData = "ข้อมูลเพิ่มเติมของคุณ"; // ข้อมูลเพิ่มเติมที่จะใช้ในการแข่งขัน
MatchMaking.requestMatchMaking(matchId, point, extraData, object : MatchMaking.MatchMakingDataListener {
override fun onMatchMakingData(result: ResultAPI, data: MatchMaking.MatchMakingDataListener) {
if (result.isSuccess) {
// การเรียกสำเร็จ
} else {
// การเรียกล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
}
}
})
API Reference: MatchMaking .requestMatchMaking
import com.hive.MatchMaking;
import com.hive.ResultAPI;
String matchId = "25"; // รหัสการแข่งขันที่ลงทะเบียนในคอนโซล
int point = 300; // คะแนนที่ใช้สำหรับการแข่งขัน
String extraData = "ข้อมูลเพิ่มเติมของคุณ"; // ข้อมูลเพิ่มเติมที่จะใช้ในการแข่งขัน
MatchMaking.INSTANCE.requestMatchMaking(matchId, point, extraData, (result, data) -> {
if (result.isSuccess()) {
// การเรียกสำเร็จ
} else {
// การเรียลล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
}
});
เอกสาร API: MatchMakingInterface.requestMatchMaking
import HIVEService
let matchId = "25" // Registered matchId in the console
let point = 300 // Score used for the match
let extraData = "your extraData" // Additional information to be used in the match
MatchMakingInterface.requestMatchMaking(matchId: matchId, point: point, extraData: extraData) { result, data in
if result.isSuccess() {
// call successful
}
else {
// Call failed. See error code below
}
}
API Reference: HIVEMatchMaking requestMatchMaking
#import "HIVEService.h"
NSString *matchId = @"25"; // รหัส matchId ที่ลงทะเบียนในคอนโซล
NSInteger point = 300; // คะแนนที่ใช้สำหรับการแข่งขัน
NSString *extraData = @"your extraData"; // ข้อมูลเพิ่มเติมที่จะใช้ในการแข่งขัน
[MatchMakingInterface requestMatchMakingWithMatchId:matchId
point:point
extraData:extraData
completion:^(HIVEResult *result, id data) {
if ([result isSuccess]) {
// การเรียกสำเร็จ
} else {
// การเรียกล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
}
}];
requestMatchMaking()
, getRequestingStatus()
การเรียกใช้เมธอดจะส่งคืนวัตถุ MatchMakingData
โครงสร้างของวัตถุ MatchMakingData¶
ชื่อฟิลด์ | คำอธิบาย | ประเภท |
---|---|---|
matchPlayerId | รหัสผู้เล่นของผู้ใช้ที่ทำการร้องขอ | Long |
matchGameIndex | ดัชนีเกมการแข่งขัน | Int |
matchId | รหัสการแข่งขันที่ร้องขอ | Int |
requestStatus | สถานะการร้องขอการแข่งขัน (requested : การแข่งขันที่ร้องขอ, notRequested : ไม่ได้ร้องขอ (หรือไม่มีการแข่งขันที่กำลังดำเนินการ)) | String |
requestTimeUtc | เวลาที่ร้องขอการแข่งขัน | String |
requestPoint | คะแนนการแข่งขัน | Int |
requestExtraData | ข้อมูลเพิ่มเติมที่ให้ระหว่างการร้องขอการแข่งขัน | String |
matchingStatus | สถานะความก้าวหน้าของการแข่งขัน (matchingInProgress : การจับคู่กำลังดำเนินการ, timeout : การจับคู่ไม่เสร็จสิ้นภายในเวลาที่กำหนด, matched : การจับคู่สำเร็จ) | String |
ตรวจสอบสถานะการจับคู่¶
ตรวจสอบสถานะการจับคู่ของผู้ใช้ มันจะส่งคืนหนึ่งในสามสถานะต่อไปนี้:
- กำลังจับคู่
- การจับคู่สำเร็จ
- หมดเวลา
กำลังจับคู่¶
หากสถานะเป็น กำลังจับคู่ คุณควรเรียกใช้วิธีนี้ซ้ำๆ เพื่อตรวจสอบว่าสถานะได้เปลี่ยนเป็น จับคู่สำเร็จ หรือไม่ แนะนำให้เรียกใช้วิธีนี้ในช่วงเวลาทุก 3 ถึง 10 วินาที ขึ้นอยู่กับลักษณะการใช้งานของแอป คุณยังสามารถขยายช่วงเวลาออกไปได้อีก
การจับคู่สำเร็จ¶
หากสถานะคือ การจับคู่สำเร็จ ให้เริ่มเกมของนักพัฒนา นี่หมายความว่า Hive SDK ได้เชื่อมต่อผู้ใช้ที่จะเล่นเกมร่วมกัน ทำให้พวกเขาสามารถสนุกกับเกมที่พัฒนาขึ้นโดยนักพัฒนา
หมดเวลา¶
หากสถานะเป็น timeout (matchingStatus: timeout
) คุณต้อง ลบการจับคู่ และขอการจับคู่ใหม่อีกครั้ง
นี่คือตัวอย่างโค้ดสำหรับตรวจสอบสถานะการจับคู่
API Reference: MatchMaking .getRequestingStatus
API Reference: MatchMaking ::getRequestingStatus
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
string matchId = "25"; // Registered matchId in the console
MatchMaking::getRequestingStatus(matchId, [=](ResultAPI const & result, MatchMakingData data) {
if (result.isSuccess()) {
// call successful
} else {
// Call failed. See error code below
}
});
API Reference: MatchMaking.getRequestingStatus
import com.hive.MatchMaking
import com.hive.ResultAPI
val matchId = "25" // Registered matchId in the console
MatchMaking.getRequestingStatus(matchId, object : MatchMaking.MatchMakingDataListener {
override fun onMatchMakingData(result: ResultAPI, data: MatchMaking.MatchMakingDataListener) {
if (result.isSuccess) {
// call successful
} else {
// Call failed. See error code below
}
}
})
API Reference: MatchMaking.INSTANCE .getRequestingStatus
API Reference: MatchMakingInterface.getRequestingStatus
API Reference: HIVEMatchMaking getRequestingStatus
การลบการจับคู่¶
กระบวนการนี้ลบการแข่งขัน คุณควรลบการแข่งขันหากมีเงื่อนไขหนึ่งหรือมากกว่าที่ใช้
- ผู้ใช้ได้ยกเลิกการแข่งขัน
- สถานะการแข่งขันคือหมดเวลา
- เกมระหว่างผู้ใช้ได้เสร็จสิ้นตามปกติ
- คุณควรขอให้ลบการแข่งขันหลังจากอัปเดตผลเกม (อันดับ, คะแนน, สถานะชนะ/แพ้, ฯลฯ) บนเซิร์ฟเวอร์เกม
นี่คือตัวอย่างโค้ดสำหรับการลบการแข่งขัน
เอกสารอ้างอิง API: MatchMaking .deleteRequesting
API Reference: MatchMaking ::deleteRequesting
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
string matchId = "25"; // Registered matchId in the console
MatchMaking::deleteRequesting(matchId, [=](ResultAPI const & result) {
if (result.isSuccess()) {
// call successful
} else {
// Call failed. See error code below
}
});
เอกสารอ้างอิง API: MatchMaking.deleteRequesting
import com.hive.MatchMaking
import com.hive.ResultAPI
val matchId = "25" // Registered matchId in the console
MatchMaking.deleteRequesting(matchId, object : MatchMaking.MatchMakingResultListener {
override fun onMatchMakingResult(result: ResultAPI) {
if (result.isSuccess) {
// call successful
} else {
// Call failed. See error code below
}
}
})
API Reference: MatchMaking.INSTANCE .deleteRequesting
เอกสารอ้างอิง API: MatchMakingInterface.deleteRequesting
API Reference: HIVEMatchMaking deleteRequesting
รหัสข้อผิดพลาด¶
รหัสข้อผิดพลาด | ข้อความ | คำอธิบาย |
NEED_INITIALIZE | MatchMakingNotInitialized | หากการตั้งค่า SDK ยังไม่ได้ทำ (AuthV4.setup) |
INVALID_SESSION | MatchMakingNeedSignIn | หากผู้ใช้ยังไม่ได้ลงชื่อเข้าใช้ |
RESPONSE_FAIL | MatchMakingResponseError | หากการเรียก API ล้มเหลวเนื่องจากพารามิเตอร์ไม่ถูกต้อง ปัญหาเครือข่าย หรือหากมีการส่งคำขอจับคู่ในขณะที่อยู่ในสถานะคำขอจับคู่แล้ว |