解决冲突
This commit is contained in:
commit
a40b25d437
|
@ -99,6 +99,7 @@ const (
|
|||
GameId_AngerUncle = 606 // 愤怒大叔
|
||||
GameId_SmallRoket = 607 // 小火箭
|
||||
GameId_Clawdoll = 608 // 娃娃机
|
||||
GameId_PushCoin = 609 // 推币机
|
||||
__GameId_ThrGame_Min__ = 700 //################三方类################
|
||||
GameId_Thr_Dg = 701 //DG Game
|
||||
GameId_Thr_XHJ = 901 ///DG Game
|
||||
|
|
Binary file not shown.
|
@ -4520,7 +4520,7 @@
|
|||
{
|
||||
"Id": 2110001,
|
||||
"Name": "十三张四人",
|
||||
"Title": "1",
|
||||
"Title": "新手场",
|
||||
"GameId": 211,
|
||||
"GameRule": 21100,
|
||||
"GameType": 2,
|
||||
|
@ -4574,7 +4574,7 @@
|
|||
{
|
||||
"Id": 2110002,
|
||||
"Name": "十三张四人",
|
||||
"Title": "2",
|
||||
"Title": "小康场",
|
||||
"GameId": 211,
|
||||
"GameRule": 21100,
|
||||
"GameType": 2,
|
||||
|
@ -4628,7 +4628,7 @@
|
|||
{
|
||||
"Id": 2110003,
|
||||
"Name": "十三张四人",
|
||||
"Title": "3",
|
||||
"Title": "土豪场",
|
||||
"GameId": 211,
|
||||
"GameRule": 21100,
|
||||
"GameType": 2,
|
||||
|
@ -4682,7 +4682,7 @@
|
|||
{
|
||||
"Id": 2110004,
|
||||
"Name": "十三张四人",
|
||||
"Title": "4",
|
||||
"Title": "新手场",
|
||||
"GameId": 211,
|
||||
"GameRule": 21100,
|
||||
"GameType": 2,
|
||||
|
@ -4736,7 +4736,7 @@
|
|||
{
|
||||
"Id": 2110005,
|
||||
"Name": "十三张四人",
|
||||
"Title": "5",
|
||||
"Title": "小康场",
|
||||
"GameId": 211,
|
||||
"GameRule": 21100,
|
||||
"GameType": 2,
|
||||
|
@ -4790,7 +4790,7 @@
|
|||
{
|
||||
"Id": 2110006,
|
||||
"Name": "十三张四人",
|
||||
"Title": "6",
|
||||
"Title": "土豪场",
|
||||
"GameId": 211,
|
||||
"GameRule": 21100,
|
||||
"GameType": 2,
|
||||
|
@ -4843,7 +4843,7 @@
|
|||
{
|
||||
"Id": 2120001,
|
||||
"Name": "十三张八人",
|
||||
"Title": "1",
|
||||
"Title": "新手场",
|
||||
"GameId": 212,
|
||||
"GameRule": 21200,
|
||||
"GameType": 2,
|
||||
|
@ -4897,7 +4897,7 @@
|
|||
{
|
||||
"Id": 2120002,
|
||||
"Name": "十三张八人",
|
||||
"Title": "2",
|
||||
"Title": "小康场",
|
||||
"GameId": 212,
|
||||
"GameRule": 21200,
|
||||
"GameType": 2,
|
||||
|
@ -4951,7 +4951,7 @@
|
|||
{
|
||||
"Id": 2120003,
|
||||
"Name": "十三张八人",
|
||||
"Title": "3",
|
||||
"Title": "土豪场",
|
||||
"GameId": 212,
|
||||
"GameRule": 21200,
|
||||
"GameType": 2,
|
||||
|
@ -5005,7 +5005,7 @@
|
|||
{
|
||||
"Id": 2120004,
|
||||
"Name": "十三张八人",
|
||||
"Title": "4",
|
||||
"Title": "新手场",
|
||||
"GameId": 212,
|
||||
"GameRule": 21200,
|
||||
"GameType": 2,
|
||||
|
@ -5059,7 +5059,7 @@
|
|||
{
|
||||
"Id": 2120005,
|
||||
"Name": "十三张八人",
|
||||
"Title": "5",
|
||||
"Title": "小康场",
|
||||
"GameId": 212,
|
||||
"GameRule": 21200,
|
||||
"GameType": 2,
|
||||
|
@ -5113,7 +5113,7 @@
|
|||
{
|
||||
"Id": 2120006,
|
||||
"Name": "十三张八人",
|
||||
"Title": "6",
|
||||
"Title": "土豪场",
|
||||
"GameId": 212,
|
||||
"GameRule": 21200,
|
||||
"GameType": 2,
|
||||
|
@ -7019,6 +7019,27 @@
|
|||
"PlayerWaterRate": 100,
|
||||
"BetWaterRate": 100,
|
||||
"GameName": "娃娃机"
|
||||
},
|
||||
{
|
||||
"Id": 6090001,
|
||||
"Name": "推币机",
|
||||
"GameId": 609,
|
||||
"GameRule": 60900,
|
||||
"GameType": 5,
|
||||
"SceneType": 1,
|
||||
"ShowType": 3,
|
||||
"ShowId": 60900,
|
||||
"Turn": 60900,
|
||||
"OtherIntParams": [
|
||||
5000,
|
||||
10000,
|
||||
15000
|
||||
],
|
||||
"SameIpLimit": 1,
|
||||
"GameDif": "609",
|
||||
"GameClass": 2,
|
||||
"PlatformName": "越南棋牌",
|
||||
"GameName": "推币机"
|
||||
}
|
||||
]
|
||||
}
|
Binary file not shown.
|
@ -267,6 +267,12 @@
|
|||
"Name": "娃娃机",
|
||||
"GameId": 608,
|
||||
"GameDif": "608"
|
||||
},
|
||||
{
|
||||
"Id": 60900,
|
||||
"Name": "推币机",
|
||||
"GameId": 609,
|
||||
"GameDif": "609"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
|
||||
"¡<>"¢<>d"¹ê
|
||||
"¡<>"¢<>d"¸ê
|
||||
"¡<>"¢<>d"¸ê
|
||||
"¡<>"¢<>d
|
||||
"¡<>"¢<>c
|
||||
"¡<>"¢<>b
|
||||
"¡<>"¢<>a
|
||||
"¡<>"¢<>`
|
||||
"¡<>"¢<>_
|
||||
|
||||
|
||||
"¡<>"¢<>^
|
||||
"¡<>"¢<>]
|
||||
"¢<>\"¡<>
|
||||
"¡<>"¢<>[
|
||||
"¡<>"¢<>Z
|
||||
"¡<>"¢<>Y
|
||||
"¡<>"¢<>X
|
||||
"¡<>"¢<>W
|
||||
"¡<>"¢<>V
|
||||
"¡<>"¢<>U
|
||||
"¡<>"¢<>T
|
||||
"¡<>"¢<>S
|
||||
"¡<>"¢<>R
|
||||
"¡<>"¢<>Q
|
||||
"¡<>"¢<>P
|
||||
"¡<>"¢<>O
|
||||
"¡<>"¢<>N
|
||||
"¡<>"¢<>M
|
||||
"¡<>"¢<>L
|
||||
"¡<>"¢<>K
|
||||
"¡<>"¢<>J
|
||||
"¡<>"¢<>I
|
||||
"¡<>"¢<>H
|
||||
!!"¡<>"¢<>G
|
||||
"""¡<>"¢<>F
|
||||
##"¡<>"¢<>E
|
||||
$$"¡<>"¢<>D
|
||||
%%"¡<>"¢<>C
|
||||
&&"¢<>B"¡<>
|
||||
''"¡<>"¢<>A
|
||||
(("¢<>@"¡<>
|
||||
)"¡<>"¢<>d"¹ê
|
||||
*"¡<>"¢<>d"¸ê
|
||||
+"¢<>d"¸ê"¡<>
|
||||
,"¡<>"¢<>d
|
||||
-"¡<>"¢<>c
|
||||
."¡<>"¢<>b
|
||||
/"¡<>"¢<>a
|
||||
0"¡<>"¢<>`
|
||||
1 "¡<>"¢<>_
|
||||
2
|
||||
"¡<>"¢<>^
|
||||
3"¡<>"¢<>]
|
||||
4"¡<>"¢<>\
|
||||
5
"¡<>"¢<>[
|
||||
6"¡<>"¢<>Z
|
||||
7"¡<>"¢<>Y
|
||||
8"¢<>X"¡<>
|
||||
9"¢<>W"¡<>
|
||||
:"¡<>"¢<>V
|
||||
;"¡<>"¢<>U
|
||||
<"¡<>"¢<>T
|
||||
="¡<>"¢<>S
|
||||
>"¢<>R"¡<>
|
||||
?"¡<>"¢<>Q
|
||||
@"¡<>"¢<>P
|
||||
A"¡<>"¢<>O
|
||||
B"¡<>"¢<>N
|
||||
C"¡<>"¢<>M
|
||||
D"¡<>"¢<>L
|
||||
E"¡<>"¢<>K
|
||||
F"¢<>J"¡<>
|
||||
G"¡<>"¢<>I
|
||||
H "¡<>"¢<>H
|
||||
I!"¡<>"¢<>G
|
||||
J""¡<>"¢<>F
|
||||
K#"¡<>"¢<>E
|
||||
L$"¡<>"¢<>D
|
||||
M%"¡<>"¢<>C
|
||||
N&"¡<>"¢<>B
|
||||
O'"¡<>"¢<>A
|
||||
P("¡<>"¢<>@
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
(€β8–@΅θ;PdX–`c
|
||||
< ((€β2ΕΈ2συ8¬@Άθ;JσυJΖΈPdX¬`Η
|
||||
< ((€β2ΕΈ2συ8¬@Άθ;JΖΈJσυPdX¬`Η
|
||||
?<18>ΑΧ/ 2(€β2ΕΈ2συ8ξ@£θ;JΖΈJσυPdXξ`σ
|
Binary file not shown.
BIN
data/DB_Task.dat
BIN
data/DB_Task.dat
Binary file not shown.
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"GameName":"推币机",
|
||||
"GameId":609,
|
||||
"GameMode":[0],
|
||||
"SceneType":[1],
|
||||
"CanForceStart":true,
|
||||
"MinPlayerCnt":1,
|
||||
"DefaultPlayerCnt":1
|
||||
}
|
|
@ -193,5 +193,9 @@
|
|||
|
||||
- 5660~5669
|
||||
|
||||
### pushcoin.proto
|
||||
|
||||
- 5670~5679
|
||||
|
||||
### game.proto(玩家离开)
|
||||
- 8000~8099
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,103 @@
|
|||
syntax = "proto3";
|
||||
package pushcoin;
|
||||
option go_package = "mongo.games.com/game/protocol/pushcoin";
|
||||
|
||||
// 5670~5679
|
||||
enum PushCoinPacketID {
|
||||
PACKET_PushCoin_ZERO = 0;// 弃用消息号
|
||||
PACKET_SCPushCoinRoomInfo = 5670; // 房间信息
|
||||
PACKET_SCPushCoinRoomState = 5671; // 房间状态
|
||||
PACKET_CSPushCoinPlayerOp = 5672; // 玩家操作
|
||||
PACKET_SCPushCoinPlayerOp = 5673; // 玩家操作返回
|
||||
}
|
||||
|
||||
//房间信息
|
||||
//PACKET_SCPushCoinRoomInfo
|
||||
message SCPushCoinRoomInfo {
|
||||
int32 RoomId = 1; //房间id
|
||||
int32 GameId = 2; //游戏id
|
||||
int32 RoomMode = 3; //游戏模式
|
||||
repeated int32 Params = 4; //规则参数
|
||||
int32 State = 5; //房间当前状态
|
||||
int32 TimeOut = 6; //等待剩余时间 单位:秒
|
||||
repeated PushCoinPlayerData Players = 7; //房间内的玩家信息
|
||||
repeated ExchangeInfo ExchangeList = 8; //兑换信息
|
||||
repeated DrawInfo DrawList = 9; //抽奖信息
|
||||
}
|
||||
|
||||
message ItemInfo{
|
||||
int32 ItemId = 1; //道具id
|
||||
int32 ItemNum = 2; //道具数量
|
||||
}
|
||||
|
||||
message ExchangeInfo{
|
||||
int32 Id = 1; //兑换id
|
||||
repeated ItemInfo Cost = 2; //消耗道具
|
||||
repeated ItemInfo Gain = 3; //获得道具
|
||||
int32 ShakeTimes = 4; //获得震动次数
|
||||
}
|
||||
|
||||
message DrawInfo{
|
||||
int32 Id = 1; //抽奖id
|
||||
int32 ItemId = 2; //道具id
|
||||
int32 ItemNum = 3; //道具数量
|
||||
int64 Coin = 4; //价值
|
||||
}
|
||||
|
||||
message PushCoinPlayerData {
|
||||
string Name = 1; //名字
|
||||
int32 SnId = 2; //账号
|
||||
int32 Head = 3; //头像
|
||||
int32 Sex = 4; //性别
|
||||
int64 Coin = 5; //金币
|
||||
int32 Flag = 6; //二进制标记 第一位:是否掉线(0:在线 1:掉线) 第二位:是否准备(0:未准备 1:已准备)
|
||||
repeated string Params = 7; //其他数据 如:ip 等
|
||||
int32 VIP = 8;
|
||||
int32 RoleId = 9; //使用中的角色id
|
||||
int64 Level = 10; //玩家等级
|
||||
int64 Exp = 11; //玩家经验
|
||||
int32 SkinId = 12; //皮肤id
|
||||
int32 ShakeTimes = 13; //可震动次数
|
||||
int64 BaseCoin = 14; //当前底分(单次投币金额)
|
||||
int64 PowerLine = 15; // 当前能量值
|
||||
int64 PowerLineMax = 16; // 能量值上限
|
||||
int64 RefreshTimes = 17; // 刷新次数
|
||||
}
|
||||
|
||||
//房间状态
|
||||
//PACKET_SCPushCoinRoomState
|
||||
message SCPushCoinRoomState {
|
||||
int32 State = 1; //房间当前状态
|
||||
int32 SubState = 2; //房间当前子状态
|
||||
repeated int32 Params = 3; //状态参数
|
||||
}
|
||||
|
||||
//玩家操作
|
||||
//PACKET_CSPushCoinPlayerOp
|
||||
message CSPushCoinPlayerOp {
|
||||
OpCodes OpCode = 1;
|
||||
repeated int64 OpParam = 2;
|
||||
}
|
||||
|
||||
enum OpCodes {
|
||||
OP_Zero = 0;
|
||||
OP_Bet = 1; // 下注 [下注金额]
|
||||
OP_Gain = 2; // 得分 [得分金额]
|
||||
OP_Shake = 3; // 震动 [消耗次数]
|
||||
OP_Refresh = 4; // 刷新 [桌面金额]
|
||||
OP_Exchange = 5; // 兑换 [兑换id]
|
||||
OP_Draw = 6; // 抽奖 [抽奖id]
|
||||
}
|
||||
|
||||
enum OpResultCode {
|
||||
OPRC_Success = 0; //成功
|
||||
OPRC_Error = 1; //失败
|
||||
}
|
||||
|
||||
//PACKET_SCPushCoinPlayerOp
|
||||
message SCPushCoinPlayerOp {
|
||||
OpResultCode OpRetCode = 1;
|
||||
OpCodes OpCode = 2;
|
||||
ExchangeInfo Exchange = 3; // 兑换信息,加到背包
|
||||
DrawInfo Draw = 4; // 抽奖信息,掉落到桌面
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"mongo.games.com/goserver/core/timer"
|
||||
"time"
|
||||
|
||||
"mongo.games.com/goserver/core/logger"
|
||||
"mongo.games.com/goserver/core/netlib"
|
||||
|
||||
"mongo.games.com/game/model"
|
||||
"mongo.games.com/game/proto"
|
||||
loginproto "mongo.games.com/game/protocol/login"
|
||||
playerproto "mongo.games.com/game/protocol/player"
|
||||
)
|
||||
|
||||
func init() {
|
||||
// 心跳
|
||||
netlib.Register(int(loginproto.GatePacketID_PACKET_SC_PONG), loginproto.SCPong{}, SCPong)
|
||||
// 登录
|
||||
netlib.Register(int(loginproto.LoginPacketID_PACKET_SC_LOGIN), loginproto.SCLogin{}, SCLogin)
|
||||
// 玩家信息
|
||||
netlib.Register(int(playerproto.PlayerPacketID_PACKET_SC_PLAYERDATA), playerproto.SCPlayerData{}, SCPlayerData)
|
||||
}
|
||||
|
||||
func SCPong(s *netlib.Session, packetid int, data interface{}) error {
|
||||
accountID := s.GetAttribute(SessionAttributeClientAccountId)
|
||||
logger.Logger.Tracef("SCPong username:%v %v", accountID, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
func SCLogin(s *netlib.Session, packetid int, data interface{}) error {
|
||||
logger.Logger.Trace("SCLogin ", data)
|
||||
|
||||
msg, ok := data.(*loginproto.SCLogin)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
if msg.GetOpRetCode() != loginproto.OpResultCode_OPRC_Sucess {
|
||||
accountID := s.GetAttribute(SessionAttributeClientAccountId)
|
||||
logger.Logger.Error("登录失败 ", accountID)
|
||||
s.Close()
|
||||
return nil
|
||||
}
|
||||
|
||||
csPlayerData := &playerproto.CSPlayerData{
|
||||
AccId: msg.GetAccId(),
|
||||
}
|
||||
pp := &model.PlayerParams{
|
||||
Platform: 1,
|
||||
Ip: fmt.Sprintf("%v.%v.%v.%v", 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255)),
|
||||
City: "北京",
|
||||
Logininmodel: "app",
|
||||
}
|
||||
d, err := json.Marshal(pp)
|
||||
if err == nil {
|
||||
csPlayerData.Params = proto.String(string(d))
|
||||
}
|
||||
|
||||
s.Send(int(playerproto.PlayerPacketID_PACKET_CS_PLAYERDATA), csPlayerData)
|
||||
logger.Logger.Info("登录成功 ", msg.GetAccId())
|
||||
return nil
|
||||
}
|
||||
|
||||
func SCPlayerData(s *netlib.Session, packetid int, data interface{}) error {
|
||||
logger.Logger.Trace("SCPlayerData ", data)
|
||||
msg, ok := data.(*playerproto.SCPlayerData)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
if msg.GetOpRetCode() != playerproto.OpResultCode_OPRC_Sucess {
|
||||
accountID := s.GetAttribute(SessionAttributeClientAccountId)
|
||||
logger.Logger.Errorf("获取玩家信息失败 %v", accountID)
|
||||
s.Close()
|
||||
return nil
|
||||
}
|
||||
|
||||
s.SetAttribute(SessionAttributeUser, msg)
|
||||
|
||||
StartSessionPingTimer(s, timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool {
|
||||
if !s.IsConned() {
|
||||
StopSessionPingTimer(s)
|
||||
return false
|
||||
}
|
||||
pack := &loginproto.CSPing{}
|
||||
s.Send(int(loginproto.GatePacketID_PACKET_CS_PING), pack)
|
||||
return true
|
||||
}), nil, time.Second*time.Duration(60+rand.Int31n(100)), -1)
|
||||
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"mongo.games.com/goserver/core"
|
||||
"mongo.games.com/goserver/core/logger"
|
||||
"mongo.games.com/goserver/core/netlib"
|
||||
)
|
||||
|
||||
var Config = &Configuration{}
|
||||
|
||||
type Configuration struct {
|
||||
Count int // 机器人总数
|
||||
AppId string // appID
|
||||
Connects netlib.SessionConfig // 网络连接配置
|
||||
}
|
||||
|
||||
func (this *Configuration) Name() string {
|
||||
return "benchmark"
|
||||
}
|
||||
|
||||
func (this *Configuration) Init() error {
|
||||
logger.Logger.Tracef("%+v", *this)
|
||||
if this.Count == 0 {
|
||||
this.Count = 20
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *Configuration) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
core.RegistePackage(Config)
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
netlib:
|
||||
SrvInfo:
|
||||
Name: BenchmarkServer
|
||||
Type: 9
|
||||
Id: 902
|
||||
AreaID: 1
|
||||
Banner:
|
||||
- =================
|
||||
- benchmark server
|
||||
- =================
|
||||
IoServices: []
|
||||
module:
|
||||
Options:
|
||||
QueueBacklog: 1024
|
||||
MaxDone: 1024
|
||||
Interval: 100
|
||||
executor:
|
||||
Options:
|
||||
QueueBacklog: 1024
|
||||
MaxDone: 1024
|
||||
Interval: 0
|
||||
Worker:
|
||||
WorkerCnt: 8
|
||||
Options:
|
||||
QueueBacklog: 1024
|
||||
MaxDone: 1024
|
||||
Interval: 0
|
||||
timer:
|
||||
Options:
|
||||
QueueBacklog: 1024
|
||||
MaxDone: 1024
|
||||
Interval: 100
|
||||
signal:
|
||||
SupportSignal: true
|
||||
benchmark:
|
||||
Count: 100
|
||||
AppId: 5c56d1644966f078bfb90c71
|
||||
Connects:
|
||||
Id: 402
|
||||
Type: 4
|
||||
AreaId: 1
|
||||
Name: ClientService
|
||||
Ip: 127.0.0.1
|
||||
Port: 11001
|
||||
Protocol: tcp
|
||||
Path: /
|
||||
MaxDone: 200
|
||||
MaxPend: 200
|
||||
MaxPacket: 65535
|
||||
MaxConn: 2000
|
||||
RcvBuff: 4096
|
||||
SndBuff: 4096
|
||||
WriteTimeout: 3600
|
||||
ReadTimeout: 3600
|
||||
SoLinger: 10
|
||||
IsInnerLink: true
|
||||
NoDelay: true
|
||||
SupportFragment: true
|
||||
AuthKey: www.jxjy.games.cn
|
||||
IsClient: true
|
||||
AllowMultiConn: true
|
||||
FilterChain:
|
||||
- session-filter-auth
|
||||
HandlerChain:
|
||||
- handler-gate-session
|
|
@ -0,0 +1,69 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"mongo.games.com/goserver/core/logger"
|
||||
"mongo.games.com/goserver/core/module"
|
||||
"mongo.games.com/goserver/core/netlib"
|
||||
)
|
||||
|
||||
const (
|
||||
// RobotSessionStartId 机器人session开始id
|
||||
RobotSessionStartId = 100000000
|
||||
)
|
||||
|
||||
var (
|
||||
BenchMarkModule = &BenchMark{}
|
||||
WaitConnectSessions []*netlib.SessionConfig
|
||||
)
|
||||
|
||||
// NewSession 新建session
|
||||
// id 连接id, 默认自动分配
|
||||
func NewSession(id ...int) {
|
||||
cfg := Config.Connects
|
||||
if len(id) > 0 && id[0] > 0 {
|
||||
cfg.Id = id[0]
|
||||
} else {
|
||||
BenchMarkModule.idx++
|
||||
cfg.Id = BenchMarkModule.idx
|
||||
}
|
||||
cfg.Init()
|
||||
logger.Logger.Info("waite connect session id=", cfg.Id)
|
||||
WaitConnectSessions = append(WaitConnectSessions, &cfg)
|
||||
}
|
||||
|
||||
type BenchMark struct {
|
||||
idx int
|
||||
}
|
||||
|
||||
func (m *BenchMark) ModuleName() string {
|
||||
return "benchmark-module"
|
||||
}
|
||||
|
||||
func (m *BenchMark) Init() {
|
||||
m.idx = RobotSessionStartId
|
||||
for i := 0; i < Config.Count; i++ {
|
||||
NewSession()
|
||||
}
|
||||
}
|
||||
|
||||
// Update 机器开始连接游戏服务器
|
||||
func (m *BenchMark) Update() {
|
||||
n := len(WaitConnectSessions)
|
||||
if n > 0 {
|
||||
config := WaitConnectSessions[n-1]
|
||||
WaitConnectSessions = WaitConnectSessions[:n-1]
|
||||
if err := netlib.Connect(config); err != nil {
|
||||
logger.Logger.Error("netlib.Connect error", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (m *BenchMark) Shutdown() {
|
||||
module.UnregisteModule(m)
|
||||
}
|
||||
|
||||
func init() {
|
||||
module.RegisteModule(BenchMarkModule, time.Millisecond, 1)
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"mongo.games.com/goserver/core/netlib"
|
||||
"mongo.games.com/goserver/core/timer"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
SessionAttributeClientAccountId int = iota // 账号
|
||||
SessionAttributeUser
|
||||
SessionAttributePingTimer
|
||||
)
|
||||
|
||||
func StartSessionPingTimer(s *netlib.Session, act timer.TimerAction, ud interface{}, interval time.Duration, times int) bool {
|
||||
StopSessionPingTimer(s)
|
||||
if hTimer, ok := timer.StartTimer(act, ud, interval, times); ok {
|
||||
s.SetAttribute(SessionAttributePingTimer, hTimer)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func StopSessionPingTimer(s *netlib.Session) {
|
||||
if h, ok := s.GetAttribute(SessionAttributePingTimer).(timer.TimerHandle); ok {
|
||||
if h != timer.TimerHandle(0) {
|
||||
timer.StopTimer(h)
|
||||
s.RemoveAttribute(SessionAttributePingTimer)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"mongo.games.com/game/common"
|
||||
"mongo.games.com/game/model"
|
||||
loginproto "mongo.games.com/game/protocol/login"
|
||||
"mongo.games.com/goserver/core/logger"
|
||||
"mongo.games.com/goserver/core/netlib"
|
||||
"strconv"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
/*
|
||||
添加到客户端管理器,管理器负责登录
|
||||
当连接断开时,从管理器中移除,判断是否需要重连
|
||||
*/
|
||||
|
||||
const (
|
||||
GateSessionHandlerName = "handler-gate-session"
|
||||
)
|
||||
|
||||
type GateSessionHandler struct {
|
||||
netlib.BasicSessionHandler
|
||||
}
|
||||
|
||||
func (g *GateSessionHandler) GetName() string {
|
||||
return GateSessionHandlerName
|
||||
}
|
||||
|
||||
func (g *GateSessionHandler) GetInterestOps() uint {
|
||||
return 1<<netlib.InterestOps_Opened |
|
||||
1<<netlib.InterestOps_Closed
|
||||
}
|
||||
|
||||
func (g *GateSessionHandler) OnSessionOpened(s *netlib.Session) {
|
||||
// 登录账号
|
||||
StartLogin(s)
|
||||
return
|
||||
}
|
||||
|
||||
func (g *GateSessionHandler) OnSessionClosed(s *netlib.Session) {
|
||||
|
||||
}
|
||||
|
||||
func init() {
|
||||
netlib.RegisteSessionHandlerCreator(GateSessionHandlerName, func() netlib.SessionHandler {
|
||||
return &GateSessionHandler{}
|
||||
})
|
||||
}
|
||||
|
||||
var UserNameIndex int64
|
||||
|
||||
func StartLogin(s *netlib.Session) {
|
||||
ts := time.Now().UnixNano()
|
||||
username := fmt.Sprintf("benchmark-%v", atomic.AddInt64(&UserNameIndex, 1))
|
||||
s.SetAttribute(SessionAttributeClientAccountId, username)
|
||||
csLogin := &loginproto.CSLogin{
|
||||
Username: username,
|
||||
TimeStamp: ts,
|
||||
Platform: "1",
|
||||
Channel: "",
|
||||
PlatformTag: "test.win88.yy_android",
|
||||
}
|
||||
|
||||
params := &model.PlayerParams{
|
||||
Ip: fmt.Sprintf("%v.%v.%v.%v", 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255)),
|
||||
City: "北京",
|
||||
Platform: 1,
|
||||
Logininmodel: "app",
|
||||
}
|
||||
data, err := json.Marshal(params)
|
||||
if err == nil {
|
||||
csLogin.Params = string(data[:])
|
||||
}
|
||||
|
||||
h := md5.New()
|
||||
io.WriteString(h, fmt.Sprintf("%v%v", username, Config.AppId))
|
||||
pwd := hex.EncodeToString(h.Sum(nil))
|
||||
h.Reset()
|
||||
io.WriteString(h, fmt.Sprintf("%v%v%v", pwd, Config.AppId, ts))
|
||||
pwd = hex.EncodeToString(h.Sum(nil))
|
||||
csLogin.Password = pwd
|
||||
|
||||
csLogin.LoginType = 0
|
||||
csLogin.Sign = common.MakeMd5String(csLogin.GetUsername(), csLogin.GetPassword(),
|
||||
strconv.Itoa(int(csLogin.GetTimeStamp())), csLogin.GetParams(), Config.AppId)
|
||||
|
||||
s.Send(int(loginproto.LoginPacketID_PACKET_CS_LOGIN), csLogin)
|
||||
logger.Logger.Infof("账号 [%v] 开始登录", username)
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<seelog type="adaptive" mininterval="2000000" maxinterval="100000000" critmsgcount="500" minlevel="trace">
|
||||
<exceptions>
|
||||
<exception filepattern="test*" minlevel="error"/>
|
||||
</exceptions>
|
||||
<outputs formatid="all">
|
||||
<rollingfile formatid="all" type="size" filename="./all.log" maxsize="50000000" maxrolls="5" />
|
||||
<filter levels="info,trace,warn,error">
|
||||
<console formatid="fmtinfo"/>
|
||||
</filter>
|
||||
<filter levels="error,critical" formatid="fmterror">
|
||||
<console/>
|
||||
<file path="errors.log"/>
|
||||
</filter>
|
||||
</outputs>
|
||||
<formats>
|
||||
<format id="fmtinfo" format="[%Date][%Time] [%Level] %Msg%n"/>
|
||||
<format id="fmterror" format="[%Date][%Time] [%LEVEL] [%FuncShort @ %File.%Line] %Msg%n"/>
|
||||
<format id="all" format="[%Date][%Time] [%Level] [@ %File.%Line] %Msg%n"/>
|
||||
<format id="criticalemail" format="Critical error on our server!\n %Time %Date %RelFile %Func %Msg \nSent by Seelog"/>
|
||||
</formats>
|
||||
</seelog>
|
|
@ -0,0 +1,25 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
_ "mongo.games.com/game"
|
||||
|
||||
"mongo.games.com/goserver/core"
|
||||
"mongo.games.com/goserver/core/module"
|
||||
)
|
||||
|
||||
func main() {
|
||||
defer core.ClosePackages()
|
||||
core.LoadPackages("config.yaml")
|
||||
// core hook
|
||||
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
|
||||
|
||||
return nil
|
||||
})
|
||||
core.RegisteHook(core.HOOK_AFTER_STOP, func() error {
|
||||
|
||||
return nil
|
||||
})
|
||||
// module模块
|
||||
waiter := module.Start()
|
||||
waiter.Wait("main()")
|
||||
}
|
|
@ -2401,7 +2401,7 @@ func (this *WelfareMgr) GetRedPacket(p *Player, id int64) *welfare.SCRedPacketDr
|
|||
f := func() {
|
||||
// 概率抽奖
|
||||
rate := 0
|
||||
n := rand.Int63n(100)
|
||||
n := rand.Int63n(10000)
|
||||
for _, v := range cfg.GetRedList() {
|
||||
rate += int(v.GetRate())
|
||||
if n < int64(rate) {
|
||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue