我学xingo golang服务器之-xingo_demo 服务器游戏逻辑处理初始化过程
来源:互联网 发布:无锡华商网络骗局 编辑:程序博客网 时间:2024/06/05 06:56
我学xingo golang服务器之-xingo_demo 服务器游戏逻辑处理初始化过程
上几节
我们学习了xingo_demo,xingo_cluster相关的服务器协议和客户端协议的配置还有,相关协议的解析;xingo大神推荐我用xingo做一个小游戏,暂时没有什么思路,所以先暂停一下,学习一下xingo_demo的这个服务器arpg游戏处理逻辑;
记录一下xingo最新github工程切换项目至noreflect_veriosn:
git checkout noreflect_veriosn
这样最新的xingo_demo就能运行起来了;
最新xingo 服务器api定义发送了变化,
可以支持字符,在服务器里面键值存储做个支持字符就行了(后面专门写一个文章进行说明)
简洁明了高效;
//add api ---------------starts.AddRouter("0", &api.Api0Router{})s.AddRouter("2", &api.Api2Router{})s.AddRouter("3", &api.Api3Router{})//add api ---------------end
xingo_demo服务器的游戏逻辑
由于作者写的比较隐秘,我们直接找不到游戏逻辑初始化入口,其实作者依然保持使用init()风格,init是golangz自动初始化函数,在main()之前被调用,参考上一节我讲的:
我学xingo golang服务器之-xingo的单进程,集群服务器的配置和初始化过程
http://blog.csdn.net/atgczcl/article/details/75312474
我们来看看xingo_demo/server.go
package mainimport ( "github.com/viphxin/xingo/iface" "github.com/viphxin/xingo/logger" "github.com/viphxin/xingo/utils" "xingo_demo/api" "xingo_demo/core" "github.com/viphxin/xingo" _ "net/http" _ "net/http/pprof" _ "runtime/pprof" _ "time" "xingo_demo/cmd")func DoConnectionMade(fconn iface.Iconnection) { logger.Debug("111111111111111111111111") p, _ := core.WorldMgrObj.AddPlayer(fconn) fconn.SetProperty("pid", p.Pid)}func DoConnectionLost(fconn iface.Iconnection) { logger.Debug("222222222222222222222222") pid, _ := fconn.GetProperty("pid") p, _ := core.WorldMgrObj.GetPlayer(pid.(int32)) //移除玩家 core.WorldMgrObj.RemovePlayer(pid.(int32)) //消失在地图 p.LostConnection()}func main() { s := xingo.NewXingoTcpServer() //add gm command if utils.GlobalObject.CmdInterpreter != nil { utils.GlobalObject.CmdInterpreter.AddCommand(cmd.NewOnlineCommand()) } //test s.AddRouter("msg_load_bg", &api.Api_msg_dead_info_Router{}) //add api ---------------start s.AddRouter("0", &api.Api0Router{}) s.AddRouter("2", &api.Api2Router{}) s.AddRouter("3", &api.Api3Router{}) //add api ---------------end //regest callback utils.GlobalObject.OnConnectioned = DoConnectionMade utils.GlobalObject.OnClosed = DoConnectionLost // go func() { // fmt.Println(http.ListenAndServe("localhost:6061", nil)) // // for { // // time.Sleep(time.Second * 10) // // fm, err := os.OpenFile("./memory.log", os.O_RDWR|os.O_CREATE, 0644) // // if err != nil { // // fmt.Println(err) // // } // // pprof.WriteHeapProfile(fm) // // fm.Close() // // } // }() //s.Start() //// close //c := make(chan os.Signal, 1) //signal.Notify(c, os.Interrupt, os.Kill) //sig := <-c //fmt.Println("=======", sig) //s.Stop() s.Serve()}
这就是关键的地方
“xingo_demo/core”
这里就是游戏逻辑核心库:
aoi.go, player.go, worldmgr.go
另外两个好理解,aoi.go是什么呢?
1.有道了一下:
Hello to all Chinese friends, I’m Sora Aoi.
中国的朋友们你们好,我是苍井空。
简直就是—shit!!!
2.百度:
这里有个真正的介绍AOI的:
http://blog.csdn.net/kenkao/article/details/5668575
实际上AOI是AOI (Area of Interest) (地图的有效区域)
这么以来就不难理解了,查看代码全是格子处理,所以aoi.go 就不难理解了;
这个Package, 只有worldmgr.go有init()函数
所以游戏逻辑的入口就是:
worldmgr.go init()
下面我们看看init函数
func init() { logger.Info("start,,,,world 管理。。。") WorldMgrObj = &WorldMgr{ PlayerNumGen: 0, Players: make(map[int32]*Player), AoiObj1: NewAOIMgr(85, 410, 75, 400, 10, 20), } logger.Info("over,,,,world 管理!!!!@@@@")}
我特意打了log, go run server.go
可以很清晰看到游戏逻辑初始化过程;
主要是玩家和Aoi 初始化
下一节,解析xingo_demo的整个游戏net逻辑
- 我学xingo golang服务器之-xingo_demo 服务器游戏逻辑处理初始化过程
- 我学xingo golang服务器之-xingo_demo server.go start
- 我学xingo golang服务器之-xingo的单进程,集群服务器的配置和初始化过程
- 我学xingo golang服务器之-Unity3d c#多玩家同屏出生过程和AI处理分解
- 我学xingo golang服务器之-XingoApi调用
- 我学xingo golang服务器之-Unity3d c# 协议api分解
- 新手学xingo golang服务器之-修改xingo 支持字符协议(一)
- 新手学xingo golang服务器之-修改xingo 支持字符协议(二)
- 新手学xingo golang服务器之-golang和unity3d的Protobuf生成(三)
- 游戏服务器之逻辑网关(在逻辑服务器中)
- 游戏服务器框架 golang
- Golang游戏服务器
- 游戏服务器之双线处理
- 游戏服务器之双线处理
- 游戏服务器之逻辑服务器的资源分布图
- 游戏服务器之逻辑服务器的资源分布图
- 我的服务器内存慢之后的处理逻辑
- 游戏服务器之存储过程查询
- OSVR HMD的Json描述符文件结构分析(V1)
- 08-指令ng-model应用状态
- springmvc请求参数获取的几种方法
- 修改linux文件权限命令
- PE详解之基址重定位详解(PE详解10)
- 我学xingo golang服务器之-xingo_demo 服务器游戏逻辑处理初始化过程
- fzu2275-kmp
- HDU2295 Radar(舞蹈链重复覆盖,二分)
- 0x01 为什么要有同步机制
- 09-指令ng-model-CSS类
- 51Nod
- 2017年度中期的总结与展望
- Android笔记(24)Service重复任务
- UniversalImageLoader图片加载