跳到主要内容

Event

1. 概述

当某些事件发生时,会生成一个Event。例如,玩家登录时会生成 event_player_login_pgos。触发事件时,可以执行一个或多个操作。这些操作可以与特定的 Virtual ServerWebhook 绑定,当相应事件触发时,这些操作就会被执行。您可以在 Web 门户中配置它们。

通过阅读本章,您可以了解:

  1. 如何配置事件处理器。
  2. 如何处理事件。
  3. 如何查询事件触发日志。

2. 配置Event Handler

您可以创建Event Handler来处理触发的特定事件。每个Event Handler都包含过滤条件和Action。配置页面如下所示。

image-20210916155206758

点击某个事件,例如event_player_login_pgos,进入该事件的Event Handler配置页面,如下所示。

image-20240524173803325

点击“ + Add Event Handler”来配置新的handler。您可以为事件添加多个Event Handler,如下所示。

image-20240524185615138

  • 首先,输入Event Handler的名称。该名称在游戏区域内必须是唯一的。
  • 输入Event Handler的描述(可选)。
  • 配置可选过滤条件(可选):
  • 点击“+ Add Condition”可添加带有条件表达式的“AND”逻辑判断。
  • 点击“+ 添加Group”可添加带有“OR”逻辑判断的组。
  • 如果您未配置任何过滤条件,则每当事件发生时,Action都会无条件执行。
  • 配置Action:
    • 点击+ Add Action 添加更多 Actions, 有3种类型的Action:
    • 如果单击 Json Args 的输入框,将会弹出一个输入对话框,允许您为 Action 输入 JSON 格式的参数。

image-20240524185541335

  • 最后,当你完成所有配置项后,点击提交按钮保存当前配置。

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 中查询成功的日志。

image-20240527162749111