LollipopGo开源游戏服务器框架--匹配模块更新

Golang语言社区 · · 1435 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

      大家好,我是彬哥,本节给大家讲下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语言社区

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Golang语言社区

查看原文:LollipopGo开源游戏服务器框架--匹配模块更新

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1435 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传