package model import ( "log" "math/rand" "net/url" "rocommon" "rocommon/service" "rocommon/socket" "rocommon/util" "roserver/serverproto" "strconv" "sync" "time" ) var ( cliLock sync.Mutex totalCreateNum int = 0 totalCreateTime uint64 = 0 totalConnNum int = 0 totalSendMsgNum int = 0 //TmpIpStr string = "127.0.0.1:21001" TmpIpStr string = "192.168.10.158:21011" TestBeginTime uint64 //读取机器人压测数据文件 BenchmarkMsgDataList []*RobotBenchmarkSt lockKvTime sync.Mutex reqAckMsgKvTimeList = map[int]MsgKVTimeInfo{} ) type RobotBenchmarkSt struct { MsgTime uint64 MsgData []byte MsgId uint32 } type MsgKVTimeInfo struct { AckMsgId int TotalTime uint64 //总时间 TotalCount uint32 //次数 MsgName string } var MaxConnNum = 20 func Client(id int) { defer func() { //打印奔溃信息 if err := recover(); err != nil { log.Printf("err=%v", err) } }() queue := service.NewEventQueue() queue.StartQueue() //node := socket.NewServerNode("tcpConnector", "client", "192.168.10.158:22002", queue) node := socket.NewServerNode("tcpConnector", "client", TmpIpStr, nil) //node := socket.NewServerNode("tcpConnector", "client", "47.102.45.26:21011", queue) rv := rocommon.NewNetSyncRecv(node) socket.SetProcessorRPC(node, "tcp.demo", rv.EventCB()) node.(rocommon.TCPConnector).SetReconnectTime(20 * time.Millisecond) node.Start() rv.WaitMsg(rocommon.SessionConnected{}) cliLock.Lock() totalConnNum++ //log.Print("totalConnNum:", totalConnNum) if totalConnNum >= MaxConnNum { //log.Print("totalConnNum:", totalConnNum) } cliLock.Unlock() //握手处理 var wg sync.WaitGroup aesPass := "" wg.Add(1) rv.Recv(func(ev rocommon.ProcEvent) { switch msg := ev.Msg().(type) { case *serverproto.SCHandShakeNtf: //log.Printf("SCHandShakeNtf msg=%v", msg.CryptPass) aesPass = msg.CryptPass wg.Done() } }) wg.Wait() //aesPass := "" //wg.Add(1) //rv.Recv(func(ev rocommon.ProcEvent) { // switch msg := ev.Msg().(type) { // case *serverproto.SCHandShakeAck: // log.Printf("SCHandShakeAck msg=%v", msg.CryptPass) // aesPass = msg.CryptPass // } // wg.Done() //}) //wg.Wait() createBeginTime := util.GetTimeMilliseconds() openid := "editor01" + *service.TempParam + strconv.Itoa(id) //openid = "chy001" //openid = "editor3abc31" node.(rocommon.TCPConnector).Session().SetAES(aesPass) //openid = "editor11abc2" //openid = "aebfrtbxs4nvgadh4" loginReqMsg := &serverproto.CSLoginReq{ OpenId: openid, Platform: "PC", SelectZone: 4, //Platform: "SDKUni", //Platform: "", //CryptPass: "wenting123456789", //PlatformToken: "@171@91@163@82@111@88@112@151@97@155@107@109@152@105@105@152@86@96@87@172@159@149@90@114@83@110@153@101@155@108@111@110@150@157@97@147@106@108@109@156@104@108@155@159@104@149@149@107@149@150@101@107@108@146@110@104@149@117@149@93@95@85@99@89@164@162@157@149@87@112@107@104@100@99@87@156@87@109@86@99@86@177", //PlatformToken: "cb999e7904332d3eb13d9a5ba5f90472vhnkgdem", //PlatformToken: "{\"gameid\":\"ma112\",\"login_channel\":\"netease\",\"app_channel\":\"netease_appchannel\",\"platform\":\"ad\",\"sdkuid\":\"aebfrtbxs4nvgadh\",\"udid\":\"117984ba34acb4c7\",\"sessionid\":\"1-eyJzIjogInlkXzIwMDAwMDAwZGNmNmVjZWIxNGI2MWM0MTdmMTg0ODU1NDdjMTc0NTIiLCAiZ19pIjogImFlY2ZvaXl6eWFhYWFhaWYiLCAidCI6IDcsICJ1X2kiOiAiOTUzN0U2RkI5MkMzODhDRTAwQzRDMkREMjYwRENBQTZBOTgyNDYxQ0NDNjVCNEQzRDZCNUExNzQyQTY0NkRBOTlFN0M2NzgwREIzQ0MxNDYwRjA2NzA2NTE2OEQwQkIyIn0g\",\"sdk_version\":\"3.3.1\",\"deviceid\":\"aiav7eueoxja4jpz-d\",\"step\":\"-626036401\",\"ip\":\"127.0.0.1\",\"hostid\":60}", //PlatformToken: "{\"gameid\":\"ma112\",\"login_channel\":\"netease\",\"app_channel\":\"netease_appchannel\",\"platform\":\"ad\",\"sdkuid\":\"aebfrtbxs4nvgadh\",\"udid\":\"117984ba34acb4c7\",\"sessionid\":\"1-eyJzIjogInlkXzIwMDAwMDAwZGNmNmVjZWIxNGI2MWM0MTdmMTg0ODU1NDdjMTc0NTIiLCAiZ19pIjogImFlY2ZvaXl6eWFhYWFhaWYiLCAidCI6IDcsICJ1X2kiOiAiOTUzN0U2RkI5MkMzODhDRTAwQzRDMkREMjYwRENBQTZBOTgyNDYxQ0NDNjVCNEQzRDZCNUExNzQyQTY0NkRBOTlFN0M2NzgwREIzQ0MxNDYwRjA2NzA2NTE2OEQwQkIyIn0g\",\"sdk_version\":\"3.3.1\",\"deviceid\":\"aiav7eueoxja4jpz-d\",\"step\":\"-626036401\",\"ip\":\"127.0.0.1\",\"hostid\":60}", } //node.(rocommon.TCPConnector).Session().SetAES(aesPass) //log.Println("sessionmain:", node.(rocommon.TCPConnector).Session()) node.(rocommon.TCPConnector).Session().Send(loginReqMsg) //log.Println("openid:", openid) //var Addcount int32 = 1.0 //var worldBossUid uint64 = 0 if *service.TestTypeParam == 1 { //注册到登录成功阶段 GameRegister(openid, rv, createBeginTime) } else if *service.TestTypeParam == 2 { //发起压测数据阶段 GameBenchmark(openid, rv, createBeginTime) } else if *service.TestTypeParam == 3 { //聊天压测 GameChatMsg(openid, rv, createBeginTime) } else if *service.TestTypeParam == 4 { GameYuanHangMsg(openid, rv, createBeginTime) } } func Clientws(id int) { defer func() { //打印奔溃信息 if err := recover(); err != nil { log.Printf("err=%v", err) } }() queue := service.NewEventQueue() queue.StartQueue() u := url.URL{Scheme: "ws", Host: TmpIpStr, Path: "/"} //node := socket.NewServerNode("tcpConnector", "client", "192.168.10.158:22002", queue) node := socket.NewServerNode("wsConnector", "wsclient", u.String(), nil) //node := socket.NewServerNode("tcpConnector", "client", "47.102.45.26:21011", queue) rv := rocommon.NewNetSyncRecv(node) socket.SetProcessorRPC(node, "ws.demo", rv.EventCB()) node.(rocommon.TCPConnector).SetReconnectTime(20 * time.Millisecond) node.Start() rv.WaitMsg(rocommon.SessionConnected{}) cliLock.Lock() totalConnNum++ if totalConnNum >= MaxConnNum { } cliLock.Unlock() //握手处理 var wg sync.WaitGroup aesPass := "" wg.Add(1) rv.Recv(func(ev rocommon.ProcEvent) { switch msg := ev.Msg().(type) { case *serverproto.SCHandShakeNtf: //log.Printf("SCHandShakeNtf msg=%v", msg.CryptPass) aesPass = msg.CryptPass wg.Done() } }) wg.Wait() createBeginTime := util.GetTimeMilliseconds() openid := "editor4" + *service.TempParam + strconv.Itoa(id) node.(rocommon.TCPConnector).Session().SetAES(aesPass) loginReqMsg := &serverproto.CSLoginReq{ OpenId: openid, Platform: "PC", SelectZone: 4, } node.(rocommon.TCPConnector).Session().Send(loginReqMsg) if *service.TestTypeParam == 1 { //注册到登录成功阶段 GameRegister(openid, rv, createBeginTime) } else if *service.TestTypeParam == 2 { //发起压测数据阶段 GameBenchmark(openid, rv, createBeginTime) } else if *service.TestTypeParam == 3 { //聊天压测 GameChatMsg(openid, rv, createBeginTime) } } func GameRegister(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) { for { rv.Recv(func(ev rocommon.ProcEvent) { switch msg := ev.Msg().(type) { case *serverproto.SCLoginAck: //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg()) //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,}) if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) { req := &serverproto.CSCreateRoleReq{ OpenId: openid, Country: 1, Eye: 1002, Head: 10001, Hair: 1003, HairAvatar: 1001, JobId: 10000, Sex: 2, } ev.Session().Send(req) } case *serverproto.SSAccountGetRoleListAck: //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg()) case *serverproto.SCCreateRoleAck: //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg()) case *serverproto.SCStartupInfoNtf: //log.Println("recv SCStartupInfoNtf:", ev.Msg()) cliLock.Lock() totalCreateNum++ totalCreateTime += util.GetTimeMilliseconds() - createBeginTime if totalCreateNum%20 == 0 || totalCreateNum >= totalConnNum { //deltaTime := util.GetTimeMilliseconds() - testBeginTime //util.InfoF("[onlinenum=%v,pertime=%v(ms),totaltime=%v(ms)]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime) util.InfoF("[onlinenum=%v]", totalCreateNum) } //log.Printf("totalCreateNum:%v", totalCreateNum) cliLock.Unlock() reqMsg := &serverproto.CSChatMessageReq{ Type: int32(serverproto.ChatMessageType_CMT_WORLD), Message: &serverproto.ChatMessageInfo{ Message: "messagetest0111111", SendTime: util.GetTimeMilliseconds(), }, } ev.Session().Send(reqMsg) } //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg()) }) } } func GameBenchmark(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) { msgSendIdx := 0 var msgSendBeginTime uint64 = 0 var msgSendTime uint64 = 0 //var tmpSendTime uint64 = 0 var pingTime uint64 = 0 bLoginOk := false for { if !bLoginOk { rv.Recv(func(ev rocommon.ProcEvent) { switch msg := ev.Msg().(type) { case *serverproto.SCLoginAck: //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg()) //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,}) if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) { req := &serverproto.CSCreateRoleReq{ OpenId: openid, Country: 1, //Eye: 1002, //Head: 10001, //Hair: 1003, //HairAvatar: 1001, JobId: 10000, Sex: 2, } ev.Session().Send(req) } case *serverproto.SSAccountGetRoleListAck: //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg()) case *serverproto.SCCreateRoleAck: //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg()) case *serverproto.SCStartupInfoNtf: //log.Println("recv SCStartupInfoNtf:", ev.Msg()) cliLock.Lock() totalCreateNum++ totalCreateTime += ev.KVTime() - createBeginTime if totalCreateNum%30 == 0 || totalCreateNum >= totalConnNum { deltaTime := util.GetTimeMilliseconds() - TestBeginTime util.InfoF("[onlinenum=%v,pertime=%v,totalTime=%v]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime) //util.InfoF("[onlinenum=%v]", totalCreateNum) } if totalCreateNum >= totalConnNum { util.InfoF("start test...") } //log.Printf("totalCreateNum:%v", totalCreateNum) cliLock.Unlock() bLoginOk = true pingTime = util.GetTimeMilliseconds() pingReqMsg := &serverproto.CSPingReq{} ev.Session().Send(pingReqMsg) } //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg()) }) } cliLock.Lock() if totalCreateNum < totalConnNum { cliLock.Unlock() continue } cliLock.Unlock() break } ////recv msg //var lockPerform sync.Mutex //var kvTimeInfo = map[int]MsgKVTimeInfo{} //go func() { // for { // rv.Recv(func(ev rocommon.ProcEvent) { // tmpInfo := rocommon.MessageInfoByMsg(ev.Msg()) // if tmpInfo == nil { // return // } // if tmpInfo.ID == 1001 { // util.InfoF("pingtime=%v stamptime=%v", ev.KVTime()-pingTime, ev.KVTime()) // } // ackMSgId := 0 // MsgName := "" // var delTime uint64 = 0 // lockPerform.Lock() // reqData, ok := kvTimeInfo[tmpInfo.ID] // if ok { // ackMSgId = tmpInfo.ID // delTime = ev.KVTime() - reqData.TotalTime // MsgName = reqData.MsgName // } // lockPerform.Unlock() // // if tmpInfo.ID == 1174 { // nowTime := util.GetTimeMilliseconds() // msgsendtime := ev.Msg().(*serverproto.SCPlayerBossRewardAck).ServerTimeStamp // util.DebugF("pertime recvkvtime=%v msgsendtime=%v delTime=%v", nowTime-ev.KVTime(), nowTime-msgsendtime, delTime) // } // // //lockKvTime.Lock() // //if ackMSgId > 0 { // // tmpVal, ok2 := reqAckMsgKvTimeList[ackMSgId] // // if ok2 { // // tmpVal.TotalCount++ // // tmpVal.TotalTime += delTime // // reqAckMsgKvTimeList[ackMSgId] = tmpVal // // } else { // // reqAckMsgKvTimeList[ackMSgId] = MsgKVTimeInfo{ // // AckMsgId: ackMSgId, // // TotalCount: 1, // // TotalTime: delTime, // // MsgName: MsgName, // // } // // } // // // // //util.InfoF("recv msgid=%v deltime=%v msgname=%v", tmpInfo.ID, delTime, MsgName) // //} // //lockKvTime.Unlock() // }) // } //}() go func() { for { rv.Recv(func(ev rocommon.ProcEvent) {}) } }() //send msg for { //发送压测协议 if len(BenchmarkMsgDataList) <= 0 { break } nowTime := util.GetTimeMilliseconds() if msgSendIdx == 0 { msgSendBeginTime = BenchmarkMsgDataList[0].MsgTime msgSendTime = nowTime //tmpSendTime = nowTime } delTime := BenchmarkMsgDataList[msgSendIdx].MsgTime - msgSendBeginTime if (nowTime-msgSendTime)*1 >= delTime { benchmarkMsg := &rocommon.TransmitPacket{ MsgData: BenchmarkMsgDataList[msgSendIdx].MsgData, MsgId: BenchmarkMsgDataList[msgSendIdx].MsgId, } if benchmarkMsg.MsgId > 1005 { //if benchmarkMsg.MsgId == 1162 { // if rand.Int31n(100) <= 2 { // rv.Session().Send(benchmarkMsg) // } //} else { // rv.Session().Send(benchmarkMsg) //} rv.Session().Send(benchmarkMsg) util.InfoF("send msgid=%v idx=%v", benchmarkMsg.MsgId, msgSendIdx+1) } ////修改发送时间 //if benchmarkMsg.MsgId == 1173 { // tmpInfo := rocommon.MessageInfoByID(1173) // tmpSt := &serverproto.CSPlayerBossRewardReq{} // tmpInfo.Codec.Unmarshal(benchmarkMsg.MsgData, tmpSt) // tmpSt.RecordTimeStamp = util.GetTimeMilliseconds() // tmpData, _ := tmpInfo.Codec.Marshal(tmpSt) // benchmarkMsg.MsgData = tmpData.([]byte) //} //util.DebugF("1173time0=%v", util.GetTimeMilliseconds()) //rv.Session().Send(benchmarkMsg) //if msgSendIdx%10 == 0 { //util.InfoF("send msgid=%v idx=%v", benchmarkMsg.MsgId, msgSendIdx+1) //} //是否是req和ack匹配的协议 //sendMsgId := int(msgDataList[msgSendIdx].msgId) //if kvMatch, ok1 := router.ReqAckKVList[sendMsgId]; ok1 { // lockPerform.Lock() // kvTimeInfo[int(kvMatch.AckMsgId)] = MsgKVTimeInfo{ // TotalTime: nowTime, // MsgName: kvMatch.ReqMsgName, // } // lockPerform.Unlock() //} msgSendBeginTime = BenchmarkMsgDataList[msgSendIdx].MsgTime msgSendTime = nowTime msgSendIdx++ } //if msgSendIdx%10 == 0 { // reqAckMsgKvTimeList.Range(func(key, val interface{}) bool { // time := float64(val.(*MsgKVTimeInfo).TotalTime) // count := float64(val.(*MsgKVTimeInfo).TotalCount) // util.InfoF("msgid=%v pertime=%v", key, time/count) // return true // }) //} if msgSendIdx >= len(BenchmarkMsgDataList) { //delTime := (nowTime - tmpSendTime) / 1000 //util.InfoF("msgTotalTime=%v(s) %v(m)", delTime, delTime/60) //tmpNum := 0 cliLock.Lock() totalSendMsgNum++ //tmpNum = totalSendMsgNum if totalSendMsgNum%100 == 0 || totalSendMsgNum >= totalCreateNum { util.InfoF("finish num=%v", totalSendMsgNum) } cliLock.Unlock() //lockKvTime.Lock() //if tmpNum >= totalCreateNum { // var tmpList []MsgKVTimeInfo // for _, val := range reqAckMsgKvTimeList { // tmpList = append(tmpList, val) // } // sort.Slice(tmpList, func(i, j int) bool { // return tmpList[i].AckMsgId < tmpList[j].AckMsgId // }) // for idx := 0; idx < len(tmpList); idx++ { // time := float64(tmpList[idx].TotalTime) // count := float64(tmpList[idx].TotalCount) // util.InfoF("msgid=%v pertime=%v msgname=%v", tmpList[idx].AckMsgId, time/count, tmpList[idx].MsgName) // } //} //lockKvTime.Unlock() break } time.Sleep(time.Millisecond * 10) } } func GameChatMsg(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) { bLoginOk := false for { if !bLoginOk { rv.Recv(func(ev rocommon.ProcEvent) { switch msg := ev.Msg().(type) { case *serverproto.SCLoginAck: //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg()) //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,}) if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) { req := &serverproto.CSCreateRoleReq{ OpenId: openid, Country: 1, Eye: 1002, Head: 10001, Hair: 1003, HairAvatar: 1001, JobId: 10000, Sex: 1, } ev.Session().Send(req) } case *serverproto.SSAccountGetRoleListAck: //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg()) case *serverproto.SCCreateRoleAck: //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg()) case *serverproto.SCStartupInfoNtf: //log.Println("recv SCStartupInfoNtf:", ev.Msg()) cliLock.Lock() totalCreateNum++ totalCreateTime += util.GetTimeMilliseconds() - createBeginTime if totalCreateNum%20 == 0 || totalCreateNum >= totalConnNum { //deltaTime := util.GetTimeMilliseconds() - testBeginTime //util.InfoF("[onlinenum=%v,pertime=%v(ms),totaltime=%v(ms)]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime) util.InfoF("[onlinenum=%v]", totalCreateNum) } //log.Printf("totalCreateNum:%v", totalCreateNum) cliLock.Unlock() bLoginOk = true } //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg()) }) } cliLock.Lock() if totalCreateNum < totalConnNum { cliLock.Unlock() continue } cliLock.Unlock() break } go func() { for { rv.Recv(func(ev rocommon.ProcEvent) {}) } }() //delayTimer := time.NewTimer(20 * time.Millisecond) //for { // delayTimer.Reset(20 * time.Millisecond) // select { // case <-delayTimer.C: // } // // reqMsg := &serverproto.CSChatMessageReq{ // Type: int32(serverproto.ChatMessageType_CMT_WORLD), // Message: &serverproto.ChatMessageInfo{ // Message: openid + "messagetest" + strconv.Itoa(rand.Intn(100)), // SendTime: util.GetTimeMilliseconds(), // }, // } // if rand.Int31n(100) < 5 { // rv.Session().Send(reqMsg) // } //} randInt := rand.Intn(120) delayTimer := time.NewTimer(time.Duration(randInt) * time.Second) <-delayTimer.C gmMsg := &serverproto.CSGMCommandReq{ GmCmd: "AddRes 2 99999", } rv.Session().Send(gmMsg) crossMsg0 := &serverproto.CSCrossYuanHangTrialRefreshTrialTypeReq{ Force: true, } rv.Session().Send(crossMsg0) crossMsg1 := &serverproto.CSCrossYuanHangTrialRewardReq{} rv.Session().Send(crossMsg1) crossMsg := &serverproto.CSCrossYuanHangTrialReq{} rv.Session().Send(crossMsg) util.InfoF("randInt=%v", randInt) } func GameYuanHangMsg(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) { bLoginOk := false for { if !bLoginOk { rv.Recv(func(ev rocommon.ProcEvent) { switch msg := ev.Msg().(type) { case *serverproto.SCLoginAck: //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg()) //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,}) if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) { req := &serverproto.CSCreateRoleReq{ OpenId: openid, Country: 1, Eye: 1002, Head: 10001, Hair: 1003, HairAvatar: 1001, JobId: 10000, Sex: 1, } ev.Session().Send(req) } case *serverproto.SSAccountGetRoleListAck: //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg()) case *serverproto.SCCreateRoleAck: //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg()) case *serverproto.SCStartupInfoNtf: //log.Println("recv SCStartupInfoNtf:", ev.Msg()) cliLock.Lock() totalCreateNum++ totalCreateTime += util.GetTimeMilliseconds() - createBeginTime if totalCreateNum%20 == 0 || totalCreateNum >= totalConnNum { //deltaTime := util.GetTimeMilliseconds() - testBeginTime //util.InfoF("[onlinenum=%v,pertime=%v(ms),totaltime=%v(ms)]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime) util.InfoF("[onlinenum=%v]", totalCreateNum) } //log.Printf("totalCreateNum:%v", totalCreateNum) //randInt := rand.Intn(120) + totalCreateNum*5 cliLock.Unlock() bLoginOk = true //delayTimer := time.NewTimer(time.Duration(randInt) * time.Second) //<-delayTimer.C gmMsg := &serverproto.CSGMCommandReq{ GmCmd: "AddRes 2 99999", } rv.Session().Send(gmMsg) //-ip 127.0.0.1:6379 -t 3 -tfname ./log/testload10_7002.log //setmapMsg := &serverproto.CSGMCommandReq{ // GmCmd: "setmap 10 2", //} //rv.Session().Send(setmapMsg) // ////买路自己 //toptowerMsg := &serverproto.CSGMCommandReq{ // GmCmd: "toptower", //} //rv.Session().Send(toptowerMsg) //crossMsg0 := &serverproto.CSCrossYuanHangTrialRefreshTrialTypeReq{ // Force: true, //} //rv.Session().Send(crossMsg0) // //crossMsg1 := &serverproto.CSCrossYuanHangTrialRewardReq{} //rv.Session().Send(crossMsg1) // //crossMsg := &serverproto.CSCrossYuanHangTrialReq{} //rv.Session().Send(crossMsg) //util.InfoF("randInt=%v", randInt) //gmMsg = &serverproto.CSGMCommandReq{ // GmCmd: "test", //} //rv.Session().Send(gmMsg) tmpInt := rand.Intn(10) crossMsg := &serverproto.CSGCrossPlayerEnterMapReq{ MapType: 31, Pos: &serverproto.Vector3{X: 1 + float32(tmpInt), Y: 0, Z: -30}, } rv.Session().Send(crossMsg) //delayTimer := time.NewTimer(5 * time.Second) //<-delayTimer.C //posCrossMsg := &serverproto.CSGCrossPlayerMapSyncPosReq{ // Pos: &serverproto.Vector3{X: 1, Y: 1, Z: 1}, //} //rv.Session().Send(posCrossMsg) //leaveCrossMsg := &serverproto.CSGCrossPlayerLeaveMapReq{} //rv.Session().Send(leaveCrossMsg) } //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg()) }) } cliLock.Lock() if totalCreateNum < totalConnNum { cliLock.Unlock() continue } cliLock.Unlock() break } go func() { for { rv.Recv(func(ev rocommon.ProcEvent) {}) } }() }