分享
LollipopGo开源游戏服务器框架--匹配模块更新
Golang语言社区 · · 1899 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
大家好,我是彬哥,本节给大家讲下LollipopGo游戏服务器match相关,抛砖引玉了,主要是针对Go语言游戏服务器对战匹配做了基础优化。
package match
import (
"LollipopGo/LollipopGo/player"
"LollipopGo/LollipopGo/util"
"fmt"
"time"
)
//------------------------------------------------------------------------------
var (
Match_Chan chan *player.PlayerSt
MatchData_Chan chan map[string]*RoomMatch
Imax int = 0
ChanMax int = 1000
MatchSpeed = time.Millisecond * 500
MatchData map[string]*RoomMatch
)
//------------------------------------------------------------------------------
type RoomMatch struct {
RoomUID string // 房间号
PlayerAOpenID string // A 阵营的OpenID
PlayerBOpenID string // B 阵营的OpenID
RoomLimTime uint64 // 房间的时间限制
RoomPlayerMap map[string]*player.PlayerSt // 房间玩家的结构信息
}
//------------------------------------------------------------------------------
func init() {
Match_Chan = make(chan *player.PlayerSt, ChanMax)
MatchData = make(map[string]*RoomMatch)
MatchData_Chan = make(chan map[string]*RoomMatch, ChanMax)
go Sort_timer()
}
func Putdata(data *player.PlayerSt) {
Match_Chan <- data
return
}
func GetChanLength() int {
Imax = len(Match_Chan)
return Imax
}
func DoingMatch() {
Imax = len(Match_Chan)
icount := Imax
Data := make(map[string]*player.PlayerSt)
iicount := 1
roomid := ""
for i := 0; i < Imax; i++ {
if icount == 1 {
fmt.Println(Match_Chan, "等待匹配")
// 30s 就剔除
continue
}
if data, ok := <-Match_Chan; ok {
fmt.Println(data)
Data[util.Int2str_LollipopGo(i+1)] = data
// 获取房间ID信息
if iicount%2 == 1 {
roomid = util.Int2str_LollipopGo(int(util.GetNowUnix_LollipopGo()))
MatchData[roomid].PlayerAOpenID = data.OpenID
}
MatchData[roomid].RoomUID = roomid
MatchData[roomid].RoomLimTime = 10
MatchData[roomid].RoomPlayerMap[util.Int2str_LollipopGo(i+1)] = Data[util.Int2str_LollipopGo(i+1)]
MatchData[roomid].PlayerBOpenID = data.OpenID
if iicount%2 == 0 {
iicount = 0
MatchData_Chan <- MatchData
}
iicount++
} else {
fmt.Println("wrong")
break
}
if icount >= 1 {
icount--
}
}
if len(Data) > 0 {
fmt.Println("-------", Data)
}
}
func Sort_timer() {
timer := time.NewTimer(MatchSpeed)
for {
select {
case <-timer.C:
{
DoingMatch()
}
}
}
}
社区交流群:221273219
Golang语言社区论坛 :
www.Golang.Ltd
LollipopGo游戏服务器地址:
https://github.com/Golangltd/LollipopGo
社区视频课程课件GIT地址:
https://github.com/Golangltd/codeclass
Golang语言社区
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1899 次点击
上一篇:2018年,我学到了什么
下一篇:Go语言反射规则
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
大家好,我是彬哥,本节给大家讲下LollipopGo游戏服务器match相关,抛砖引玉了,主要是针对Go语言游戏服务器对战匹配做了基础优化。
package match
import (
"LollipopGo/LollipopGo/player"
"LollipopGo/LollipopGo/util"
"fmt"
"time"
)
//------------------------------------------------------------------------------
var (
Match_Chan chan *player.PlayerSt
MatchData_Chan chan map[string]*RoomMatch
Imax int = 0
ChanMax int = 1000
MatchSpeed = time.Millisecond * 500
MatchData map[string]*RoomMatch
)
//------------------------------------------------------------------------------
type RoomMatch struct {
RoomUID string // 房间号
PlayerAOpenID string // A 阵营的OpenID
PlayerBOpenID string // B 阵营的OpenID
RoomLimTime uint64 // 房间的时间限制
RoomPlayerMap map[string]*player.PlayerSt // 房间玩家的结构信息
}
//------------------------------------------------------------------------------
func init() {
Match_Chan = make(chan *player.PlayerSt, ChanMax)
MatchData = make(map[string]*RoomMatch)
MatchData_Chan = make(chan map[string]*RoomMatch, ChanMax)
go Sort_timer()
}
func Putdata(data *player.PlayerSt) {
Match_Chan <- data
return
}
func GetChanLength() int {
Imax = len(Match_Chan)
return Imax
}
func DoingMatch() {
Imax = len(Match_Chan)
icount := Imax
Data := make(map[string]*player.PlayerSt)
iicount := 1
roomid := ""
for i := 0; i < Imax; i++ {
if icount == 1 {
fmt.Println(Match_Chan, "等待匹配")
// 30s 就剔除
continue
}
if data, ok := <-Match_Chan; ok {
fmt.Println(data)
Data[util.Int2str_LollipopGo(i+1)] = data
// 获取房间ID信息
if iicount%2 == 1 {
roomid = util.Int2str_LollipopGo(int(util.GetNowUnix_LollipopGo()))
MatchData[roomid].PlayerAOpenID = data.OpenID
}
MatchData[roomid].RoomUID = roomid
MatchData[roomid].RoomLimTime = 10
MatchData[roomid].RoomPlayerMap[util.Int2str_LollipopGo(i+1)] = Data[util.Int2str_LollipopGo(i+1)]
MatchData[roomid].PlayerBOpenID = data.OpenID
if iicount%2 == 0 {
iicount = 0
MatchData_Chan <- MatchData
}
iicount++
} else {
fmt.Println("wrong")
break
}
if icount >= 1 {
icount--
}
}
if len(Data) > 0 {
fmt.Println("-------", Data)
}
}
func Sort_timer() {
timer := time.NewTimer(MatchSpeed)
for {
select {
case <-timer.C:
{
DoingMatch()
}
}
}
}
社区交流群:221273219
Golang语言社区论坛 :
www.Golang.Ltd
LollipopGo游戏服务器地址:
https://github.com/Golangltd/LollipopGo
社区视频课程课件GIT地址:
https://github.com/Golangltd/codeclass
Golang语言社区