การจับคู่ส่วนตัว
การจับคู่ส่วนบุคคลจะถูกใช้เมื่อผู้ใช้ต้องการเข้าร่วมเกมคนเดียว
กระบวนการจับคู่ใน SDK¶
เมื่อดำเนินการจับคู่ส่วนบุคคลด้วย Hive SDK กระบวนการโดยรวมจะแสดงในแผนภาพด้านล่าง
คำขอจับคู่¶
กำลังขอการจับคู่สำหรับผู้ใช้แต่ละคน.
ก่อนที่จะทำการร้องขอ คุณต้องลงทะเบียนข้อมูลการแข่งขันที่ตรงกับ matchId
ในคอนโซล Hive.
เมื่อขอการแข่งขัน คุณต้องระบุคะแนน point
(จำนวนเต็มตั้งแต่ 0 ถึงน้อยกว่า 10^10) และข้อมูลเพิ่มเติม extraData
(ข้อมูลภายใน 256 ตัวอักษร เช่น ชื่อเล่น ระดับ ประเทศ เป็นต้น) เป็นอาร์กิวเมนต์
Warning
หากคุณขอการแข่งขันอีกครั้งในขณะที่การแข่งขันกำลังดำเนินอยู่ ฟังก์ชัน callback จะส่งค่าผิดพลาด (MatchMakingResponseError
) โดยไม่หยุดการแข่งขันที่มีอยู่ ดังนั้นโปรดตรวจสอบสถานะการจับคู่ก่อนโดยใช้ ตรวจสอบสถานะการจับคู่ ก่อนที่จะขอการแข่งขัน
นี่คือตัวอย่างโค้ดสำหรับคำขอที่ตรงกัน
API Reference: MatchMaking .requestMatchMaking
using hive;
int matchId = 25; // matchId registered in the console
int point = 300; // points used for the match
string extraData = "your extraData"; // additional information to use for 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;
int matchId = 25; // matchId ลงทะเบียนในคอนโซล
int point = 300; // คะแนนที่ใช้สำหรับการแข่งขัน
string 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 // matchId ที่ลงทะเบียนในคอนโซล
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;
int matchId = 25; // matchId ลงทะเบียนในคอนโซล
int point = 300; // คะแนนที่ใช้สำหรับการแข่งขัน
String extraData = "ข้อมูลเพิ่มเติมของคุณ"; // ข้อมูลเพิ่มเติมที่จะใช้สำหรับการแข่งขัน
MatchMaking.INSTANCE.requestMatchMaking(matchId, point, extraData, (result, data) -> {
if (result.isSuccess()) {
// การเรียกสำเร็จ
} else {
// การเรียลล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
}
});
API Reference: MatchMakingInterface.requestMatchMaking
import HIVEService
let matchId: Int = 25 // matchId registered in the console
let point: Int = 300 // points used for the match
let extraData: String? = "your extraData" // additional information to use for 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"
NSInteger matchId = 25; // matchId registered in the console
NSInteger point = 300; // points used for the match
NSString *extraData = @"your extraData"; // additional information to be used for the match
[MatchMakingInterface requestMatchMakingWithMatchId:matchId
point:point
extraData:extraData
completion:^(HIVEResult *result, id data) {
if ([result isSuccess]) {
// call successful
} else {
// Call failed. See error code below
}
}];
ผลลัพธ์ของการเรียกใช้เมธอด requestMatchMatking()
และ getRequestingStatus()
จะส่งคืนวัตถุ MatchMakingData
โครงสร้างวัตถุ MatchMakingData¶
วัตถุที่ถูกส่งคืนเป็นการตอบสนองต่อ คำขอการจับคู่ และ ตรวจสอบสถานะการจับคู่ ซึ่งรวมถึงข้อมูลที่ป้อนระหว่างการขอและข้อมูลผลลัพธ์การจับคู่
ชื่อฟิลด์ | คำอธิบาย | ประเภท |
---|---|---|
requestPlayerId | รหัสผู้เล่นของผู้ใช้ที่ขอแมตช์ | Long |
requestGameIndex | ดัชนีเกมแมตช์ | Int |
requestMatchId | รหัสแมตช์ที่ขอ (รูปแบบที่ลงทะเบียนในคอนโซล Hive) | Int |
requestStatus | สถานะการขอแมตช์ (requested : ขอแมตช์แล้ว, notRequested : ไม่ได้ขอ (หรือไม่มีแมตช์ที่กำลังดำเนินการซึ่งได้ถูกจับคู่แล้ว)) | String |
requestTimeUtc | เวลาที่ขอแมตช์ (เช่น: 2025-01-02T11:13:50.96) | String |
requestPoint | คะแนนแมตช์ | Int |
requestExtraData | ข้อมูลเพิ่มเติมที่ให้ระหว่างการขอแมตช์ (มีอยู่หากใช้ extraData ในระหว่างการขอ) | String |
matchingStatus | สถานะความก้าวหน้าของแมตช์ (matchingInProgress : กำลังจับคู่, timeout : ไม่มีการจับคู่เกิดขึ้นภายในเวลาที่กำหนด, matched : การจับคู่สำเร็จ) | String |
matchingType | ว่ามีการเข้าร่วมเป็นทีมหรือการเข้าร่วมแบบบุคคล (มีอยู่หาก matchingStatus เป็น matched) (team : ทีม, player : บุคคล, unknown : หากไม่มีการยืนยันการจับคู่) | String |
matchingId | รหัสที่กำหนดให้กับแมตช์ที่สำเร็จ (มีอยู่หาก matchingStatus เป็น matched) (เช่น: 539:21_2025-01-02T11:45:55.25_1) | String |
matchingPlayerInfoList | รายการข้อมูลของผู้ใช้ที่จับคู่ MatchingResultPlayerInfo (มีอยู่หาก matchingStatus เป็น matched, ปรากฏในกรณีการเข้าร่วมแบบบุคคล) | Array |
matchingTeamInfoList | รายการข้อมูลทีม MatchingResultTeamInfo (มีอยู่หาก matchingStatus เป็น matched, ปรากฏในกรณีการเข้าร่วมเป็นทีม) | Array |
โครงสร้างวัตถุ MatchingResultTeamInfo¶
นี่คือวัตถุที่ถูกส่งเมื่อทีมเข้าร่วมการแข่งขันและสถานะการจับคู่ตรงกัน มันรวมถึงดัชนีของทีมและข้อมูลเกี่ยวกับผู้ใช้ที่เป็นสมาชิกของทีม
ชื่อฟิลด์ | คำอธิบาย | ประเภท |
---|---|---|
teamIndex | ดัชนีที่ไม่ซ้ำสำหรับทีม | Int |
playerInfos | รายการข้อมูลผู้ใช้ที่เป็นของทีม MatchingResultPlayerInfo | Array |
Note
เมื่อขอการจับคู่ส่วนบุคคล จะมีการจับคู่ทั้งแบบบุคคลและแบบทีม และขึ้นอยู่กับผลการแข่งขัน จะมีการจัดเตรียม matchingPlayerInfoList
หรือ matchingTeamInfoList
ที่เหมาะสม
โครงสร้างข้อมูล MatchingResultPlayerInfo¶
นี่คือวัตถุที่ถูกส่งเมื่อผู้ใช้เข้าร่วมการแข่งขันส่วนตัวและสถานะการจับคู่ตรงกัน มันมีข้อมูลเกี่ยวกับผู้ใช้ที่เข้าร่วมการแข่งขัน
ชื่อฟิลด์ | คำอธิบาย | ประเภท |
---|---|---|
playerId | playerId ของผู้ใช้ที่ตรงกัน | Long |
point | คะแนนของผู้ใช้ที่ตรงกัน | Int |
extraData | ข้อมูลเพิ่มเติมที่ผู้ใช้ที่ตรงกันให้มา (มีอยู่ถ้าผู้ใช้ใช้ extraData ตามคำขอ) | String |
ตรวจสอบสถานะการจับคู่¶
ตรวจสอบสถานะการจับคู่ของผู้ใช้ที่เข้าร่วมการแข่งขันส่วนตัว.
เมื่อเรียกใช้วิธีการตรวจสอบสถานะการจับคู่ มันจะคืนค่าหนึ่งในสามสถานะการจับคู่ด้านล่าง
- กำลังจับคู่ (matchingStatus: matchingInProgress)
- การจับคู่สำเร็จ (matchingStatus: matched)
- หมดเวลา (matchingStatus: timeout)
นี่คือตัวอย่างโค้ดสำหรับตรวจสอบสถานะการจับคู่
เอกสารอ้างอิง API: MatchMaking .getRequestingStatus
API Reference: MatchMaking ::getRequestingStatus
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
int 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: MatchMaking.getRequestingStatus
import com.hive.MatchMaking
import com.hive.ResultAPI
val matchId = 25 // matchId ที่ลงทะเบียนในคอนโซล
MatchMaking.getRequestingStatus(matchId, object : MatchMaking.MatchMakingDataListener {
override fun onMatchMakingData(result: ResultAPI, data: MatchMaking.MatchMakingDataListener) {
if (result.isSuccess) {
// การเรียกสำเร็จ
} else {
// การเรียกล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
}
}
})
เอกสารอ้างอิง API: MatchMaking.INSTANCE .getRequestingStatus
เอกสาร API: MatchMakingInterface.getRequestingStatus
API Reference: HIVEMatchMaking getRequestingStatus
กำลังจับคู่¶
หากสถานะการจับคู่คือ กำลังดำเนินการ คุณจำเป็นต้องเรียกใช้วิธีการซ้ำเพื่อตรวจสอบสถานะการจับคู่เพื่อดูว่ามันได้ถึงสถานะ จับคู่แล้ว หรือไม่
แนะนำให้เรียกใช้รอบการโทรซ้ำที่ช่วงเวลาตั้งแต่ 3 ถึง 10 วินาที ขึ้นอยู่กับลักษณะการทำงานของแอปพลิเคชัน ยังสามารถขยายช่วงเวลาได้อีกด้วย
การจับคู่สำเร็จ¶
หากสถานะการจับคู่เป็น Matched เกมของนักพัฒนาจะถูกเปิดใช้งาน กล่าวอีกนัยหนึ่ง ผู้ใช้ที่เชื่อมต่อผ่าน Hive SDK ที่ถูกจับคู่สามารถเข้าร่วมเกมของนักพัฒนาได้
หมดเวลา¶
หากสถานะการจับคู่เป็นการหมดเวลา (matchingStatus: timeout
) คุณต้อง ลบ การจับคู่ที่มีอยู่และขอการจับคู่ใหม่อีกครั้ง
ลบที่ตรงกัน¶
กำลังลบการแข่งขันที่มีอยู่
คุณต้องลบการแข่งขันเมื่อมันตกอยู่ภายใต้กรณีหนึ่งหรือมากกว่าดังต่อไปนี้
- หากผู้ใช้ยกเลิกการจับคู่
- หากสถานะการจับคู่หมดเวลา (matchingStatus: timeout)
-
หากเกมระหว่างผู้ใช้เสร็จสมบูรณ์ตามปกติ
※ คุณต้องขอให้ลบการแข่งขันหลังจากอัปเดตผลการแข่งขัน (อันดับ, คะแนน, สถานะชนะ/แพ้, ฯลฯ) บนเซิร์ฟเวอร์เกมหรือไคลเอนต์เกม
นี่คือตัวอย่างโค้ดสำหรับการลบการแข่งขัน
API Reference: MatchMaking .deleteRequesting
API Reference: MatchMaking ::deleteRequesting
API Reference: MatchMaking.deleteRequesting
import com.hive.MatchMaking
import com.hive.ResultAPI
val matchId = 25 // matchId ที่ลงทะเบียนในคอนโซล
MatchMaking.deleteRequesting(matchId, object : MatchMaking.MatchMakingResultListener {
override fun onMatchMakingResult(result: ResultAPI) {
if (result.isSuccess) {
// การเรียกสำเร็จ
} else {
// การเรียกล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
}
}
})
เอกสารอ้างอิง API: MatchMaking.INSTANCE .deleteRequesting
เอกสาร API: MatchMakingInterface.deleteRequesting
API Reference: HIVEMatchMaking deleteRequesting
รหัสข้อผิดพลาด¶
รหัสข้อผิดพลาด | ข้อความ | คำอธิบาย |
NEED_INITIALIZE | MatchMakingNotInitialized | หากการตั้งค่า SDK ยังไม่ได้ดำเนินการ (AuthV4.setup) |
INVALID_SESSION | MatchMakingNeedSignIn | หากยังไม่ได้ลงชื่อเข้าใช้ AuthV4 |
RESPONSE_FAIL | MatchMakingResponseError | - ล้มเหลวเนื่องจากพารามิเตอร์ไม่ถูกต้องในระหว่างการเรียก API - ล้มเหลวเนื่องจากปัญหาเครือข่าย - ขอให้จับคู่ใหม่ในขณะที่อยู่ในสถานะการขอจับคู่แล้ว - ขอให้ลบการจับคู่ที่ไม่ได้ร้องขอ |