diff --git a/chat.proto b/chat.proto new file mode 100644 index 0000000..f1682cf --- /dev/null +++ b/chat.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + +import "user.proto"; +import "service.proto"; + + +// 聊天类型 +enum ChatType +{ + CT_Unknown = 0; + CT_Private = 1; // 私聊,一对一 + CT_World = 2; // 世界频道聊天 + CT_Marquee = 3; // 跑马灯,滚动信息 +} + +// 聊天消息 +message ReqChat +{ + ChatUser srcUser = 1; // 说话的人 + ChatUser dstUser = 2; // 接收者 + ChatType type = 3; // 聊天类型 + ServiceTypeId gameId = 4; // 游戏id,只在本玩法中显示的聊天信息 + string content = 5; // 内容 +} + + + diff --git a/client.proto b/client.proto new file mode 100644 index 0000000..40676be --- /dev/null +++ b/client.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + +import "service.proto"; + + +message ClientMsg +{ + ServiceTypeId service_tid = 1; // 服务id + string service_name = 2; // 具体的服务节点名(客户端进入新的场景,保存该节点名,提高路由速度) + int64 user_id = 3; // 玩家id + int32 msg_id = 4; // 消息id + bytes data = 5; // 消息体 +} + + diff --git a/code.proto b/code.proto new file mode 100644 index 0000000..f0e072e --- /dev/null +++ b/code.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + +enum ErrCode +{ + OK = 0; + SystemErr = 1; // 系统错误 + ParamErr = 2; // 参数错误 + LoginDiffLoc = 100; // 帐号在其它地方登陆 + LoginUserOrPwdErr = 102; // 帐号或密码错误 + AccountFrozen = 103; // 帐号已冻结 + AccountBanned = 104; // 帐号已封禁 + RegisterUserExist = 110; // 已有该帐号,无法注册 + VersionTooLow = 115; // 版本太低,无法登陆 + + Maintain = 120; // 系统维护 + GoldNotEnough = 125; // 金币或其它资源不足 + NotBetCount = 126; // 数场不投注被踢出 + NotLeaveRoom = 127; // 无法离开房间(有下注) + // color game + TotalBetExceedsLimit = 500; // 总投注超过极限 + AreaBetExceedsLimit = 505; // 区域投注超过极限 +} + + diff --git a/colorgame.proto b/colorgame.proto new file mode 100644 index 0000000..3562ba1 --- /dev/null +++ b/colorgame.proto @@ -0,0 +1,271 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + +import "code.proto"; + +// 奖励档位 +enum ColorPrizeArea +{ + CPA_Single_0 = 0; // 单色投注区域开出单色 + CPA_Single_1 = 1; // 单色投注区域开出双色 + CPA_Single_2 = 2; // 单色投注区域开出三色 + CPA_Double = 3; // 双色投注区域 + CPA_Three = 4; // 三色投注区域 +} + +// 投注区域赔率范围配置信息 +message ColorPrizeAreaRange +{ + ColorPrizeArea pos = 1; // 下注区域为单色区0-2时,该值表明是单色还是双色,三色不同的赔率 + int64 minMul = 2; + int64 maxMul = 3; +} + +// color玩法配置信息 +message ColorRoomConfig +{ + repeated int64 betList = 3; // 下注档位 + repeated ColorPrizeAreaRange mulRangeConfig = 5; // 赔率显示 +} + +//骰子颜色类型 +enum ColorType +{ + CT_Yellow = 0; // 黄色 + CT_White = 1; // 白色 + CT_Pink = 2; // 粉色 + CT_Blue = 3; // 蓝色 + CT_Red = 4; // 红色 + CT_Green = 5; // 绿色 +} + +// 押注区域 +enum ColorBetArea +{ + CBA_Yellow = 0; // 黄色 + CBA_White = 1; // 白色 + CBA_Pink = 2; // 粉色 + CBA_Blue = 3; // 蓝色 + CBA_Red = 4; // 红色 + CBA_Green = 5; // 绿色 + + CBA_Yellow2 = 6; // 双黄色 + CBA_White2 = 7; // 双白色 + CBA_Pink2 = 8; // 双粉色 + CBA_Blue2 = 9; // 双蓝色 + CBA_Red2 = 10; // 双红色 + CBA_Green2 = 11; // 双绿色 + + CBA_Yellow3 = 12; // 三黄色 + CBA_White3 = 13; // 三白色 + CBA_Pink3 = 14; // 三粉色 + CBA_Blue3 = 15; // 三蓝色 + CBA_Red3 = 16; // 三红色 + CBA_Green3 = 17; // 三绿色 +} + + +//游戏阶段 +enum ColorGameStatus +{ + CGS_WaitStart = 0; // 等待准备 + CGS_Start = 1; // 开始 + CGS_Betting = 2; // 下注 + CGS_BetEnd = 3; // 下注结束 + CGS_OpenThreeDice = 4; // 开三色 + CGS_Settle = 5; // 结算 +} + +// 等待状态下房间显示信息 +message ColorRoomWaitStart +{ + NtfColorTrend Trends = 1; // 路途显示 +} + +// 开始房间显示信息 +message ColorRoomStart +{ + NtfColorGameStart start = 1; + NtfColorTrend Trends = 2; // 路途显示 +} + +// 下注显示信息 +message ColorRoomBetting +{ + NtfColorBetAreaInfo betAreaInfo = 1; // 每个投注区域的下注人数,下注金额显示 +} + +// 结束下注显示信息 +message ColorRoomEndBet +{ + NtfColorEndBetting areaMul = 1; // 结束下注后,更新每个投注区域的赔率 + NtfColorBetAreaInfo betAreaInfo = 2; // 每个投注区域的下注人数,下注金额显示 + NtfColorBigUser bigUser = 3; // 大客数据 +} + +// 开骰子显示信息 +message ColorRoomOpenThreeDice +{ + NtfColorOpenThreeDice dices = 1; +} + +// 结算信息 +message ColorRoomSettle +{ + NtfColorSettle settle = 1; +} + +// 进房间发送房间当前所有信息及状态 +message NtfColorRoomInfo +{ + ColorGameStatus status = 1; + int64 endTime = 2; // 该状态结束时间 + ColorRoomConfig config = 101; // 房间配置 + ColorUser user = 100; + ColorRoomWaitStart waitStart = 3; // 等待状态房间数据 + ColorRoomStart start = 4; + ColorRoomBetting betting = 5; + ColorRoomEndBet endBet = 6; + ColorRoomOpenThreeDice openThreeDice = 7; + ColorRoomSettle settle = 8; +} + + +message NtfColorGameStart +{ + int64 endTime = 1; // 倒计时3秒后游戏开始,endTime = statusTime+3秒 + int64 jackpot = 2; // jackpot池 +} + +message NtfColorBetting +{ + int64 endTime = 1; // 结束时间 +} + +message ReqColorBetting +{ + ColorBetArea area = 1; + int64 bet = 2; +} + +message RspColorBetting +{ + ErrCode code = 1; + ColorBetAreaInfo areaInfo = 2; +} + +message ColorBetAreaInfo +{ + ColorBetArea area = 1; // 投注区域 + int64 totalBet = 2; // 所有玩家总投注金额 + int32 playerNum = 3; // 投注该区域人数 + int64 myBet = 4; // 我的投注金额 +} + +// 更新投注区域信息 +message NtfColorBetAreaInfo +{ + repeated ColorBetAreaInfo areaInfos = 1; +} + +// 奖励类型 +enum ColorPrizeType +{ + CPT_Normal = 0; // 普通奖励 + CPT_Big = 1; // 爆奖 + CPT_Jackpot = 2; // jackpot奖 +} + +// 投注区域实际赔率,奖励类型 +message ColorBetAreaMul +{ + ColorBetArea area = 1; // 区域位置 + ColorPrizeArea prizeArea = 2; // 奖励档位 + ColorPrizeType prizeType = 3; // 奖励类型 + int64 mul = 4; // 赔率 +} + +// 结束投注 +message NtfColorEndBetting +{ + int64 endTime = 1; // 结束时间 + repeated ColorBetAreaMul areaMul = 2; // 更新区域实际赔率 + int64 jackpot = 3; // 下注结束,更新jackpot值 +} + +message NtfColorOpenThreeDice +{ + repeated ColorType color = 1; // 骰子开出颜色 3个 + int32 aniRouteIndex = 3; // 动画路径 + repeated ColorBetArea winArea = 4; // 中奖区域高亮 +} + + +// 玩家结算信息 +message NtfColorSettle +{ + message UserBetAreaMul + { + ColorBetAreaMul areaMul = 1; + int64 bet = 2; // 玩家在该区域投注金额 + int64 win = 3; // 该区域税前赢钱 + int64 realWin = 4; // 税后赢钱 + } + repeated UserBetAreaMul userAreaWin = 1; // 每个投注区域的下注及输赢 + + repeated ColorType threeDice = 2; // 骰子开出颜色 + int64 totalWin = 3; // 总输赢,税后包含本金 + int64 totalBet = 4; // 总投注 + int64 totalWinBaseBet = 6; // 赢钱区域的总投注 + int64 tax = 5; // 税 +} + + + +//游戏中几个玩家的数据 +message ColorUser { + string Nick = 1; // 用户昵称 + string Head = 2; // 头像 + int64 Score = 3; // 分数 + int32 SeatId = 4; //在场景中的座位id + int64 UserID = 5; //用户ID +} + + +// 结束下注,更新大客投注信息 +message NtfColorBigUser +{ + repeated ColorBigUser bigUser = 34; // 大客投注 +} + + +// 路途展示 +message NtfColorTrend +{ + message ColorRate + { + ColorType color = 1; + int32 rate = 2; + } + repeated ColorRate colorRate = 1; // 最近30局各颜色中奖概率 +} + + +// 赢钱或下注最多的6个玩家 +message ColorBigUser +{ + string nickName = 5; //名字 + string avatar = 2; + int64 winChips = 1; // 赢取金币 + repeated int64 areaId = 3; // 赢钱区域(前6个) +} + + + +// 系统维护或流局 +message NtfColorMaintain +{ + string msg = 2; // 维护消息 + int64 gold = 3; // 玩家金币重置为该值 +} diff --git a/common.proto b/common.proto new file mode 100644 index 0000000..fec80a7 --- /dev/null +++ b/common.proto @@ -0,0 +1,45 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + +import "code.proto"; + +// 踢出玩家 +message NtfKickOutUser +{ + ErrCode code = 1; // 踢出原因 +} + +// 玩家进入房间。首次玩家通过匹配服匹配进入玩法服,不需要发该消息 +// 玩家上线后,lobby服查找玩家在哪个玩法服并通知给玩家 +// 玩家收到消息后,发送ReqEnterRoom进入对应玩法服 +message ReqEnterRoom +{ + +} + +// 玩家进房间返回。之后玩法服同步房间信息给玩家 +message RspEnterRoom +{ + ErrCode code = 1; + int32 gameId = 2; // 玩法id + int32 roomType = 3; // 房间类型,低级,中级,高级等 +} + +// 玩家离开房间 +message ReqLeaveRoom +{ + +} + +message RspLeaveRoom +{ + ErrCode code = 1; +} + + +// 加钱或扣钱失败通知 +message NtfPayoutFail +{ + ErrCode code = 1; +} diff --git a/gene_proto.sh b/gene_proto.sh new file mode 100644 index 0000000..1690a35 --- /dev/null +++ b/gene_proto.sh @@ -0,0 +1,7 @@ +#!/bin/bash + + + +protoc -I=. --proto_path=./ --go_out=../../ *.proto + +echo "success" diff --git a/login.proto b/login.proto new file mode 100644 index 0000000..3606e18 --- /dev/null +++ b/login.proto @@ -0,0 +1,51 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + +import "code.proto"; + +// 玩家登陆 +message ReqUserLogin +{ + string username = 1; // 用户名 + string password = 2; // 密码或token + string ip = 3; + string device_id = 4; // 设备id + string version = 10; // 版本 +} + +message RspUserLogin +{ + ErrCode code = 1; + int64 user_id = 2; + string token = 3; // token +} + +// 上线通知 +message NtfUserOnline +{ + int64 user_id = 2; // 玩家id +} + +// 通知玩家在哪些服务里,方便玩家重进这些服务,重连使用 +message NtfUserInService +{ + repeated string serviceNames = 3; // 玩家所在玩法的服务名 +} + +// 玩家登陆 +message ReqUserLogout +{ + +} + +message RspUserLogout +{ + ErrCode code = 1; // 登出原因 +} + +// 下线通知 +message NtfUserOffline +{ + int64 user_id = 2; // 玩家id +} \ No newline at end of file diff --git a/match.proto b/match.proto new file mode 100644 index 0000000..0035b57 --- /dev/null +++ b/match.proto @@ -0,0 +1,37 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + +import "code.proto"; +import "user.proto"; +import "service.proto"; + +// 房间匹配 +message ReqMatchRoom +{ + ServiceTypeId gameId = 1; // 玩法id + int32 roomType = 2; // 房间类型,低级,中级,高级等 +} + +// 玩家进房间返回 匹配服返回该消息,假房间。匹配成功后发给对应玩法服,玩法服发NotifyUserEnterRoom才是真房间 +message RspMatchRoom +{ + // color玩法配置信息 + message ColorInfo + { + + } + + ErrCode code = 1; + ServiceTypeId gameId = 2; // 玩法id + int32 roomType = 3; // 房间类型,低级,中级,高级等 + GameUser User = 4; // 玩家数据 + + ColorInfo colorInfo = 20; // color玩法配置信息 +} + +message NotifyUserEnterRoom +{ + repeated GameUser User = 1; // 玩家进房间广播 +} + diff --git a/msgId.proto b/msgId.proto new file mode 100644 index 0000000..810923c --- /dev/null +++ b/msgId.proto @@ -0,0 +1,56 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + +/* +命名规则: +1. 所有消息id都在msgId.proto的MsgId中定义,前缀需有Req,Rsp,Ntf三种之一,后缀统一为Id +2. 所有错误码都在code.proto的ErrCode中定义 +3. 所有消息名为对应消息id去掉后缀Id组成 +*/ +enum MsgId +{ + MI_Unknown = 0; + + NtfMaintainId = 1000; // 通知维护 + NtfKickOutUserId = 1001; // 踢出玩家 + ReqEnterRoomId = 1002; // 进入房间 + RspEnterRoomId = 1003; + ReqLeaveRoomId = 1004; // 离开房间 + RspLeaveRoomId = 1005; + NtfPayoutFailId = 1010; // 加减钱失败 + + // 聊天服 2000-2099 + ReqChatId = 2000; // 玩家聊天消息 + RspChatId = 2001; // 复用C2SChatMsg + + // 登陆服 2100-2199 + ReqUserLoginId = 2100; // 玩家登陆 + RspUserLoginId = 2101; + NtfUserOnlineId = 2102; + NtfUserInServiceId = 2103; // 将玩家之前呆的服务同步给玩家,方便玩家重连进来 + ReqUserLogoutId = 2104; + RspUserLogoutId = 2105; + NtfUserOfflineId = 2106; + + // 匹配服 2200-2299 + ReqMatchRoomId = 2200; // 匹配服 + RspMatchRoomId = 2201; + NtfUserEnterRoomId = 2202; // 玩家进入房间 所有玩法共用此消息 + + // color game 2300-2399 + NtfColorRoomInfoId = 2300; // 进房间推送房间所有信息 + NtfColorGameStartId = 2305; // 游戏开始 + NtfColorBettingId = 2310; // 通知可以下注 + ReqColorBettingId = 2315; // 下注 + RspColorBettingId = 2320; + NtfColorBetAreaInfoId = 2325; // 每秒更新投注区域信息 + NtfColorEndBettingId = 2330; // 通知下注结束 + NtfColorOpenThreeDiceId = 2335; // 开三个骰子 + NtfColorSettleId = 2340; // 结算 + NtfColorBigUserId = 2345; // 大客数据 + NtfColorTrendId = 2350; // 路途数据 + +} + + diff --git a/service.proto b/service.proto new file mode 100644 index 0000000..df1d035 --- /dev/null +++ b/service.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + +// 节点范围为10000-99999 +// 无状态节点:10000-19999 +// 有状态节点:20000-29999 +// 有序节点:30000-39999 +enum ServiceTypeId +{ + STI_Unknown = 0; + // 无状态节点 + STI_Login = 10000; // 登陆服 + STI_Chat = 10005; // 聊天服 + STI_Match = 10010; // 匹配服 + STI_Lobby = 10015; // 大厅服 + + // 有状态节点 + STI_Gate = 20000; // 网关id + STI_ColorGame = 20005; // color game + + // 有序节点 + STI_DB = 30000; // db服 +} + + diff --git a/user.proto b/user.proto new file mode 100644 index 0000000..b706d59 --- /dev/null +++ b/user.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; +package pb; +option go_package = "common/proto/pb"; + + +// 聊天中显示的玩家基础信息 +message ChatUser +{ + int64 userId = 1; + string nickname = 2; // 昵称 + string avatar = 3; // 头像 + string avatarFrame = 4; // 头像框 + string vipLevel = 5; // vip等级 +} + +// 房间内的玩家数据 +message GameUser +{ + int64 userId = 1; + string nickname = 2; // 昵称 + string avatar = 3; // 头像 + string avatarFrame = 4; // 头像框 + int32 vipLevel = 5; // vip等级 + int32 vipExp = 6; // vip经验 + int64 seat = 20; // 座位 + int64 gold = 25; // 金币 +} + + +