Event
1. 概述
当某些事件发生时,会生成一个Event。例如,玩家登录时会生成 event_player_login_pgos
。触发事件时,可以执行一个或多个操作。这些操作可以与特定的 Virtual Server
或 Webhook
绑定,当相应事件触发时,这些操作就会被执行。您可以在 Web 门户中配置它们。
通过阅读本章,您可以了解:
- 如何配置事件处理器。
- 如何处理事件。
- 如何查询事件触发日志。
2. 配置Event Handler
您可以创建Event Handler来处理触发的特定事件。每个Event Handler都包含过滤条件和Action。配置页面如下所示。
点击某个事件,例如event_player_login_pgos,进入该事件的Event Handler配置页面,如下所示。
点击“ + Add Event Handler
”来配置新的handler。您可以为事件添加多个Event Handler,如下所示。
- 首先,输入Event Handler的名称。该名称在游戏区域内必须是唯一的。
- 输入Event Handler的描述(可选)。
- 配置可选过滤条件(可选):
- 点击“+ Add Condition”可添加带有条件表达式的“AND”逻辑判断。
- 点击“+ 添加Group”可添加带有“OR”逻辑判断的组。
- 如果您未配置任何过滤条件,则每当事件发生时,Action都会无条件执行。
- 配置Action:
- 点击
+ Add Action
添加更多 Actions, 有3种类型的Action: - 如果单击 Json Args 的输入框,将会弹出一个输入对话框,允许您为 Action 输入 JSON 格式的参数。
- 点击
- 最后,当你完成所有配置项后,点击
提交
按钮保存当前配置。
3. Event数据结构
点击 Extension Data Schema访问事件数据结构定义。
以下是一些关键数据字段:
- Trigger ID
每次触发事件时,都会生成一个与相应事件对应的唯一标识字符串 TriggerId
。
- Execution ID
触发事件时,可以执行一个或多个操作。唯一的 ExecuteionId
指示每个操作的执行。
因此,一个 TriggerId
可以映射到多个 ExecutionId
。您也可以在Trigger日志页面中找到它们。
4. 处理 Events
4.1 在Virtual Server中处理
您可以在Virtual Server中处理任何事件。以下指南展示了如何操作。
步骤 1:编写Virtual Server
编写一个Virtual Server,并监听
/pgos_event
URL 来处理Virtual Server中的事件,例如event_player_login_pgos
。以下是 Golang 示例代码:
// This sample use fiber web server framework to implement the server
package main
import (
"encoding/json"
"fmt"
"log"
"main/pgos_lib"
"time"
"github.com/gofiber/fiber/v2"
)
// EventPlayerLoginPgosEventData. Genarated by swagger
type EventPlayerLoginPgosEventData struct {
// Player session id.
SessionId string `json:"session_id,omitempty"`
// Player id.
PlayerId string `json:"player_id,omitempty"`
// Platform.
Platform string `json:"platform,omitempty"`
// Player's source ip.
IpAddr string `json:"ip_addr,omitempty"`
// Whether is a new player.
IsNewPlayer bool `json:"is_new_player,omitempty"`
// Start time of player session(unix timestamp in seconds).
StartTime int32 `json:"start_time,omitempty"`
// Specified custom data set when login.
CustomData string `json:"custom_data,omitempty"`
// Country code.
CountryCode string `json:"country_code,omitempty"`
}
// EventPlayerLoginPgos. Genarated by swagger
type EventPlayerLoginPgos struct {
// Trigger id.
TriggerId string `json:"trigger_id,omitempty"`
// Event name, which is `event_player_login_pgos`
EventName string `json:"event_name,omitempty"`
// Date and time when event is triggered, expressed as a utc timestamp,in milliseconds.
EventTime string `json:"event_time,omitempty"`
EventData *EventPlayerLoginPgosEventData `json:"event_data,omitempty"`
// Custom args that set by developers on portal.
Args interface{} `json:"args,omitempty"`
}
func main() {
app := fiber.New()
// pgos_event handles all event, please config the event handler in the portal in advance
app.Post("/pgos_event", func(c *fiber.Ctx) error {
invoker := c.Get("Invoker")
if invoker != "event" {
return c.SendStatus(fiber.StatusUnauthorized)
}
var e = &EventPlayerLoginPgos{
EventData: &EventPlayerLoginPgosEventData{},
}
// Write your own code to handle event_player_login_pgos data
if err = json.Unmarshal(c.Body(), e); err != nil {
log.Println("/pgos_event data error: ", err)
} else {
log.Printf("/pgos_event data: %v\n", e)
}
return nil
})
// server will listen 8081 port
log.Fatal(app.Listen(":8081"))
}
- 步骤 2:部署Virtual Server** 请参阅创建和管理Virtual Server 文档,将Virtual Server部署到 PGOS,并确保其处于运行状态。
- 步骤 3:将操作绑定到Virtual Server 绑定Virtual Server以处理事件。您可能需要参考配置Event Handler。
目前,所有设置均已准备就绪。您可能需要通过触发事件进行测试。例如,您可以登录游戏客户端来触发 event_player_login_pgos
事件,以检查其是否正常运行。
4.2 使用 Webhook 处理
如果您有自己的游戏后端,也可以使用 Webhook 处理事件。
- 步骤 1:从您的后端公开 Webhook URL
实现您自己的事件处理逻辑,然后公开相应的 Webhook URI。
- 步骤 2:在 PGOS 中创建 Webhook
参考文档 Webhook,然后在 PGOS 中创建 Webhook。
- 步骤 3:将操作绑定到 Webhook
绑定您刚刚创建的 Webhook,然后将其绑定到Event Handler。您可能需要参考配置Event Handler。
目前,一切准备就绪。您可能需要通过触发事件进行测试。例如,您可以登录游戏客户端来触发“event_player_login_pgos”事件,以检查其是否正常工作。
5. 日志查询
您可以读取和查询某个事件的所有处理程序的触发日志,如下所示。
考虑到性能,对于 Production Title Region,PGOS 只记录失败的日志,不保存成功的日志。因此,只能在 Dev/Test Title Region 中查询成功的日志。