entitys

package
v1.1.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 27, 2024 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	EventCapacity = 1000           // 事件容量
	EventDispose  = "dispose"      // 結束事件, 實體結束時第一個執行, 參數是nil
	EventShutdown = "shutdown"     // 關閉事件, 實體結束時第二個執行, 參數是nil, 這時連線已經中斷
	EventRecv     = nets.EventRecv // 接收訊息事件, 當接收訊息後觸發, 參數是訊息物件
	EventSend     = nets.EventSend // 傳送訊息事件, 當傳送訊息後觸發, 參數是訊息物件
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Awaker

type Awaker interface {
	// Awake 喚醒處理, 模組初始化時第一個被執行
	Awake() error
}

Awaker 模組喚醒介面

type Entity

type Entity struct {
	*labels.Label // 標籤物件
	// contains filtered or unexported fields
}

Entity 實體資料, mizugo中用於儲存對象的基礎物件, 對象可以是個連線, 也可以用於表示遊戲物件

使用者可以到實體新增模組, 用於分類與實作遊戲功能/訊息處理等

使用者可以到實體訂閱事件, 用於接收實體發布的事件

使用者可以到實體發布事件, 發布事件有以下模式

  • 單次事件: 事件只執行一次
  • 延遲事件: 事件只執行一次, 且會延遲一段時間才發布
  • 定時事件: 事件會定時執行, 由於不能刪除定時事件, 因此發布定時事件前請多想想

實體會發布以下內部事件

  • EventDispose: 結束事件, 實體結束時第一個執行, 參數是nil
  • EventShutdown: 關閉事件, 實體結束時第二個執行, 參數是nil, 這時連線已經中斷
  • EventRecv: 接收訊息事件, 當接收訊息後觸發, 參數是訊息物件
  • EventSend: 傳送訊息事件, 當傳送訊息後觸發, 參數是訊息物件

實體可以設置處理功能, 負責訊息處理功能; 需要在實體初始化之前設置 procs.Processor

實體可以設置會話功能, 負責網路相關功能; 需要在實體初始化之前設置 nets.Sessioner

結束實體時, 需要執行 Finalize

func NewEntity

func NewEntity(entityID EntityID) *Entity

NewEntity 建立實體資料

func (*Entity) AddMessage

func (this *Entity) AddMessage(messageID int32, process procs.Process)

AddMessage 新增訊息處理

func (*Entity) AddModule

func (this *Entity) AddModule(module Moduler) error

AddModule 新增模組, 初始化完成後就不能新增模組

func (*Entity) DelMessage

func (this *Entity) DelMessage(messageID int32)

DelMessage 刪除訊息處理

func (*Entity) Enable

func (this *Entity) Enable() bool

Enable 取得啟用旗標

func (*Entity) EntityID

func (this *Entity) EntityID() EntityID

EntityID 取得實體編號

func (*Entity) Finalize

func (this *Entity) Finalize()

Finalize 結束處理

func (*Entity) GetModule

func (this *Entity) GetModule(moduleID ModuleID) Moduler

GetModule 取得模組

func (*Entity) Initialize

func (this *Entity) Initialize(wrong Wrong) (err error)

Initialize 初始化處理

func (*Entity) LocalAddr

func (this *Entity) LocalAddr() net.Addr

LocalAddr 取得本地位址

func (*Entity) PublishDelay

func (this *Entity) PublishDelay(name string, param any, delay time.Duration)

PublishDelay 發布延遲事件, 事件會延遲一段時間才發布, 但仍是單次事件

func (*Entity) PublishFixed

func (this *Entity) PublishFixed(name string, param any, interval time.Duration)

PublishFixed 發布定時事件, 請注意! 由於不能刪除定時事件, 因此發布定時事件前請多想想

func (*Entity) PublishOnce

func (this *Entity) PublishOnce(name string, param any)

PublishOnce 發布單次事件

func (*Entity) RemoteAddr

func (this *Entity) RemoteAddr() net.Addr

RemoteAddr 取得遠端位址

func (*Entity) Send

func (this *Entity) Send(message any)

Send 傳送封包

func (*Entity) SetProcess

func (this *Entity) SetProcess(process procs.Processor) error

SetProcess 設定處理物件, 初始化完成後就不能設定處理物件

func (*Entity) SetSession

func (this *Entity) SetSession(session nets.Sessioner) error

SetSession 設定會話物件, 初始化完成後就不能設定會話物件

func (*Entity) Stop added in v1.1.0

func (this *Entity) Stop()

Stop 停止會話, 不會等待會話內部循環結束

func (*Entity) StopWait added in v1.1.0

func (this *Entity) StopWait()

StopWait 停止會話, 會等待會話內部循環結束

func (*Entity) Subscribe

func (this *Entity) Subscribe(name string, process Process) string

Subscribe 訂閱事件

func (*Entity) Unsubscribe

func (this *Entity) Unsubscribe(subID string)

