ลงทะเบียนเซิร์ฟเวอร์เกมสำหรับการแจ้งเตือนการระงับการใช้งาน¶
API นี้จะส่งข้อมูลไปยังเซิร์ฟเวอร์เกมโดยอัตโนมัติแบบเรียลไทม์เมื่อมีการลงทะเบียนใหม่หรือเปลี่ยนแปลงข้อมูลผู้ใช้ที่ถูกระงับการใช้งาน หรือเมื่อมีการยกเลิกการระงับการใช้งาน เซิร์ฟเวอร์เกมจะรับการเปลี่ยนแปลงสถานะการระงับของผู้ใช้ผ่าน API นี้ได้ทันทีและนำไปใช้กับบริการ
- เวลาการส่งข้อมูล: ระบบจะส่งข้อมูลไปยังเซิร์ฟเวอร์เกมโดยอัตโนมัติเมื่อมีการลงทะเบียนใหม่หรือเปลี่ยนแปลงข้อมูลผู้ใช้ที่ถูกระงับการใช้งาน และเมื่อมีการยกเลิกการระงับการใช้งาน การยกเลิกการระงับรวมทั้งกรณีที่ผู้ดูแลระบบยกเลิกโดยตรงและกรณีที่ครบกำหนดระยะเวลาการระงับ โดยทั้งสองกรณีจะส่ง
statusเป็นE - หน่วยการส่งข้อมูล: คำขอ(Request)หนึ่งครั้งจะส่งข้อมูลผู้ใช้ที่ถูกระงับได้สูงสุด 100 รายการ อย่างไรก็ตาม เพื่อรับประกันลำดับการประมวลผลของผู้ใช้รายเดียวกัน ระบบจะแบ่งผู้ใช้ออกเป็นหลายกลุ่มเพื่อส่งข้อมูล ดังนั้นแม้มีเป้าหมายจำนวนมาก ก็ไม่ได้หมายความว่าจะส่งครบ 100 รายการในทุกคำขอ จำนวนคำขอและจำนวนรายการต่อคำขอจะแตกต่างกันตามการกระจายตัวของผู้ใช้เป้าหมาย
หากต้องการใช้ API นี้ ให้เตรียมเซิร์ฟเวอร์เกมให้สามารถรับคำขอ(Request)ได้ก่อน จากนั้นลงทะเบียนเซิร์ฟเวอร์เกมที่ Hive Console > การยืนยันตัวตน > การระงับการใช้งาน > ลงทะเบียนเซิร์ฟเวอร์เกม
ข้อควรระวังเมื่อติดตั้งใช้งานเซิร์ฟเวอร์เกม
- เตรียมรองรับการรับข้อมูลซ้ำ (รับประกัน idempotency): หากการส่งผ่านเครือข่ายล้มเหลว ระบบ retry จะทำงาน จึงอาจได้รับข้อมูลเหตุการณ์เดียวกันมากกว่าหนึ่งครั้ง เซิร์ฟเวอร์เกมต้องประมวลผลแบบ idempotent เพื่อให้สถานะของระบบยังคงสอดคล้องกันแม้ได้รับคำขอเดียวกันหลายครั้ง
- ลำดับอาจสลับกันได้: คำขอที่ส่งไม่สำเร็จจะถูกเก็บไว้ในคิวสำหรับส่งซ้ำและถูกส่งในภายหลัง ในขณะที่คำขอต่อไปอาจถูกส่งก่อนโดยไม่ต้องรอ ดังนั้น หากเหตุการณ์ "ลงทะเบียน -> เปลี่ยนแปลง -> ยกเลิก" เกิดขึ้นต่อเนื่องในเวลาสั้น ๆ สำหรับผู้ใช้รายเดียวกัน ลำดับการมาถึงของคำขออาจสลับกันได้
- ตรวจสอบสถานะล่าสุด (เปรียบเทียบ
event_time): เนื่องจากลำดับที่คำขอมาถึงอาจแตกต่างจากลำดับเหตุการณ์จริง ต้องเปรียบเทียบฟิลด์event_timeก่อนนำข้อมูลที่ได้รับไปใช้กับเซิร์ฟเวอร์เกมเสมอ และประมวลผลหลังจากตรวจสอบแล้วว่าเป็นสถานะล่าสุด ดูตรรกะโดยละเอียดได้ที่ ตรวจสอบลำดับการประมวลผล - จำเป็นต้องตรวจสอบสถานะเซิร์ฟเวอร์เกม: นอกจากข้อมูลผู้ใช้ที่ถูกระงับการใช้งานแล้ว ระบบจะส่งคำขอตรวจสอบสถานะเป็นระยะเพื่อตรวจสอบว่าเซิร์ฟเวอร์เกมพร้อมรับข้อมูลหรือไม่ หากไม่ตอบกลับคำขอนี้ตามปกติ การส่งเหตุการณ์จะหยุดลง โปรดตรวจสอบและรองรับคำแนะนำ การตรวจสอบสถานะเซิร์ฟเวอร์เกม
URL คำขอ¶
| Request URL | URL เซิร์ฟเวอร์เกมของโปรเจ็กต์ที่ลงทะเบียนใน Hive Console ([การยืนยันตัวตน > การระงับการใช้งาน > ลงทะเบียนเซิร์ฟเวอร์เกม]) |
|---|---|
| HTTP Method | POST |
| Content-Type | application/json |
| Data Format | JSON |
ส่วนหัวคำขอ¶
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็น |
|---|---|---|---|
| Authorization | Bearer token สำหรับการยืนยันตัวตนของเซิร์ฟเวอร์เกม ส่งในรูปแบบ Bearer {คีย์การยืนยันตัวตนเซิร์ฟเวอร์เกม} | String | Y |
Note
- คุณสามารถตรวจสอบคีย์การยืนยันตัวตนเซิร์ฟเวอร์เกมได้ใน Hive Console [การยืนยันตัวตน > การระงับการใช้งาน > ลงทะเบียนเซิร์ฟเวอร์เกม > รายละเอียดโปรเจ็กต์ > คีย์การยืนยันตัวตนเซิร์ฟเวอร์เกม]
- ต้องติดตั้งการตรวจสอบคีย์การยืนยันตัวตนเซิร์ฟเวอร์เกมโดยตรงบนเซิร์ฟเวอร์เกมที่รับคำขอ
เนื้อหาคำขอ¶
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็น |
|---|---|---|---|
| game_index | ดัชนีเกม | Integer | Y |
| server_url | URL เซิร์ฟเวอร์เกม | String | Y |
| data | รายชื่อผู้ใช้ที่ถูกระงับการใช้งาน (สูงสุด 100 รายการ) | List | Y |
| data[].event_time | เวลาที่เผยแพร่เหตุการณ์ (epoch milliseconds) เป็นค่าที่เซิร์ฟเวอร์เกมใช้ตรวจสอบลำดับการประมวลผล รายละเอียด | Long | Y |
| data[].player_id | Player ID | Integer | Y |
| data[].status | สถานะการระงับการใช้งาน
| String | Y |
| data[].start_date | วันที่เริ่มระงับการใช้งาน หาก status เป็น E ระบบจะส่งวันที่เริ่มต้นของการระงับที่ถูกยกเลิก | String | Y |
| data[].end_date | วันที่สิ้นสุดการระงับการใช้งาน หาก status เป็น E ระบบจะส่งวันที่สิ้นสุดของการระงับที่ถูกยกเลิก | String | Y |
ตัวอย่างคำขอ¶
data ทั้งหมดที่อยู่ในคำขอหนึ่งครั้งจะมี status เดียวกันและ event_time เดียวกัน ระบบจะไม่ส่งสถานะที่แตกต่างกันปะปนกันในคำขอเดียว
การระงับแบบมีระยะเวลา (B)¶
{
"game_index": 539,
"server_url": "{URL เซิร์ฟเวอร์เกมของโปรเจ็กต์ที่ลงทะเบียนใน Hive Console}",
"data": [
{
"event_time": 1720612623847,
"player_id": 1,
"status": "B",
"start_date": "2024-07-10 20:56:59",
"end_date": "2024-07-13 20:56:59"
},
{
"event_time": 1720612623847,
"player_id": 2,
"status": "B",
"start_date": "2024-07-10 20:56:59",
"end_date": "2024-07-13 20:56:59"
}
]
}
การระงับถาวร (P)¶
{
"game_index": 539,
"server_url": "{URL เซิร์ฟเวอร์เกมของโปรเจ็กต์ที่ลงทะเบียนใน Hive Console}",
"data": [
{
"event_time": 1720612624215,
"player_id": 3,
"status": "P",
"start_date": "2024-07-10 20:56:59",
"end_date": "9999-12-31 00:00:00"
},
{
"event_time": 1720612624215,
"player_id": 4,
"status": "P",
"start_date": "2024-07-10 20:56:59",
"end_date": "9999-12-31 00:00:00"
}
]
}
ยกเลิกการระงับการใช้งาน (E)¶
ระบบจะส่งช่วงเวลาของการระงับที่ถูกยกเลิกตามเดิม ดังนั้น start_date และ end_date อาจแตกต่างกันตามผู้ใช้แต่ละราย
{
"game_index": 539,
"server_url": "{URL เซิร์ฟเวอร์เกมของโปรเจ็กต์ที่ลงทะเบียนใน Hive Console}",
"data": [
{
"event_time": 1720829722391,
"player_id": 5,
"status": "E",
"start_date": "2024-07-01 10:00:00",
"end_date": "2024-07-08 10:00:00"
},
{
"event_time": 1720829722391,
"player_id": 6,
"status": "E",
"start_date": "2024-07-03 15:30:00",
"end_date": "9999-12-31 00:00:00"
}
]
}
ตรวจสอบลำดับการประมวลผล¶
event_time คือเวลาที่เซิร์ฟเวอร์ Hive เผยแพร่ข้อมูลนั้น แสดงเป็น epoch milliseconds (จำนวนมิลลิวินาทีที่ผ่านไปตั้งแต่ 1 มกราคม 1970 00:00:00 UTC) ตัวอย่างเช่น 1720612623847 คือ 2024-07-10 20:57:03.847 ตามเวลา KST ค่ายิ่งมากหมายถึงการประมวลผลที่เกิดภายหลัง เซิร์ฟเวอร์เกมจึงสามารถเปรียบเทียบค่านี้เพื่อตรวจสอบสถานะล่าสุดได้ ไม่ว่าคำขอจะมาถึงในลำดับใด
ให้บันทึก event_time ล่าสุดที่นำไปใช้แล้วสำหรับแต่ละ player_id จากนั้นเปรียบเทียบกับค่าที่ได้รับใหม่และประมวลผลตามตารางด้านล่าง
| ผลการเปรียบเทียบ | ความหมาย | การประมวลผล |
|---|---|---|
| ค่าที่ได้รับ > ค่าที่บันทึกไว้ | การประมวลผลที่เกิดภายหลัง | นำไปใช้และอัปเดตค่าที่บันทึกไว้ |
| ค่าที่ได้รับ = ค่าที่บันทึกไว้ | การส่งซ้ำของการประมวลผลที่นำไปใช้แล้ว | เพิกเฉย หรือประมวลผลซ้ำแบบ idempotent |
| ค่าที่ได้รับ < ค่าที่บันทึกไว้ | การประมวลผลในอดีตที่มาถึงล่าช้า | เพิกเฉย |
ข้อควรระวังเมื่อใช้ event_time
- ต้องเปรียบเทียบเฉพาะผู้ใช้ที่มี
player_idเดียวกันเท่านั้น ผู้ใช้ต่างกันอาจมีevent_timeเดียวกันได้ หากเปรียบเทียบโดยไม่แยกผู้ใช้ อาจเข้าใจผิดว่าคำขอปกติเป็นการประมวลผลในอดีตและทำให้ถูกข้ามไป - คำขอที่ส่งซ้ำจะคงเวลาการเผยแพร่ครั้งแรกไว้ ค่าไม่ได้ถูกอัปเดตเพียงเพราะเป็นการส่งซ้ำ จึงสามารถใช้ค่านี้กรองคำขอในอดีตที่มาถึงล่าช้าได้
event_timeคือเวลาที่เซิร์ฟเวอร์ Hive เผยแพร่ จึงแตกต่างจากเวลาที่เซิร์ฟเวอร์เกมรับคำขอ รวมถึงstart_dateและend_dateให้ใช้event_timeไม่ใช่start_dateในการตรวจสอบลำดับevent_timeเป็นเวลาสัมบูรณ์ที่ไม่ขึ้นกับเขตเวลา แม้เซิร์ฟเวอร์เกมและเซิร์ฟเวอร์ Hive จะใช้เขตเวลาต่างกัน ผลการตรวจสอบลำดับจะไม่เปลี่ยนแปลง
หากต้องตรวจสอบให้แน่ใจว่าค่าที่ได้รับเป็นสถานะล่าสุดหรือไม่ ให้เรียกดูสถานะปัจจุบันของผู้ใช้นั้นด้วย API ตรวจสอบผู้ใช้ที่ถูกระงับการใช้งานเกม
เนื้อหาการตอบกลับ¶
หลังจากประมวลผลคำขอสำเร็จ เซิร์ฟเวอร์เกมต้องตอบกลับในรูปแบบต่อไปนี้
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
|---|---|---|
| result_code | รหัสตอบกลับ รายละเอียด | Integer |
รหัสตอบกลับ¶
| ค่ารหัส | คำอธิบาย |
|---|---|
| 0 | สำเร็จ |
| ค่าอื่น | ล้มเหลว (รหัสข้อผิดพลาดที่กำหนดโดยเซิร์ฟเวอร์เกม) |
ตัวอย่างการตอบกลับ¶
สำเร็จ¶
การตรวจสอบสถานะเซิร์ฟเวอร์เกม¶
ระบบจะส่งคำขอตรวจสอบสถานะเป็นระยะเพื่อยืนยันว่าเซิร์ฟเวอร์เกมที่ลงทะเบียนไว้สามารถรับข้อมูลผู้ใช้ที่ถูกระงับการใช้งานได้ รูปแบบของ URL คำขอ ส่วนหัวคำขอ และเนื้อหาคำขอจะเหมือนกับการส่งข้อมูลผู้ใช้ที่ถูกระงับการใช้งานจริง
ช่วงเวลาการส่งอาจปรับเปลี่ยนได้ตามสถานการณ์การดำเนินงาน ดังนั้นเซิร์ฟเวอร์เกมไม่ควรติดตั้งใช้งานโดยตั้งสมมติฐานว่าจะมีรอบเวลาที่แน่นอน ต้องสามารถส่งคืนการตอบกลับปกติได้เสมอไม่ว่าจะได้รับคำขอเมื่อใด
ฟิลด์ data ของคำขอตรวจสอบสถานะจะมีข้อมูล dummy เพียงหนึ่งรายการที่มี player_id เป็น 1 ดังตัวอย่างด้านล่าง
player_id:1(dummy ID ที่ไม่มีอยู่จริง)event_time/start_date: เวลาที่ส่งคำขอตรวจสอบสถานะ- ต้องมีการจัดการข้อยกเว้น: คำขอที่มี
player_idเป็น1เป็นเพียงสัญญาณสำหรับตรวจสอบว่าสามารถรับข้อมูลได้หรือไม่ ห้ามดำเนินตรรกะการระงับการใช้งานจริง และต้องแยกออกจาก การตรวจสอบลำดับการประมวลผล
{
"game_index": 539,
"server_url": "{URL เซิร์ฟเวอร์เกมของโปรเจ็กต์ที่ลงทะเบียนใน Hive Console}",
"data": [
{
"event_time": 1720612623847,
"player_id": 1,
"status": "P",
"start_date": "2024-07-10 20:57:03",
"end_date": "9999-12-31 00:00:00"
}
]
}
เซิร์ฟเวอร์เกมต้องส่งคืนการตอบกลับที่มี result_code สำหรับคำขอตรวจสอบสถานะด้วย ระบบจะไม่ตรวจสอบค่าของ result_code แต่จะตรวจสอบเพียงว่ามีฟิลด์อยู่หรือไม่ ดังนั้นแม้จะพิจารณาว่าเป็นผู้ใช้ที่ไม่มีอยู่และส่งคืนรหัสล้มเหลวที่ไม่ใช่ 0 ก็จะถือว่าเป็นการตอบกลับปกติ
หากการตรวจสอบสถานะล้มเหลว การส่งข้อมูลผู้ใช้ที่ถูกระงับจะหยุดลง
หากไม่มีการตอบกลับ หรือมีการตอบกลับที่ไม่มี result_code ต่อเนื่องกัน 5 ครั้ง เซิร์ฟเวอร์เกมดังกล่าวจะถูกเปลี่ยนเป็นสถานะไม่พร้อมใช้งาน และตั้งแต่นั้นข้อมูลผู้ใช้ที่ถูกระงับการใช้งานจริงจะไม่ถูกส่ง หลังจากนั้น หากตอบกลับคำขอตรวจสอบสถานะตามปกติ สถานะจะกู้คืนเป็นพร้อมใช้งานโดยอัตโนมัติและการส่งข้อมูลจะกลับมาทำงานอีกครั้ง
ดังนั้นอย่าแยกกรองคำขอที่มี player_id เป็น 1 ออกต่างหาก ให้ประมวลผลผ่านเส้นทางเดียวกับคำขอจริงและส่งคืนการตอบกลับที่มี result_code เสมอ