game_benchmark.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706
  1. package model
  2. import (
  3. "log"
  4. "math/rand"
  5. "net/url"
  6. "rocommon"
  7. "rocommon/service"
  8. "rocommon/socket"
  9. "rocommon/util"
  10. "roserver/serverproto"
  11. "strconv"
  12. "sync"
  13. "time"
  14. )
  15. var (
  16. cliLock sync.Mutex
  17. totalCreateNum int = 0
  18. totalCreateTime uint64 = 0
  19. totalConnNum int = 0
  20. totalSendMsgNum int = 0
  21. //TmpIpStr string = "127.0.0.1:21001"
  22. TmpIpStr string = "192.168.10.158:21011"
  23. TestBeginTime uint64
  24. //读取机器人压测数据文件
  25. BenchmarkMsgDataList []*RobotBenchmarkSt
  26. lockKvTime sync.Mutex
  27. reqAckMsgKvTimeList = map[int]MsgKVTimeInfo{}
  28. )
  29. type RobotBenchmarkSt struct {
  30. MsgTime uint64
  31. MsgData []byte
  32. MsgId uint32
  33. }
  34. type MsgKVTimeInfo struct {
  35. AckMsgId int
  36. TotalTime uint64 //总时间
  37. TotalCount uint32 //次数
  38. MsgName string
  39. }
  40. var MaxConnNum = 20
  41. func Client(id int) {
  42. defer func() {
  43. //打印奔溃信息
  44. if err := recover(); err != nil {
  45. log.Printf("err=%v", err)
  46. }
  47. }()
  48. queue := service.NewEventQueue()
  49. queue.StartQueue()
  50. //node := socket.NewServerNode("tcpConnector", "client", "192.168.10.158:22002", queue)
  51. node := socket.NewServerNode("tcpConnector", "client", TmpIpStr, nil)
  52. //node := socket.NewServerNode("tcpConnector", "client", "47.102.45.26:21011", queue)
  53. rv := rocommon.NewNetSyncRecv(node)
  54. socket.SetProcessorRPC(node, "tcp.demo", rv.EventCB())
  55. node.(rocommon.TCPConnector).SetReconnectTime(20 * time.Millisecond)
  56. node.Start()
  57. rv.WaitMsg(rocommon.SessionConnected{})
  58. cliLock.Lock()
  59. totalConnNum++
  60. //log.Print("totalConnNum:", totalConnNum)
  61. if totalConnNum >= MaxConnNum {
  62. //log.Print("totalConnNum:", totalConnNum)
  63. }
  64. cliLock.Unlock()
  65. //握手处理
  66. var wg sync.WaitGroup
  67. aesPass := ""
  68. wg.Add(1)
  69. rv.Recv(func(ev rocommon.ProcEvent) {
  70. switch msg := ev.Msg().(type) {
  71. case *serverproto.SCHandShakeNtf:
  72. //log.Printf("SCHandShakeNtf msg=%v", msg.CryptPass)
  73. aesPass = msg.CryptPass
  74. wg.Done()
  75. }
  76. })
  77. wg.Wait()
  78. //aesPass := ""
  79. //wg.Add(1)
  80. //rv.Recv(func(ev rocommon.ProcEvent) {
  81. // switch msg := ev.Msg().(type) {
  82. // case *serverproto.SCHandShakeAck:
  83. // log.Printf("SCHandShakeAck msg=%v", msg.CryptPass)
  84. // aesPass = msg.CryptPass
  85. // }
  86. // wg.Done()
  87. //})
  88. //wg.Wait()
  89. createBeginTime := util.GetTimeMilliseconds()
  90. openid := "editor01" + *service.TempParam + strconv.Itoa(id)
  91. //openid = "chy001"
  92. //openid = "editor3abc31"
  93. node.(rocommon.TCPConnector).Session().SetAES(aesPass)
  94. //openid = "editor11abc2"
  95. //openid = "aebfrtbxs4nvgadh4"
  96. loginReqMsg := &serverproto.CSLoginReq{
  97. OpenId: openid,
  98. Platform: "PC",
  99. SelectZone: 4,
  100. //Platform: "SDKUni",
  101. //Platform: "",
  102. //CryptPass: "wenting123456789",
  103. //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",
  104. //PlatformToken: "cb999e7904332d3eb13d9a5ba5f90472vhnkgdem",
  105. //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}",
  106. //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}",
  107. }
  108. //node.(rocommon.TCPConnector).Session().SetAES(aesPass)
  109. //log.Println("sessionmain:", node.(rocommon.TCPConnector).Session())
  110. node.(rocommon.TCPConnector).Session().Send(loginReqMsg)
  111. //log.Println("openid:", openid)
  112. //var Addcount int32 = 1.0
  113. //var worldBossUid uint64 = 0
  114. if *service.TestTypeParam == 1 {
  115. //注册到登录成功阶段
  116. GameRegister(openid, rv, createBeginTime)
  117. } else if *service.TestTypeParam == 2 {
  118. //发起压测数据阶段
  119. GameBenchmark(openid, rv, createBeginTime)
  120. } else if *service.TestTypeParam == 3 {
  121. //聊天压测
  122. GameChatMsg(openid, rv, createBeginTime)
  123. } else if *service.TestTypeParam == 4 {
  124. GameYuanHangMsg(openid, rv, createBeginTime)
  125. }
  126. }
  127. func Clientws(id int) {
  128. defer func() {
  129. //打印奔溃信息
  130. if err := recover(); err != nil {
  131. log.Printf("err=%v", err)
  132. }
  133. }()
  134. queue := service.NewEventQueue()
  135. queue.StartQueue()
  136. u := url.URL{Scheme: "ws", Host: TmpIpStr, Path: "/"}
  137. //node := socket.NewServerNode("tcpConnector", "client", "192.168.10.158:22002", queue)
  138. node := socket.NewServerNode("wsConnector", "wsclient", u.String(), nil)
  139. //node := socket.NewServerNode("tcpConnector", "client", "47.102.45.26:21011", queue)
  140. rv := rocommon.NewNetSyncRecv(node)
  141. socket.SetProcessorRPC(node, "ws.demo", rv.EventCB())
  142. node.(rocommon.TCPConnector).SetReconnectTime(20 * time.Millisecond)
  143. node.Start()
  144. rv.WaitMsg(rocommon.SessionConnected{})
  145. cliLock.Lock()
  146. totalConnNum++
  147. if totalConnNum >= MaxConnNum {
  148. }
  149. cliLock.Unlock()
  150. //握手处理
  151. var wg sync.WaitGroup
  152. aesPass := ""
  153. wg.Add(1)
  154. rv.Recv(func(ev rocommon.ProcEvent) {
  155. switch msg := ev.Msg().(type) {
  156. case *serverproto.SCHandShakeNtf:
  157. //log.Printf("SCHandShakeNtf msg=%v", msg.CryptPass)
  158. aesPass = msg.CryptPass
  159. wg.Done()
  160. }
  161. })
  162. wg.Wait()
  163. createBeginTime := util.GetTimeMilliseconds()
  164. openid := "editor4" + *service.TempParam + strconv.Itoa(id)
  165. node.(rocommon.TCPConnector).Session().SetAES(aesPass)
  166. loginReqMsg := &serverproto.CSLoginReq{
  167. OpenId: openid,
  168. Platform: "PC",
  169. SelectZone: 4,
  170. }
  171. node.(rocommon.TCPConnector).Session().Send(loginReqMsg)
  172. if *service.TestTypeParam == 1 {
  173. //注册到登录成功阶段
  174. GameRegister(openid, rv, createBeginTime)
  175. } else if *service.TestTypeParam == 2 {
  176. //发起压测数据阶段
  177. GameBenchmark(openid, rv, createBeginTime)
  178. } else if *service.TestTypeParam == 3 {
  179. //聊天压测
  180. GameChatMsg(openid, rv, createBeginTime)
  181. }
  182. }
  183. func GameRegister(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) {
  184. for {
  185. rv.Recv(func(ev rocommon.ProcEvent) {
  186. switch msg := ev.Msg().(type) {
  187. case *serverproto.SCLoginAck:
  188. //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg())
  189. //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,})
  190. if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) {
  191. req := &serverproto.CSCreateRoleReq{
  192. OpenId: openid,
  193. Country: 1,
  194. Eye: 1002,
  195. Head: 10001,
  196. Hair: 1003,
  197. HairAvatar: 1001,
  198. JobId: 10000,
  199. Sex: 2,
  200. }
  201. ev.Session().Send(req)
  202. }
  203. case *serverproto.SSAccountGetRoleListAck:
  204. //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg())
  205. case *serverproto.SCCreateRoleAck:
  206. //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg())
  207. case *serverproto.SCStartupInfoNtf:
  208. //log.Println("recv SCStartupInfoNtf:", ev.Msg())
  209. cliLock.Lock()
  210. totalCreateNum++
  211. totalCreateTime += util.GetTimeMilliseconds() - createBeginTime
  212. if totalCreateNum%20 == 0 || totalCreateNum >= totalConnNum {
  213. //deltaTime := util.GetTimeMilliseconds() - testBeginTime
  214. //util.InfoF("[onlinenum=%v,pertime=%v(ms),totaltime=%v(ms)]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime)
  215. util.InfoF("[onlinenum=%v]", totalCreateNum)
  216. }
  217. //log.Printf("totalCreateNum:%v", totalCreateNum)
  218. cliLock.Unlock()
  219. reqMsg := &serverproto.CSChatMessageReq{
  220. Type: int32(serverproto.ChatMessageType_CMT_WORLD),
  221. Message: &serverproto.ChatMessageInfo{
  222. Message: "messagetest0111111",
  223. SendTime: util.GetTimeMilliseconds(),
  224. },
  225. }
  226. ev.Session().Send(reqMsg)
  227. }
  228. //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg())
  229. })
  230. }
  231. }
  232. func GameBenchmark(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) {
  233. msgSendIdx := 0
  234. var msgSendBeginTime uint64 = 0
  235. var msgSendTime uint64 = 0
  236. //var tmpSendTime uint64 = 0
  237. bLoginOk := false
  238. for {
  239. if !bLoginOk {
  240. rv.Recv(func(ev rocommon.ProcEvent) {
  241. switch msg := ev.Msg().(type) {
  242. case *serverproto.SCLoginAck:
  243. //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg())
  244. //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,})
  245. if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) {
  246. req := &serverproto.CSCreateRoleReq{
  247. OpenId: openid,
  248. Country: 1,
  249. //Eye: 1002,
  250. //Head: 10001,
  251. //Hair: 1003,
  252. //HairAvatar: 1001,
  253. JobId: 10000,
  254. Sex: 2,
  255. }
  256. ev.Session().Send(req)
  257. }
  258. case *serverproto.SSAccountGetRoleListAck:
  259. //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg())
  260. case *serverproto.SCCreateRoleAck:
  261. //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg())
  262. case *serverproto.SCStartupInfoNtf:
  263. //log.Println("recv SCStartupInfoNtf:", ev.Msg())
  264. cliLock.Lock()
  265. totalCreateNum++
  266. totalCreateTime += ev.KVTime() - createBeginTime
  267. if totalCreateNum%30 == 0 || totalCreateNum >= totalConnNum {
  268. deltaTime := util.GetTimeMilliseconds() - TestBeginTime
  269. util.InfoF("[onlinenum=%v,pertime=%v,totalTime=%v]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime)
  270. //util.InfoF("[onlinenum=%v]", totalCreateNum)
  271. }
  272. if totalCreateNum >= totalConnNum {
  273. util.InfoF("start test...")
  274. }
  275. //log.Printf("totalCreateNum:%v", totalCreateNum)
  276. cliLock.Unlock()
  277. bLoginOk = true
  278. pingReqMsg := &serverproto.CSPingReq{}
  279. ev.Session().Send(pingReqMsg)
  280. }
  281. //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg())
  282. })
  283. }
  284. cliLock.Lock()
  285. if totalCreateNum < totalConnNum {
  286. cliLock.Unlock()
  287. continue
  288. }
  289. cliLock.Unlock()
  290. break
  291. }
  292. ////recv msg
  293. //var lockPerform sync.Mutex
  294. //var kvTimeInfo = map[int]MsgKVTimeInfo{}
  295. //go func() {
  296. // for {
  297. // rv.Recv(func(ev rocommon.ProcEvent) {
  298. // tmpInfo := rocommon.MessageInfoByMsg(ev.Msg())
  299. // if tmpInfo == nil {
  300. // return
  301. // }
  302. // if tmpInfo.ID == 1001 {
  303. // util.InfoF("pingtime=%v stamptime=%v", ev.KVTime()-pingTime, ev.KVTime())
  304. // }
  305. // ackMSgId := 0
  306. // MsgName := ""
  307. // var delTime uint64 = 0
  308. // lockPerform.Lock()
  309. // reqData, ok := kvTimeInfo[tmpInfo.ID]
  310. // if ok {
  311. // ackMSgId = tmpInfo.ID
  312. // delTime = ev.KVTime() - reqData.TotalTime
  313. // MsgName = reqData.MsgName
  314. // }
  315. // lockPerform.Unlock()
  316. //
  317. // if tmpInfo.ID == 1174 {
  318. // nowTime := util.GetTimeMilliseconds()
  319. // msgsendtime := ev.Msg().(*serverproto.SCPlayerBossRewardAck).ServerTimeStamp
  320. // util.DebugF("pertime recvkvtime=%v msgsendtime=%v delTime=%v", nowTime-ev.KVTime(), nowTime-msgsendtime, delTime)
  321. // }
  322. //
  323. // //lockKvTime.Lock()
  324. // //if ackMSgId > 0 {
  325. // // tmpVal, ok2 := reqAckMsgKvTimeList[ackMSgId]
  326. // // if ok2 {
  327. // // tmpVal.TotalCount++
  328. // // tmpVal.TotalTime += delTime
  329. // // reqAckMsgKvTimeList[ackMSgId] = tmpVal
  330. // // } else {
  331. // // reqAckMsgKvTimeList[ackMSgId] = MsgKVTimeInfo{
  332. // // AckMsgId: ackMSgId,
  333. // // TotalCount: 1,
  334. // // TotalTime: delTime,
  335. // // MsgName: MsgName,
  336. // // }
  337. // // }
  338. // //
  339. // // //util.InfoF("recv msgid=%v deltime=%v msgname=%v", tmpInfo.ID, delTime, MsgName)
  340. // //}
  341. // //lockKvTime.Unlock()
  342. // })
  343. // }
  344. //}()
  345. go func() {
  346. for {
  347. rv.Recv(func(ev rocommon.ProcEvent) {})
  348. }
  349. }()
  350. //send msg
  351. for {
  352. //发送压测协议
  353. if len(BenchmarkMsgDataList) <= 0 {
  354. break
  355. }
  356. nowTime := util.GetTimeMilliseconds()
  357. if msgSendIdx == 0 {
  358. msgSendBeginTime = BenchmarkMsgDataList[0].MsgTime
  359. msgSendTime = nowTime
  360. //tmpSendTime = nowTime
  361. }
  362. delTime := BenchmarkMsgDataList[msgSendIdx].MsgTime - msgSendBeginTime
  363. if (nowTime-msgSendTime)*1 >= delTime {
  364. benchmarkMsg := &rocommon.TransmitPacket{
  365. MsgData: BenchmarkMsgDataList[msgSendIdx].MsgData,
  366. MsgId: BenchmarkMsgDataList[msgSendIdx].MsgId,
  367. }
  368. if benchmarkMsg.MsgId > 1005 {
  369. //if benchmarkMsg.MsgId == 1162 {
  370. // if rand.Int31n(100) <= 2 {
  371. // rv.Session().Send(benchmarkMsg)
  372. // }
  373. //} else {
  374. // rv.Session().Send(benchmarkMsg)
  375. //}
  376. rv.Session().Send(benchmarkMsg)
  377. util.InfoF("send msgid=%v idx=%v", benchmarkMsg.MsgId, msgSendIdx+1)
  378. }
  379. ////修改发送时间
  380. //if benchmarkMsg.MsgId == 1173 {
  381. // tmpInfo := rocommon.MessageInfoByID(1173)
  382. // tmpSt := &serverproto.CSPlayerBossRewardReq{}
  383. // tmpInfo.Codec.Unmarshal(benchmarkMsg.MsgData, tmpSt)
  384. // tmpSt.RecordTimeStamp = util.GetTimeMilliseconds()
  385. // tmpData, _ := tmpInfo.Codec.Marshal(tmpSt)
  386. // benchmarkMsg.MsgData = tmpData.([]byte)
  387. //}
  388. //util.DebugF("1173time0=%v", util.GetTimeMilliseconds())
  389. //rv.Session().Send(benchmarkMsg)
  390. //if msgSendIdx%10 == 0 {
  391. //util.InfoF("send msgid=%v idx=%v", benchmarkMsg.MsgId, msgSendIdx+1)
  392. //}
  393. //是否是req和ack匹配的协议
  394. //sendMsgId := int(msgDataList[msgSendIdx].msgId)
  395. //if kvMatch, ok1 := router.ReqAckKVList[sendMsgId]; ok1 {
  396. // lockPerform.Lock()
  397. // kvTimeInfo[int(kvMatch.AckMsgId)] = MsgKVTimeInfo{
  398. // TotalTime: nowTime,
  399. // MsgName: kvMatch.ReqMsgName,
  400. // }
  401. // lockPerform.Unlock()
  402. //}
  403. msgSendBeginTime = BenchmarkMsgDataList[msgSendIdx].MsgTime
  404. msgSendTime = nowTime
  405. msgSendIdx++
  406. }
  407. //if msgSendIdx%10 == 0 {
  408. // reqAckMsgKvTimeList.Range(func(key, val interface{}) bool {
  409. // time := float64(val.(*MsgKVTimeInfo).TotalTime)
  410. // count := float64(val.(*MsgKVTimeInfo).TotalCount)
  411. // util.InfoF("msgid=%v pertime=%v", key, time/count)
  412. // return true
  413. // })
  414. //}
  415. if msgSendIdx >= len(BenchmarkMsgDataList) {
  416. //delTime := (nowTime - tmpSendTime) / 1000
  417. //util.InfoF("msgTotalTime=%v(s) %v(m)", delTime, delTime/60)
  418. //tmpNum := 0
  419. cliLock.Lock()
  420. totalSendMsgNum++
  421. //tmpNum = totalSendMsgNum
  422. if totalSendMsgNum%100 == 0 || totalSendMsgNum >= totalCreateNum {
  423. util.InfoF("finish num=%v", totalSendMsgNum)
  424. }
  425. cliLock.Unlock()
  426. //lockKvTime.Lock()
  427. //if tmpNum >= totalCreateNum {
  428. // var tmpList []MsgKVTimeInfo
  429. // for _, val := range reqAckMsgKvTimeList {
  430. // tmpList = append(tmpList, val)
  431. // }
  432. // sort.Slice(tmpList, func(i, j int) bool {
  433. // return tmpList[i].AckMsgId < tmpList[j].AckMsgId
  434. // })
  435. // for idx := 0; idx < len(tmpList); idx++ {
  436. // time := float64(tmpList[idx].TotalTime)
  437. // count := float64(tmpList[idx].TotalCount)
  438. // util.InfoF("msgid=%v pertime=%v msgname=%v", tmpList[idx].AckMsgId, time/count, tmpList[idx].MsgName)
  439. // }
  440. //}
  441. //lockKvTime.Unlock()
  442. break
  443. }
  444. time.Sleep(time.Millisecond * 10)
  445. }
  446. }
  447. func GameChatMsg(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) {
  448. bLoginOk := false
  449. for {
  450. if !bLoginOk {
  451. rv.Recv(func(ev rocommon.ProcEvent) {
  452. switch msg := ev.Msg().(type) {
  453. case *serverproto.SCLoginAck:
  454. //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg())
  455. //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,})
  456. if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) {
  457. req := &serverproto.CSCreateRoleReq{
  458. OpenId: openid,
  459. Country: 1,
  460. Eye: 1002,
  461. Head: 10001,
  462. Hair: 1003,
  463. HairAvatar: 1001,
  464. JobId: 10000,
  465. Sex: 1,
  466. }
  467. ev.Session().Send(req)
  468. }
  469. case *serverproto.SSAccountGetRoleListAck:
  470. //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg())
  471. case *serverproto.SCCreateRoleAck:
  472. //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg())
  473. case *serverproto.SCStartupInfoNtf:
  474. //log.Println("recv SCStartupInfoNtf:", ev.Msg())
  475. cliLock.Lock()
  476. totalCreateNum++
  477. totalCreateTime += util.GetTimeMilliseconds() - createBeginTime
  478. if totalCreateNum%20 == 0 || totalCreateNum >= totalConnNum {
  479. //deltaTime := util.GetTimeMilliseconds() - testBeginTime
  480. //util.InfoF("[onlinenum=%v,pertime=%v(ms),totaltime=%v(ms)]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime)
  481. util.InfoF("[onlinenum=%v]", totalCreateNum)
  482. }
  483. //log.Printf("totalCreateNum:%v", totalCreateNum)
  484. cliLock.Unlock()
  485. bLoginOk = true
  486. }
  487. //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg())
  488. })
  489. }
  490. cliLock.Lock()
  491. if totalCreateNum < totalConnNum {
  492. cliLock.Unlock()
  493. continue
  494. }
  495. cliLock.Unlock()
  496. break
  497. }
  498. go func() {
  499. for {
  500. rv.Recv(func(ev rocommon.ProcEvent) {})
  501. }
  502. }()
  503. //delayTimer := time.NewTimer(20 * time.Millisecond)
  504. //for {
  505. // delayTimer.Reset(20 * time.Millisecond)
  506. // select {
  507. // case <-delayTimer.C:
  508. // }
  509. //
  510. // reqMsg := &serverproto.CSChatMessageReq{
  511. // Type: int32(serverproto.ChatMessageType_CMT_WORLD),
  512. // Message: &serverproto.ChatMessageInfo{
  513. // Message: openid + "messagetest" + strconv.Itoa(rand.Intn(100)),
  514. // SendTime: util.GetTimeMilliseconds(),
  515. // },
  516. // }
  517. // if rand.Int31n(100) < 5 {
  518. // rv.Session().Send(reqMsg)
  519. // }
  520. //}
  521. randInt := rand.Intn(120)
  522. delayTimer := time.NewTimer(time.Duration(randInt) * time.Second)
  523. <-delayTimer.C
  524. gmMsg := &serverproto.CSGMCommandReq{
  525. GmCmd: "AddRes 2 99999",
  526. }
  527. rv.Session().Send(gmMsg)
  528. crossMsg0 := &serverproto.CSCrossYuanHangTrialRefreshTrialTypeReq{
  529. Force: true,
  530. }
  531. rv.Session().Send(crossMsg0)
  532. crossMsg1 := &serverproto.CSCrossYuanHangTrialRewardReq{}
  533. rv.Session().Send(crossMsg1)
  534. crossMsg := &serverproto.CSCrossYuanHangTrialReq{}
  535. rv.Session().Send(crossMsg)
  536. util.InfoF("randInt=%v", randInt)
  537. }
  538. func GameYuanHangMsg(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) {
  539. bLoginOk := false
  540. for {
  541. if !bLoginOk {
  542. rv.Recv(func(ev rocommon.ProcEvent) {
  543. switch msg := ev.Msg().(type) {
  544. case *serverproto.SCLoginAck:
  545. //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg())
  546. //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,})
  547. if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) {
  548. req := &serverproto.CSCreateRoleReq{
  549. OpenId: openid,
  550. Country: 1,
  551. Eye: 1002,
  552. Head: 10001,
  553. Hair: 1003,
  554. HairAvatar: 1001,
  555. JobId: 10000,
  556. Sex: 1,
  557. }
  558. ev.Session().Send(req)
  559. }
  560. case *serverproto.SSAccountGetRoleListAck:
  561. //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg())
  562. case *serverproto.SCCreateRoleAck:
  563. //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg())
  564. case *serverproto.SCStartupInfoNtf:
  565. //log.Println("recv SCStartupInfoNtf:", ev.Msg())
  566. cliLock.Lock()
  567. totalCreateNum++
  568. totalCreateTime += util.GetTimeMilliseconds() - createBeginTime
  569. if totalCreateNum%20 == 0 || totalCreateNum >= totalConnNum {
  570. //deltaTime := util.GetTimeMilliseconds() - testBeginTime
  571. //util.InfoF("[onlinenum=%v,pertime=%v(ms),totaltime=%v(ms)]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime)
  572. util.InfoF("[onlinenum=%v]", totalCreateNum)
  573. }
  574. //log.Printf("totalCreateNum:%v", totalCreateNum)
  575. //randInt := rand.Intn(120) + totalCreateNum*5
  576. cliLock.Unlock()
  577. bLoginOk = true
  578. //delayTimer := time.NewTimer(time.Duration(randInt) * time.Second)
  579. //<-delayTimer.C
  580. gmMsg := &serverproto.CSGMCommandReq{
  581. GmCmd: "AddRes 2 99999",
  582. }
  583. rv.Session().Send(gmMsg)
  584. //-ip 127.0.0.1:6379 -t 3 -tfname ./log/testload10_7002.log
  585. //setmapMsg := &serverproto.CSGMCommandReq{
  586. // GmCmd: "setmap 10 2",
  587. //}
  588. //rv.Session().Send(setmapMsg)
  589. //
  590. ////买路自己
  591. //toptowerMsg := &serverproto.CSGMCommandReq{
  592. // GmCmd: "toptower",
  593. //}
  594. //rv.Session().Send(toptowerMsg)
  595. //crossMsg0 := &serverproto.CSCrossYuanHangTrialRefreshTrialTypeReq{
  596. // Force: true,
  597. //}
  598. //rv.Session().Send(crossMsg0)
  599. //
  600. //crossMsg1 := &serverproto.CSCrossYuanHangTrialRewardReq{}
  601. //rv.Session().Send(crossMsg1)
  602. //
  603. //crossMsg := &serverproto.CSCrossYuanHangTrialReq{}
  604. //rv.Session().Send(crossMsg)
  605. //util.InfoF("randInt=%v", randInt)
  606. //gmMsg = &serverproto.CSGMCommandReq{
  607. // GmCmd: "test",
  608. //}
  609. //rv.Session().Send(gmMsg)
  610. tmpInt := rand.Intn(10)
  611. crossMsg := &serverproto.CSGCrossPlayerEnterMapReq{
  612. MapType: 31,
  613. Pos: &serverproto.Vector3{X: 1 + float32(tmpInt), Y: 0, Z: -30},
  614. }
  615. rv.Session().Send(crossMsg)
  616. //delayTimer := time.NewTimer(5 * time.Second)
  617. //<-delayTimer.C
  618. //posCrossMsg := &serverproto.CSGCrossPlayerMapSyncPosReq{
  619. // Pos: &serverproto.Vector3{X: 1, Y: 1, Z: 1},
  620. //}
  621. //rv.Session().Send(posCrossMsg)
  622. //leaveCrossMsg := &serverproto.CSGCrossPlayerLeaveMapReq{}
  623. //rv.Session().Send(leaveCrossMsg)
  624. }
  625. //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg())
  626. })
  627. }
  628. cliLock.Lock()
  629. if totalCreateNum < totalConnNum {
  630. cliLock.Unlock()
  631. continue
  632. }
  633. cliLock.Unlock()
  634. break
  635. }
  636. go func() {
  637. for {
  638. rv.Recv(func(ev rocommon.ProcEvent) {})
  639. }
  640. }()
  641. }