Unsubscribe 取消訂閱事件

type EntityID

type EntityID = uint64

EntityID 實體編號

type Entitymgr

type Entitymgr struct {
	// contains filtered or unexported fields
}

Entitymgr 實體管理器, 負責新增/刪除/取得實體等功能

func NewEntitymgr

func NewEntitymgr() *Entitymgr

NewEntitymgr 建立實體管理器

func (*Entitymgr) Add

func (this *Entitymgr) Add() *Entity

Add 新增實體

func (*Entitymgr) All

func (this *Entitymgr) All() []*Entity

All 取得實體列表

func (*Entitymgr) Clear

func (this *Entitymgr) Clear()

Clear 清除實體

func (*Entitymgr) Count

func (this *Entitymgr) Count() int

Count 取得實體數量

func (*Entitymgr) Del

func (this *Entitymgr) Del(entityID EntityID) *Entity

Del 刪除實體

func (*Entitymgr) Get

func (this *Entitymgr) Get(entityID EntityID) *Entity

Get 取得實體

type Eventmap

type Eventmap struct {
	// contains filtered or unexported fields
}

Eventmap 事件列表, 提供了事件訂閱/發布等功能, 事件列表本身是執行緒安全的, 但是發布的事件會在單一的事件執行緒中被執行, 以此保證了事件有序執行

func NewEventmap

func NewEventmap() *Eventmap

NewEventmap 建立事件列表

func (*Eventmap) Finalize

func (this *Eventmap) Finalize()

Finalize 結束處理

func (*Eventmap) Initialize

func (this *Eventmap) Initialize() error

Initialize 初始化處理

func (*Eventmap) PubDelay

func (this *Eventmap) PubDelay(name string, param any, delay time.Duration)

PubDelay 發布延遲事件, 事件會延遲一段時間才發布, 但仍是單次事件

func (*Eventmap) PubFixed

func (this *Eventmap) PubFixed(name string, param any, interval time.Duration)

PubFixed 發布定時事件, 請注意! 由於不能刪除定時事件, 因此發布定時事件前請多想想

func (*Eventmap) PubOnce

func (this *Eventmap) PubOnce(name string, param any)

PubOnce 發布單次事件

func (*Eventmap) Sub

func (this *Eventmap) Sub(name string, process Process) string

Sub 訂閱事件

func (*Eventmap) Unsub

func (this *Eventmap) Unsub(subID string)

Unsub 取消訂閱事件

type Module

type Module struct {
	// contains filtered or unexported fields
}

Module 模組資料, 用於分類與實作遊戲功能/訊息處理等

模組實體時, 需要遵循以下流程

  • 定義模組結構, 並且把 Module 作為模組的第一個成員
  • (可選)繼承 Awaker 介面, 並實作介面中的 Awake 函式, 其中可以填寫模組的初始化
  • (可選)繼承 Starter 介面, 並實作介面中的 Start 函式, 其中可以填寫模組的初始化; 兩個初始化介面的執行順序為 Awaker => Starter
  • 建立模組資料, 並把模組加入到實體中; 需要在實體初始化之前完成

func NewModule

func NewModule(moduleID ModuleID) *Module

NewModule 建立模組資料

func (*Module) Entity

func (this *Module) Entity() *Entity

Entity 取得實體物件

func (*Module) ModuleID

func (this *Module) ModuleID() ModuleID

ModuleID 取得模組編號

type ModuleID

type ModuleID = uint64

ModuleID 模組編號

type Modulemap

type Modulemap struct {
	// contains filtered or unexported fields
}

Modulemap 模組列表, 負責新增/刪除/取得模組等功能

func NewModulemap

func NewModulemap() *Modulemap

NewModulemap 建立模組列表

func (*Modulemap) Add

func (this *Modulemap) Add(module Moduler) error

Add 新增模組

func (*Modulemap) All

func (this *Modulemap) All() []Moduler

All 取得模組列表

func (*Modulemap) Count

func (this *Modulemap) Count() int

Count 取得模組數量

func (*Modulemap) Del

func (this *Modulemap) Del(moduleID ModuleID) Moduler

Del 刪除模組

func (*Modulemap) Get

func (this *Modulemap) Get(moduleID ModuleID) Moduler

Get 取得模組

type Moduler

type Moduler interface {

	// ModuleID 取得模組編號
	ModuleID() ModuleID

	// Entity 取得實體物件
	Entity() *Entity
	// contains filtered or unexported methods
}

Moduler 模組介面

type Process

type Process func(param any)

Process 處理函式類型

func (Process) Do

func (this Process) Do(param any)

Do 執行處理

type Starter

type Starter interface {
	// Start 啟動處理, 模組初始化時第二個被執行
	Start() error
}

Starter 模組啟動介面

type Wrong

type Wrong func(err error)

Wrong 錯誤處理函式類型

func (Wrong) Do

func (this Wrong) Do(err error)

Do 執行處理

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL