当前位置: 首页 > wzjs >正文

建设小说网站首页国外搜索引擎有哪些

建设小说网站首页,国外搜索引擎有哪些,部门网站开发,个人简历空白表可编辑创建房间逻辑前的概念梳理及代码实现 在编写创建房间的逻辑之前,我们需要先创建几个关键概念。 第一个概念是“联盟”。联盟可以理解为一个组织,它持有多个房间。一个联盟下可能挂载多个房间,这是我们的第一个概念。 第二个概念是“管理”…

创建房间逻辑前的概念梳理及代码实现

在编写创建房间的逻辑之前,我们需要先创建几个关键概念。

第一个概念是“联盟”。联盟可以理解为一个组织,它持有多个房间。一个联盟下可能挂载多个房间,这是我们的第一个概念。

第二个概念是“管理”。我们需要创建一个名为“Union”的管理类,用来管理联盟。联盟本身也有多种类型,因此需要一个管理机制来对它们进行统一管理。

第三个概念是“房间”。房间关联一个具体的游戏。在这个基础上,我们可以创建一个接口,通过这个接口实现多种不同的游戏。这就是这三个概念的基本架构。

在创建这些概念时,我们可以将它们分别放在不同的目录中。例如,联盟相关的概念可以放在一个名为“union”的目录下;管理类可以放在“manage”目录下;房间相关的概念则放在“room”目录下。

联盟(Union)的实现

在联盟中,我们以unionID为键,以联盟的代理为值,构建一个联盟信息的映射。一个联盟下可能有多个房间,每个房间有一个房间号作为标识。以下是联盟管理类UnionManager的实现:

package logicimport ("sync""time""math/rand""fmt""game/component/room""core/services""framework/msError""framework/remote""core/models/entity""common/biz""game/component/proto"
)type UnionManager struct {sync.RWMutexunionList map[int64]*Union
}func NewUnionManager() *UnionManager {return &UnionManager{unionList: make(map[int64]*Union),}
}func (u *UnionManager) GetUnion(unionId int64) *Union {u.Lock()defer u.Unlock()union, ok := u.unionList[unionId]if ok {return union}union = NewUnion(unionId, u)union.Init()u.unionList[unionId] = unionreturn union
}func (u *UnionManager) CreateNewRoomID() string {roomId := u.genRoomId()for _, v := range u.unionList {if v.RoomList[roomId] != nil {return u.CreateNewRoomID()}}return roomId
}func (u *UnionManager) genRoomId() string {rand.New(rand.NewSource(time.Now().UnixNano()))one := rand.Int63n(999999) + 100000roomId := fmt.Sprintf("%d", one)return roomId
}func (u *UnionManager) GetRoomById(roomId string) *room.Room {for _, v := range u.unionList {rm, ok := v.RoomList[roomId]if ok {return rm}}return nil
}func (u *UnionManager) JoinRoom(session *remote.Session, roomID string, userData *entity.User) *msError.Error {union := u.getUnionByRoomId(roomID)if union == nil {return biz.RoomNotExist}return union.JoinRoom(session, roomID, userData)
}func (u *UnionManager) getUnionByRoomId(roomID string) *Union {for _, v := range u.unionList {_, ok := v.RoomList[roomID]if ok {return v}}return nil
}
联盟(Union)的具体实现
type Union struct {Id         int64m          *UnionManagerRoomList   map[string]*room.RoomactiveTime int64
}func (u *Union) Init() {// 初始化操作
}func (u *Union) CloseRoom(roomId string) {r, ok := u.RoomList[roomId]if ok {r.Close()delete(u.RoomList, roomId)}
}func (u *Union) CreateRoom(service *services.UserInfoService, session *remote.Session, gameRuleId string, unionID int64, gameRule proto.GameRule, userData *entity.User) *msError.Error {roomId := u.m.CreateNewRoomID()creator := proto.BuildRoomUserInfo(userData)if unionID == 1 {creator.CreatorType = proto.UserCreate} else {creator.CreatorType = proto.UnionCreatecreator.UnionID = unionID}newRoom := room.NewRoom(service, roomId, creator, gameRule)u.RoomList[roomId] = newRoomreturn newRoom.UserEntryRoom(session, userData)
}func (u *Union) JoinRoom(session *remote.Session, roomID string, userData *entity.User) *msError.Error {u.activeTime = time.Now().UnixMilli()r, ok := u.RoomList[roomID]if !ok {return biz.Fail}return r.UserEntryRoom(session, userData)
}func NewUnion(id int64, m *UnionManager) *Union {return &Union{Id:       id,m:        m,RoomList: make(map[string]*room.Room),}
}
创建房间逻辑的实现

