การจับคู่¶
การจับคู่ คือกระบวนการที่เชื่อมต่อผู้เล่นเกมออนไลน์ให้สามารถเล่นเกมร่วมกัน โดยจะจับคู่กับคู่ต่อสู้ที่มีระดับใกล้เคียงกันเพื่อให้ประสบการณ์การเล่นเกมที่สมดุล
เริ่มต้น¶
วิธีการใช้การจับคู่ที่ Hive มีอยู่ 2 แบบใหญ่ๆ
- Hive SDK
- Hive Server API
ที่นี่เราจะแนะนำวิธีการใช้ Hive SDK
หากต้องการใช้การจับคู่ด้วย Hive SDK ให้ทำตามขั้นตอนต่อไปนี้ก่อน
โปรดตรวจสอบคู่มือคอนโซลด้านบนสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการจับคู่และจำนวนผู้ที่จับคู่
กระบวนการทั้งหมดของ SDK การจับคู่¶
ในการดำเนินการฟีเจอร์การจับคู่ โปรดอ้างอิงตามกระบวนการต่อไปนี้
การขอจับคู่¶
ขอการจับคู่ ผู้ใช้แต่ละคนต้องการคำขอ และต้องลงทะเบียนข้อมูลการแข่งขันที่เกี่ยวข้องกับ matchId ใน Hive Console ล่วงหน้า นอกจากนี้ยังต้องการคะแนนที่จะใช้ในการแข่งขัน point (จำนวนเต็มตั้งแต่ 0 ถึงน้อยกว่า 10^10) และข้อมูลเพิ่มเติมที่จะใช้ในการแข่งขัน extraData (ข้อมูลภายใน 256 ตัวอักษร เช่น ชื่อเล่น, ระดับ, ประเทศ ฯลฯ) เป็นพารามิเตอร์ในการขอ
Note
หากคุณขอการจับคู่ใหม่ในขณะที่ยังอยู่ในสถานะการจับคู่เดิม การจับคู่ที่มีอยู่จะไม่ถูกยกเลิก แต่จะมีการส่งคืนข้อผิดพลาด (MatchMakingResponseError) คุณต้องตรวจสอบสถานะการจับคู่ก่อนที่คุณจะขอการจับคู่ด้วย ตรวจสอบสถานะการจับคู่
ต่อไปนี้คือตัวอย่างโค้ดการขอแมตช์
API Reference: MatchMaking .requestMatchMaking
using hive;
        string matchId = "25";      // matchId ที่ลงทะเบียนในคอนโซล
        int point = 300;            // คะแนนที่ใช้ในแมตช์
        string extraData = "your extraData";    // ข้อมูลเพิ่มเติมที่จะใช้ในแมตช์
        MatchMaking.requestMatchMaking(matchId, point, extraData, (ResultAPI result, MatchMaking.MatchMakingData data) => {
                    if (result.isSuccess()) {
                            // เรียกสำเร็จ
                    } else {
                            // การเรียกล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
                    }
});
#include "HiveMatchMaking.h"
FString matchId = "25";
int32 point = 300;
FString extraData = "your extraData";
FHiveMatchMaking::RequestMatchMaking(matchId, point, extraData, FHiveMatchMakingOnRequestMatchMakingDelegate::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;
        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"          // matchId ที่ลงทะเบียนในคอนโซล
        val point = 300             // คะแนนที่ใช้ในการแข่งขัน
        val extraData = "your 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";          // matchId ที่ลงทะเบียนในคอนโซล
        int point = 300;                // คะแนนที่ใช้ในการแข่งขัน
        String extraData = "your extraData";    // ข้อมูลเพิ่มเติมที่จะใช้ในการแข่งขัน
        MatchMaking.INSTANCE.requestMatchMaking(matchId, point, extraData, (result, data) -> {
                    if (result.isSuccess()) {
                            // การเรียกสำเร็จ
                    } else {
                            // การเรียลล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
                    }
});
API Reference: MatchMakingInterface.requestMatchMaking
import HIVEService
let matchId = "25"                  // ค่าที่ลงทะเบียนในคอนโซล matchId
let point = 300                     // คะแนนที่ใช้ในการแข่งขัน
let extraData = "your extraData"    // ข้อมูลเพิ่มเติมที่จะใช้ในการแข่งขัน
MatchMakingInterface.requestMatchMaking(matchId: matchId, point: point, extraData: extraData) { result, data in
        if result.isSuccess() {
        // การเรียกสำเร็จ
        }
        else {
        // การเรียลล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
        }
}
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 {
        // การเรียลล้มเหลว ดูรหัสข้อผิดพลาดด้านล่าง
    }
}];
ส่งวัตถุ MatchMakingData เป็นผลลัพธ์จากการเรียกใช้เมธอด requestMatchMatking(), getRequestingStatus()
โครงสร้างของอ็อบเจ็กต์ MatchMakingData¶
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | 
|---|---|---|
| matchPlayerId | playerId ของผู้ใช้ที่ร้องขอ | Long | 
| matchGameIndex | ดัชนีเกมที่จับคู่ | Int | 
| matchId | ไอดีการจับคู่ที่ร้องขอ | Int | 
| requestStatus | สถานะการร้องขอการจับคู่ ( requested: ได้ทำการร้องขอการจับคู่,notRequested: ไม่ได้ร้องขอ (หรือ, ไม่มีการจับคู่ที่กำลังดำเนินการ)) | String | 
| requestTimeUtc | เวลาที่ร้องขอการจับคู่ | String | 
| requestPoint | คะแนนการจับคู่ | Int | 
| requestExtraData | ข้อมูลเพิ่มเติมที่ส่งมาพร้อมกับการร้องขอการจับคู่ | String | 
| matchingStatus | สถานะการดำเนินการจับคู่ ( matchingInProgress: กำลังดำเนินการจับคู่,timeout: ไม่มีการจับคู่ภายในเวลาที่กำหนด,matched: การจับคู่สำเร็จ) | String | 
ตรวจสอบสถานะการจับคู่¶
ตรวจสอบสถานะการจับคู่ของผู้ใช้ จะส่งคืน 1 ใน 3 รายการต่อไปนี้
- กำลังดำเนินการจับคู่
- จับคู่สำเร็จ
- หมดเวลา (Timeout)
กำลังดำเนินการจับคู่¶
หากสถานะเป็น กำลังจับคู่ คุณต้องเรียกใช้วิธีนี้ซ้ำ ๆ เพื่อตรวจสอบว่าสถานะเป็น จับคู่สำเร็จ หรือไม่ แนะนำให้เรียกใช้ทุก 3-10 วินาที ขึ้นอยู่กับลักษณะการใช้งานของแอป คุณสามารถเพิ่มช่วงเวลาระหว่างการเรียกใช้ได้อีกด้วย
การจับคู่สำเร็จ¶
หากสถานะเป็น การจับคู่สำเร็จ ระบบจะเรียกใช้เกมของผู้พัฒนา นั่นคือ Hive SDK ได้เชื่อมต่อผู้ใช้ที่เล่นเกมร่วมกัน ดังนั้นผู้ใช้เหล่านี้จะได้สนุกกับเกมที่ผู้พัฒนาสร้างขึ้นด้วยกัน
หมดเวลา¶
หากสถานะเป็นการหมดเวลา(matchingStatus: timeout) คุณต้อง ลบการจับคู่ และขอการจับคู่ใหม่อีกครั้ง
ต่อไปนี้คือตัวอย่างโค้ดสำหรับตรวจสอบสถานะการจับคู่
API Reference: MatchMaking .getRequestingStatus
#include "HiveMatchMaking.h"
FString MatchId = "25";
FHiveMatchMaking::GetRequestingStatus(matchId, FHiveMatchMakingOnGetRequestingStatusDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveMatchMakingData& MatchMakingData) {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});
API Reference: MatchMaking ::getRequestingStatus
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
        using namespace std;
        using namespace hive;
        string 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 Reference: MatchMakingInterface.getRequestingStatus
