การจับคู่ส่วนตัว
การจับคู่ส่วนบุคคลจะถูกใช้เมื่อผู้ใช้ต้องการเข้าร่วมเกมคนเดียว
กระบวนการจับคู่ใน SDK¶
เมื่อดำเนินการจับคู่ส่วนบุคคลด้วย Hive SDK โฟลว์การทำงานโดยรวมจะแสดงในแผนภาพด้านล่าง
ขอจับคู่¶
กำลังขอการจับคู่สำหรับผู้ใช้แต่ละคน.
ก่อนที่จะทำการร้องขอ คุณต้องลงทะเบียนข้อมูลการแข่งขันที่ตรงกับ matchId ในคอนโซล Hive. 
เมื่อขอการแข่งขัน คุณต้องระบุคะแนน point (จำนวนเต็มตั้งแต่ 0 ถึงน้อยกว่า 10^10) และข้อมูลเพิ่มเติม extraData (ข้อมูลภายใน 256 ตัวอักษร เช่น ชื่อเล่น ระดับ ประเทศ ฯลฯ) เป็นอาร์กิวเมนต์
Warning
หากคุณขอให้จับคู่ซ้ำอีกครั้งในขณะที่มีการจับคู่กำลังดำเนินอยู่ ฟังก์ชัน callback จะส่งค่าผิดพลาด (MatchMakingResponseError) โดยไม่หยุดการจับคู่ที่มีอยู่ ดังนั้นโปรดตรวจสอบสถานะการจับคู่ก่อนโดยใช้ ตรวจสอบสถานะการจับคู่ ก่อนที่จะขอให้จับคู่
นี่คือตัวอย่างโค้ดสำหรับคำขอที่ตรงกัน
API Reference: MatchMaking .requestMatchMaking
using hive;
        int matchId = 25;       // matchId ที่ลงทะเบียนในคอนโซล
        int point = 300;            // คะแนนที่ใช้สำหรับการแข่งขัน
        string extraData = "ข้อมูลเพิ่มเติมของคุณ"; // ข้อมูลเพิ่มเติมที่ใช้สำหรับการแข่งขัน
        MatchMaking.requestMatchMaking(matchId, point, extraData, (ResultAPI result, MatchMaking.MatchMakingData data) => {
                    if (result.isSuccess()) {
                            // การเรียกสำเร็จ
                    } else {
                            // การเรียกล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
                    }
});
#include "HiveMatchMaking.h"
int MatchId = 25;                           // matchId ลงทะเบียนในคอนโซล
int Point = 300;                            // คะแนนที่ใช้สำหรับการแข่งขัน
FString ExtraData = TEXT("ข้อมูลเพิ่มเติมของคุณ");  // ข้อมูลเพิ่มเติมที่ใช้สำหรับการแข่งขัน
FHiveMatchMaking::RequestMatchMaking(MatchId, Point, ExtraData, FHiveMatchMakingOnMatchMakingDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveMatchMakingData& MatchMakingData) {
    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: 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 ที่ลงทะเบียนในคอนโซล
let point: Int = 300                        // คะแนนที่ใช้สำหรับการแข่งขัน
let extraData: String? = "your extraData"   // ข้อมูลเพิ่มเติมที่ใช้สำหรับการแข่งขัน
MatchMakingInterface.requestMatchMaking(matchId: matchId, point: point, extraData: extraData) { result, data in
        if result.isSuccess() {
        // การเรียกสำเร็จ
        }
        else {
        // การเรียล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
        }
}
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 console) | Int | 
| requestStatus | สถานะการขอแมตช์ ( requested: ขอแมตช์แล้ว,notRequested: ไม่ได้ขอ (หรือ ไม่มีแมตช์ที่กำลังดำเนินการที่ได้ถูกจับคู่แล้ว)) | String | 
| requestTimeUtc | เวลาที่ขอแมตช์ (เช่น: 2025-01-02T11:13:50.96) | String | 
| requestPoint | คะแนนแมตช์ | Int | 
| requestExtraData | ข้อมูลเพิ่มเติมที่ให้ในระหว่างการขอแมตช์ (มีอยู่ถ้าใช้ extraData ในระหว่างการขอ) | String | 
| matchingStatus | สถานะความก้าวหน้าของแมตช์ ( matchingInProgress: กำลังจับคู่,timeout: ไม่มีการจับคู่เกิดขึ้นภายในเวลาที่กำหนด,matched: การจับคู่สำเร็จ) | String | 
| matchingType | ว่ามีการเข้าร่วมเป็นทีมหรือการเข้าร่วมเป็นรายบุคคล (มีอยู่ถ้าสถานะการจับคู่คือ matched) ( team: ทีม,player: บุคคล,unknown: ถ้าไม่มีการยืนยันการจับคู่) | String | 
| matchingId | รหัสที่กำหนดให้กับแมตช์ที่สำเร็จ (มีอยู่ถ้าสถานะการจับคู่คือ matched) (เช่น: 539:21_2025-01-02T11:45:55.25_1) | String | 
| matchingPlayerInfoList | รายการข้อมูลของผู้ใช้ที่จับคู่ MatchingResultPlayerInfo (มีอยู่ถ้าสถานะการจับคู่คือ matched, ปรากฏในกรณีการเข้าร่วมเป็นรายบุคคล) | Array | 
| matchingTeamInfoList | รายการข้อมูลทีม MatchingResultTeamInfo (มีอยู่ถ้าสถานะการจับคู่คือ 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 Reference: MatchMaking .getRequestingStatus
#include "HiveMatchMaking.h"
int MatchId = 25;       // หมายเลขการแข่งขันที่ลงทะเบียนในคอนโซล
FHiveMatchMaking::GetRequestingStatus(MatchId, FHiveMatchMakingOnMatchMakingDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveMatchMakingData& MatchMakingData) {
    if (Result.IsSuccess()) {
        // เรียกสำเร็จ
    } else {
        // การเรียกล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
    }
}));
API Reference: MatchMaking ::getRequestingStatus
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
        using namespace std;
        using namespace hive;
        int matchId = 25;           // ลงทะเบียน matchId ในคอนโซล
        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
#include "HiveMatchMaking.h"
int MatchId = 25;       // หมายเลขการแข่งขันที่ลงทะเบียนในคอนโซล
FHiveMatchMaking::DeleteRequesting(MatchId, FHiveMatchMakingOnResultDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
    if (Result.IsSuccess()) {
        // เรียกสำเร็จ
    } else {
        // การเรียกล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
    }
}));
API Reference: MatchMaking ::deleteRequesting
เอกสาร API: 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 - ล้มเหลวเนื่องจากปัญหาเครือข่าย - ขอให้จับคู่ใหม่ในขณะที่อยู่ในสถานะการขอจับคู่แล้ว - ขอให้ลบการจับคู่ที่ไม่ได้ร้องขอ | 