在实现创建房间逻辑之前,我们需要完成以下步骤:

  1. 接收参数:从请求中解析出必要的参数,如联盟ID、游戏规则ID等。

  2. 查询用户信息:根据用户ID查询用户信息,确保用户存在。

  3. 创建房间:根据解析出的参数和用户信息,创建房间并生成房间号。

  4. 推送房间号和游戏类型:将房间号和游戏类型推送给客户端,告知客户端可以进入房间。

以下是创建房间逻辑的代码实现:

package handlerimport ("common/biz""core/models/entity""core/services""framework/msError""framework/remote""game/component/proto""game/logic""time"
)func CreateRoomHandler(session *remote.Session, request *proto.CreateRoomRequest) *msError.Error {// 1. 接收参数unionID := request.UnionIDgameRuleID := request.GameRuleIDuserID := session.GetUid()// 2. 查询用户信息userService := services.GetUserInfoService()userData, err := userService.FindUserByUid(userID)if err != nil || userData == nil {return msError.NewError(msError.UserNotFound, "User not found")}// 3. 获取联盟管理器unionManager := logic.NewUnionManager()// 4. 获取联盟union := unionManager.GetUnion(unionID)// 5. 创建房间gameRule := proto.GameRule{GameType: request.GameType,// 其他游戏规则参数}err = union.CreateRoom(services.GetUserInfoService(), session, gameRuleID, unionID, gameRule, userData)if err != nil {return err}// 6. 推送房间号和游戏类型roomId := union.CreateNewRoomID()pushMsg := &proto.CreateRoomResponse{RoomID:   roomId,GameType: request.GameType,}session.Push([]string{userID}, pushMsg, "CreateRoomResponse")return nil
}

通过上述代码实现,我们完成了创建房间逻辑的开发。主要步骤包括接收参数、查询用户信息、创建房间、生成房间号以及将房间号和游戏类型推送给客户端。

http://www.dtcms.com/wzjs/840045.html

相关文章:

  • 大同网站建设哪家好剪辑课程哪里培训最好
  • 便宜的网站建设公司WordPress文章图片采集插件
  • 洛阳网站制作哪家好网站建设教学大纲
  • 建网站手机软件玫瑰花代码编程python
  • 南京网站建设招聘个人网站 如何备案
  • 权威的建筑工程网站wordpress通过小工具添加百度统计
  • ai做的比较好的网站在哪些网站上申请做广告可以在百度引擎能收到关键字
  • 网站关键词如何优化怎么修改wordpress主题字体
  • 昊诺网站建设网络推广长沙地铁最新消息
  • 一站式做网站企业高中学校网站模板
  • 建微网站需要购买官网主机吗郑州市做网站的
  • 网站可以做被告嘛有没有打代码的网站
  • 中国网库网站介绍旅游网站系统
  • 找网上公司做网站国家企业公示信息系统(全国)官网
  • 国外网站发展建设trs网站建设平台
  • 成品软件网站推荐南宁做网站找哪家
  • 彩票做的最好是个网站好医疗网站制作
  • 网站黑链检测百度热点排行榜
  • 怎么用360做网站跳转企业为什么要培训
  • 个人网站空间申请免费打广告平台有哪些
  • 深圳网站空间深圳市中心在哪里最繁华
  • 安庆微信网站开发百度浏览器下载官方免费
  • 企业网站需要哪些功能三门峡网站建设
  • 如何优化网站内部链接gta5房产网站在建设
  • 贵金属企业网站源码代搭建网站
  • 企业网站优化平台新手销售如何快速入手
  • 设计网站 杭州在线学习网站建设
  • 网络游戏那个网站做的最好网站备案怎么做超链接
  • 经营网站备案1如何做网站推广
  • 网站建设是前端的吗什么网站都有漏洞