Documentation ¶
Overview ¶
*goworld*库为开发者提供大部分的GoWorld服务器引擎接口。 GoWorld是一个分布式的游戏服务器引擎,理论上支持无限横向扩展。 一个GoWorld服务器由三种不同的进程注册:dispatcher、gate、game。
Index ¶
- Constants
- func AddCallback(d time.Duration, callback func())
- func AddTimer(d time.Duration, callback func())
- func Call(id EntityID, method string, args ...interface{})
- func CallNilSpaces(method string, args ...interface{})
- func CallService(serviceName string, method string, args ...interface{})
- func Entities() entity.EntityMap
- func Exists(typeName string, entityID EntityID, callback storage.ExistsCallbackFunc)
- func GetKVDB(key string, callback kvdb.KVDBGetCallback)
- func GetOrPutKVDB(key string, val string, callback kvdb.KVDBGetOrPutCallback)
- func GetServiceEntityID(serviceName string) common.EntityID
- func ListAttr() *entity.ListAttr
- func ListEntityIDs(typeName string, callback storage.ListCallbackFunc)
- func LoadEntityAnywhere(typeName string, entityID EntityID)
- func LoadEntityLocally(typeName string, entityID EntityID)
- func LoadEntityOnGame(typeName string, entityID EntityID, gameid GameID)
- func MapAttr() *entity.MapAttr
- func Post(callback post.PostCallback)
- func PutKVDB(key string, val string, callback kvdb.KVDBPutCallback)
- func RegisterEntity(typeName string, entityPtr entity.IEntity) *entity.EntityTypeDesc
- func RegisterService(typeName string, entityPtr entity.IEntity)
- func RegisterSpace(spacePtr entity.ISpace)
- func Run()
- type DispatcherID
- type Entity
- type EntityID
- type GameID
- type GateID
- type Kind
- type Space
- type Vector3
Constants ¶
const ( // ENTITYID_LENGTH 是EntityID的长度,目前为16 ENTITYID_LENGTH = common.ENTITYID_LENGTH )
Variables ¶
This section is empty.
Functions ¶
func AddCallback ¶
AddTimer adds a timer to be executed after specified duration
func Call ¶
Call 函数调用指定Entity的指定方法,并传递参数。 如果指定的Entity在当前game进程中,则会立刻调用其方法。否则将通过RPC发送函数调用和参数到所对应的game进程中。
func CallNilSpaces ¶
func CallNilSpaces(method string, args ...interface{})
CallNilSpaces 向所有game进程中的NilSpace发起RPC调用。 由于每个game进程中都有一个唯一的NilSpace,因此这个函数想每个game进程都发起了一次函数调用。
func CallService ¶
CallService 发起一次Service调用。开发者只需要传入指定的Service名字,不需要指知道Service的EntityID或者当前在哪个game进程。
func Exists ¶
func Exists(typeName string, entityID EntityID, callback storage.ExistsCallbackFunc)
Exists 检查某个特定的Entity是否存在(已创建存盘)
func GetOrPutKVDB ¶
func GetOrPutKVDB(key string, val string, callback kvdb.KVDBGetOrPutCallback)
GetOrPutKVDB 读取指定key所对应的value,如果key所对应的值当前为空,则存入key-value键值对
func GetServiceEntityID ¶
GetServiceEntityID 返回Service对象的EntityID。这个函数可以用来确定Service对象是否已经在某个game进程上成功创建或载入。
func ListEntityIDs ¶
func ListEntityIDs(typeName string, callback storage.ListCallbackFunc)
ListEntityIDs 获得某个类型的所有Entity对象的EntityID列表 (这个接口将被弃用)
func LoadEntityAnywhere ¶
LoadEntityAnywhere 在随机选择的game进程上载入指定的Entity。 GoWorld保证每个Entity最多只会存在于一个game进程,即只有一份实例。 如果这个Entity当前已经存在,则GoWorld不会做任何操作。
func LoadEntityLocally ¶
LoadEntityLocally 在当前的game进程中载入特定的Entity对象 如果这个Entity当前已经存在,则GoWorld不会做任何操作。因此在调用LoadEntityOnGame之后并不能严格保证Entity必然存在于当前game进程中。
func LoadEntityOnGame ¶
LoadEntityOnGame 在指定的game进程上载入特定的Entity对象。 如果这个Entity当前已经存在,则GoWorld不会做任何操作。因此在调用LoadEntityOnGame之后并不能严格保证Entity必然存在于所指定的game进程中。
func Post ¶
func Post(callback post.PostCallback)
Post posts a callback to be executed It is almost same as AddCallback(0, callback)
func PutKVDB ¶
func PutKVDB(key string, val string, callback kvdb.KVDBPutCallback)
PutKVDB 将制定的key-value对存入到KVDB中
func RegisterEntity ¶
func RegisterEntity(typeName string, entityPtr entity.IEntity) *entity.EntityTypeDesc
RegisterEntity 注册一个对象类型到game中。所注册的对象必须是Entity类型的子类(包含一个匿名Entity字段)。 使用方法可以参考:https://github.com/xiaonanln/goworld/blob/master/examples/unity_demo/unity_demo.go
func RegisterService ¶
RegisterService 注册一个Service类型到game中。Service是一种全局唯一的特殊的Entity对象。 每个game进程中初始化的时候都应该注册所有的Service。GoWorld服务器会在某一个game进程中自动创建或载入Service对象(取决于Service类型是否是Persistent)。 开发者不能手动创建Service对象。
func RegisterSpace ¶
RegisterSpace 注册一个Space对象类型。开发者必须并且只能调用这个接口一次,从而注册特定的Space类型。一个合法的Space类型必须继承goworld.Space类型。
func Run ¶
func Run()
Run 开始运行game服务。开发者需要为自己的游戏服务器提供一个main模块和main函数,并在main函数里正确初始化GoWorld服务器并启动服务器。 一般来说,开发者需要在main函数中注册相应的Space类型、Service类型、Entity类型,然后调用 goworld.Run() 启动GoWorld服务器即可,可参考: https://github.com/xiaonanln/goworld/blob/master/examples/unity_demo/unity_demo.go
Types ¶
type DispatcherID ¶
type DispatcherID uint16
DispatcherID 是Dispatcher进程的ID GoWorld要求DispatcherID的数值必须是从1~N的连续N个数字,其中N为服务器配置文件中配置的dispatcher进程数目
type Entity ¶
Entity 类型代表游戏服务器中的一个对象。开发者可以使用GoWorld提供的接口进行对象创建、载入。对象载入之后,GoWorld提供定时的对象数据存盘。 同一个game进程中的Entity之间可以拿到相互的引用(指针)并直接进行相关的函数调用。不同game进程中的Entity之间可以使用RPC进行相互通信。
func CreateEntityLocally ¶
CreateEntityLocally 在本地game进程上创建一个指定类型的Entity
type EntityID ¶
EntityID 唯一代表一个Entity。EntityID是一个字符串(string),长度固定(ENTITYID_LENGTH)。 EntityID是全局唯一的。不同进程上产生的EntityID都是唯一的,不会出现重复。一般来说即使是不用的游戏服务器产生的EntityID也是唯一的。
func CreateEntityAnywhere ¶
CreateEntityAnywhere 在随机选择的game进程上创建一个特定类型的Entity
func CreateEntityOnGame ¶
func CreateSpaceAnywhere ¶
CreateSpaceAnywhere 在一个随机选择的game(以后会支持自动负载均衡)上创建一个特定Kind的Space对象。
func CreateSpaceOnGame ¶
CreateSpaceOnGame creates a space with specified kind on the specified game
returns the space EntityID
func GetNilSpaceID ¶
GetNilSpaceID 返回特定game进程中的NilSpace的EntityID。 GoWorld为每个game进程中的NilSpace使用了固定的EntityID值,例如目前GoWorld实现中在game1上NilSpace的EntityID总是"AAAAAAAAAAAAAAAx",每次重启服务器都不会变化。
type GameID ¶
type GameID = uint16
GameID 是Game进程的ID。 GoWorld要求GameID的数值必须是从1~N的连续N个数字,其中N为服务器配置文件中配置的game进程数目。
type GateID ¶
type GateID = uint16
GateID 是Gate进程的ID。 GoWorld要求GateID的数值必须是从1~N的连续N个数字,其中N为服务器配置文件中配置的game进程数目。
type Kind ¶
type Kind = int
Kind 类型表示Space的种类。开发者在创建Space的时候需要提供Kind参数,从而创建特定Kind的Space。NilSpace的Kind总是为0,并且开发者不能创建Kind=0的Space。 开发者可以根据Kind的值来区分不同的场景,具体的区分规则由开发者自己决定。
type Space ¶
Space 类型代表一个游戏服务器中的一个场景。一个场景中可以包含多个Entity。Space和其中的Entity都存在于一个game进程中。 Entity可以通过调用EnterSpace函数来切换Space。如果EnterSpace调用所指定的Space在其他game进程上,Entity将被迁移到对应的game进程并添加到Space中。
func CreateSpaceLocally ¶
CreateSpaceLocally 在本地game进程上创建一个指定Kind的Space。