API Reference: HIVEMatchMaking getRequestingStatus
ลบการจับคู่¶
ลบการจับคู่ หากตรงตามกรณีใดกรณีหนึ่งด้านล่างนี้
- หากผู้ใช้ยกเลิกการจับคู่
- หากสถานะการจับคู่หมดเวลา
- หากเกมระหว่างผู้ใช้เสร็จสมบูรณ์อย่างถูกต้อง- หลังจากที่เซิร์ฟเวอร์เกมอัปเดตข้อมูลผลการแข่งขัน (อันดับ, คะแนน, ผลแพ้ชนะ ฯลฯ) จะต้องขอให้ลบการจับคู่
 
ต่อไปนี้คือตัวอย่างโค้ดการลบการจับคู่
API Reference: MatchMaking .deleteRequesting
API Reference: MatchMaking ::deleteRequesting
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
        using namespace std;
        using namespace hive;
        string matchId = "25";          // matchId ที่ลงทะเบียนในคอนโซล
        MatchMaking::deleteRequesting(matchId, [=](ResultAPI const & result) {
                    if (result.isSuccess()) {
                            // call successful
                    } else {
                            // Call failed. See error code below
                    }
});
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 Reference: MatchMaking.INSTANCE .deleteRequesting
API Reference: MatchMakingInterface.deleteRequesting
API Reference: HIVEMatchMaking deleteRequesting
รหัสข้อผิดพลาด¶
| รหัสข้อผิดพลาด | ข้อความ | คำอธิบาย | 
| NEED_INITIALIZE | MatchMakingNotInitialized | กรณีที่ยังไม่ได้ตั้งค่า SDK (AuthV4.setup) | 
| INVALID_SESSION | MatchMakingNeedSignIn | กรณีที่ยังไม่ได้ลงชื่อเข้าใช้ | 
| RESPONSE_FAIL | MatchMakingResponseError | กรณีที่ล้มเหลวเนื่องจากพารามิเตอร์ที่ไม่ถูกต้องในการเรียก API, ล้มเหลวเนื่องจากปัญหาเครือข่าย, หรือกรณีที่มีการร้องขอการจับคู่ในสถานะที่มีการร้องขอการจับคู่แล้ว | 
