game_benchmark.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  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. var pingTime uint64 = 0
  238. bLoginOk := false
  239. for {
  240. if !bLoginOk {
  241. rv.Recv(func(ev rocommon.ProcEvent) {
  242. switch msg := ev.Msg().(type) {
  243. case *serverproto.SCLoginAck:
  244. //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg())
  245. //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,})
  246. if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) {
  247. req := &serverproto.CSCreateRoleReq{
  248. OpenId: openid,
  249. Country: 1,
  250. //Eye: 1002,
  251. //Head: 10001,
  252. //Hair: 1003,
  253. //HairAvatar: 1001,
  254. JobId: 10000,
  255. Sex: 2,
  256. }
  257. ev.Session().Send(req)
  258. }
  259. case *serverproto.SSAccountGetRoleListAck:
  260. //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg())
  261. case *serverproto.SCCreateRoleAck:
  262. //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg())
  263. case *serverproto.SCStartupInfoNtf:
  264. //log.Println("recv SCStartupInfoNtf:", ev.Msg())
  265. cliLock.Lock()
  266. totalCreateNum++
  267. totalCreateTime += ev.KVTime() - createBeginTime
  268. if totalCreateNum%30 == 0 || totalCreateNum >= totalConnNum {
  269. deltaTime := util.GetTimeMilliseconds() - TestBeginTime
  270. util.InfoF("[onlinenum=%v,pertime=%v,totalTime=%v]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime)
  271. //util.InfoF("[onlinenum=%v]", totalCreateNum)
  272. }
  273. if totalCreateNum >= totalConnNum {
  274. util.InfoF("start test...")
  275. }
  276. //log.Printf("totalCreateNum:%v", totalCreateNum)
  277. cliLock.Unlock()
  278. bLoginOk = true
  279. pingTime = util.GetTimeMilliseconds()
  280. pingReqMsg := &serverproto.CSPingReq{}
  281. ev.Session().Send(pingReqMsg)
  282. }
  283. //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg())
  284. })
  285. }
  286. cliLock.Lock()
  287. if totalCreateNum < totalConnNum {
  288. cliLock.Unlock()
  289. continue
  290. }
  291. cliLock.Unlock()
  292. break
  293. }
  294. ////recv msg
  295. //var lockPerform sync.Mutex
  296. //var kvTimeInfo = map[int]MsgKVTimeInfo{}
  297. //go func() {
  298. // for {
  299. // rv.Recv(func(ev rocommon.ProcEvent) {
  300. // tmpInfo := rocommon.MessageInfoByMsg(ev.Msg())
  301. // if tmpInfo == nil {
  302. // return
  303. // }
  304. // if tmpInfo.ID == 1001 {
  305. // util.InfoF("pingtime=%v stamptime=%v", ev.KVTime()-pingTime, ev.KVTime())
  306. // }
  307. // ackMSgId := 0
  308. // MsgName := ""
  309. // var delTime uint64 = 0
  310. // lockPerform.Lock()
  311. // reqData, ok := kvTimeInfo[tmpInfo.ID]
  312. // if ok {
  313. // ackMSgId = tmpInfo.ID
  314. // delTime = ev.KVTime() - reqData.TotalTime
  315. // MsgName = reqData.MsgName
  316. // }
  317. // lockPerform.Unlock()
  318. //
  319. // if tmpInfo.ID == 1174 {
  320. // nowTime := util.GetTimeMilliseconds()
  321. // msgsendtime := ev.Msg().(*serverproto.SCPlayerBossRewardAck).ServerTimeStamp
  322. // util.DebugF("pertime recvkvtime=%v msgsendtime=%v delTime=%v", nowTime-ev.KVTime(), nowTime-msgsendtime, delTime)
  323. // }
  324. //
  325. // //lockKvTime.Lock()
  326. // //if ackMSgId > 0 {
  327. // // tmpVal, ok2 := reqAckMsgKvTimeList[ackMSgId]
  328. // // if ok2 {
  329. // // tmpVal.TotalCount++
  330. // // tmpVal.TotalTime += delTime
  331. // // reqAckMsgKvTimeList[ackMSgId] = tmpVal
  332. // // } else {
  333. // // reqAckMsgKvTimeList[ackMSgId] = MsgKVTimeInfo{
  334. // // AckMsgId: ackMSgId,
  335. // // TotalCount: 1,
  336. // // TotalTime: delTime,
  337. // // MsgName: MsgName,
  338. // // }
  339. // // }
  340. // //
  341. // // //util.InfoF("recv msgid=%v deltime=%v msgname=%v", tmpInfo.ID, delTime, MsgName)
  342. // //}
  343. // //lockKvTime.Unlock()
  344. // })
  345. // }
  346. //}()
  347. go func() {
  348. for {
  349. rv.Recv(func(ev rocommon.ProcEvent) {})
  350. }
  351. }()
  352. //send msg
  353. for {
  354. //发送压测协议
  355. if len(BenchmarkMsgDataList) <= 0 {
  356. break
  357. }
  358. nowTime := util.GetTimeMilliseconds()
  359. if msgSendIdx == 0 {
  360. msgSendBeginTime = BenchmarkMsgDataList[0].MsgTime
  361. msgSendTime = nowTime
  362. //tmpSendTime = nowTime
  363. }
  364. delTime := BenchmarkMsgDataList[msgSendIdx].MsgTime - msgSendBeginTime
  365. if (nowTime-msgSendTime)*1 >= delTime {
  366. benchmarkMsg := &rocommon.TransmitPacket{
  367. MsgData: BenchmarkMsgDataList[msgSendIdx].MsgData,
  368. MsgId: BenchmarkMsgDataList[msgSendIdx].MsgId,
  369. }
  370. if benchmarkMsg.MsgId > 1005 {
  371. //if benchmarkMsg.MsgId == 1162 {
  372. // if rand.Int31n(100) <= 2 {
  373. // rv.Session().Send(benchmarkMsg)
  374. // }
  375. //} else {
  376. // rv.Session().Send(benchmarkMsg)
  377. //}
  378. rv.Session().Send(benchmarkMsg)
  379. util.InfoF("send msgid=%v idx=%v", benchmarkMsg.MsgId, msgSendIdx+1)
  380. }
  381. ////修改发送时间
  382. //if benchmarkMsg.MsgId == 1173 {
  383. // tmpInfo := rocommon.MessageInfoByID(1173)
  384. // tmpSt := &serverproto.CSPlayerBossRewardReq{}
  385. // tmpInfo.Codec.Unmarshal(benchmarkMsg.MsgData, tmpSt)
  386. // tmpSt.RecordTimeStamp = util.GetTimeMilliseconds()
  387. // tmpData, _ := tmpInfo.Codec.Marshal(tmpSt)
  388. // benchmarkMsg.MsgData = tmpData.([]byte)
  389. //}
  390. //util.DebugF("1173time0=%v", util.GetTimeMilliseconds())
  391. //rv.Session().Send(benchmarkMsg)
  392. //if msgSendIdx%10 == 0 {
  393. //util.InfoF("send msgid=%v idx=%v", benchmarkMsg.MsgId, msgSendIdx+1)
  394. //}
  395. //是否是req和ack匹配的协议
  396. //sendMsgId := int(msgDataList[msgSendIdx].msgId)
  397. //if kvMatch, ok1 := router.ReqAckKVList[sendMsgId]; ok1 {
  398. // lockPerform.Lock()
  399. // kvTimeInfo[int(kvMatch.AckMsgId)] = MsgKVTimeInfo{
  400. // TotalTime: nowTime,
  401. // MsgName: kvMatch.ReqMsgName,
  402. // }
  403. // lockPerform.Unlock()
  404. //}
  405. msgSendBeginTime = BenchmarkMsgDataList[msgSendIdx].MsgTime
  406. msgSendTime = nowTime
  407. msgSendIdx++
  408. }
  409. //if msgSendIdx%10 == 0 {
  410. // reqAckMsgKvTimeList.Range(func(key, val interface{}) bool {
  411. // time := float64(val.(*MsgKVTimeInfo).TotalTime)
  412. // count := float64(val.(*MsgKVTimeInfo).TotalCount)
  413. // util.InfoF("msgid=%v pertime=%v", key, time/count)
  414. // return true
  415. // })
  416. //}
  417. if msgSendIdx >= len(BenchmarkMsgDataList) {
  418. //delTime := (nowTime - tmpSendTime) / 1000
  419. //util.InfoF("msgTotalTime=%v(s) %v(m)", delTime, delTime/60)
  420. //tmpNum := 0
  421. cliLock.Lock()
  422. totalSendMsgNum++
  423. //tmpNum = totalSendMsgNum
  424. if totalSendMsgNum%100 == 0 || totalSendMsgNum >= totalCreateNum {
  425. util.InfoF("finish num=%v", totalSendMsgNum)
  426. }
  427. cliLock.Unlock()
  428. //lockKvTime.Lock()
  429. //if tmpNum >= totalCreateNum {
  430. // var tmpList []MsgKVTimeInfo
  431. // for _, val := range reqAckMsgKvTimeList {
  432. // tmpList = append(tmpList, val)
  433. // }
  434. // sort.Slice(tmpList, func(i, j int) bool {
  435. // return tmpList[i].AckMsgId < tmpList[j].AckMsgId
  436. // })
  437. // for idx := 0; idx < len(tmpList); idx++ {
  438. // time := float64(tmpList[idx].TotalTime)
  439. // count := float64(tmpList[idx].TotalCount)
  440. // util.InfoF("msgid=%v pertime=%v msgname=%v", tmpList[idx].AckMsgId, time/count, tmpList[idx].MsgName)
  441. // }
  442. //}
  443. //lockKvTime.Unlock()
  444. break
  445. }
  446. time.Sleep(time.Millisecond * 10)
  447. }
  448. }
  449. func GameChatMsg(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) {
  450. bLoginOk := false
  451. for {
  452. if !bLoginOk {
  453. rv.Recv(func(ev rocommon.ProcEvent) {
  454. switch msg := ev.Msg().(type) {
  455. case *serverproto.SCLoginAck:
  456. //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg())
  457. //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,})
  458. if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) {
  459. req := &serverproto.CSCreateRoleReq{
  460. OpenId: openid,
  461. Country: 1,
  462. Eye: 1002,
  463. Head: 10001,
  464. Hair: 1003,
  465. HairAvatar: 1001,
  466. JobId: 10000,
  467. Sex: 1,
  468. }
  469. ev.Session().Send(req)
  470. }
  471. case *serverproto.SSAccountGetRoleListAck:
  472. //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg())
  473. case *serverproto.SCCreateRoleAck:
  474. //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg())
  475. case *serverproto.SCStartupInfoNtf:
  476. //log.Println("recv SCStartupInfoNtf:", ev.Msg())
  477. cliLock.Lock()
  478. totalCreateNum++
  479. totalCreateTime += util.GetTimeMilliseconds() - createBeginTime
  480. if totalCreateNum%20 == 0 || totalCreateNum >= totalConnNum {
  481. //deltaTime := util.GetTimeMilliseconds() - testBeginTime
  482. //util.InfoF("[onlinenum=%v,pertime=%v(ms),totaltime=%v(ms)]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime)
  483. util.InfoF("[onlinenum=%v]", totalCreateNum)
  484. }
  485. //log.Printf("totalCreateNum:%v", totalCreateNum)
  486. cliLock.Unlock()
  487. bLoginOk = true
  488. }
  489. //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg())
  490. })
  491. }
  492. cliLock.Lock()
  493. if totalCreateNum < totalConnNum {
  494. cliLock.Unlock()
  495. continue
  496. }
  497. cliLock.Unlock()
  498. break
  499. }
  500. go func() {
  501. for {
  502. rv.Recv(func(ev rocommon.ProcEvent) {})
  503. }
  504. }()
  505. //delayTimer := time.NewTimer(20 * time.Millisecond)
  506. //for {
  507. // delayTimer.Reset(20 * time.Millisecond)
  508. // select {
  509. // case <-delayTimer.C:
  510. // }
  511. //
  512. // reqMsg := &serverproto.CSChatMessageReq{
  513. // Type: int32(serverproto.ChatMessageType_CMT_WORLD),
  514. // Message: &serverproto.ChatMessageInfo{
  515. // Message: openid + "messagetest" + strconv.Itoa(rand.Intn(100)),
  516. // SendTime: util.GetTimeMilliseconds(),
  517. // },
  518. // }
  519. // if rand.Int31n(100) < 5 {
  520. // rv.Session().Send(reqMsg)
  521. // }
  522. //}
  523. randInt := rand.Intn(120)
  524. delayTimer := time.NewTimer(time.Duration(randInt) * time.Second)
  525. <-delayTimer.C
  526. gmMsg := &serverproto.CSGMCommandReq{
  527. GmCmd: "AddRes 2 99999",
  528. }
  529. rv.Session().Send(gmMsg)
  530. crossMsg0 := &serverproto.CSCrossYuanHangTrialRefreshTrialTypeReq{
  531. Force: true,
  532. }
  533. rv.Session().Send(crossMsg0)
  534. crossMsg1 := &serverproto.CSCrossYuanHangTrialRewardReq{}
  535. rv.Session().Send(crossMsg1)
  536. crossMsg := &serverproto.CSCrossYuanHangTrialReq{}
  537. rv.Session().Send(crossMsg)
  538. util.InfoF("randInt=%v", randInt)
  539. }
  540. func GameYuanHangMsg(openid string, rv *rocommon.NetSyncRecv, createBeginTime uint64) {
  541. bLoginOk := false
  542. for {
  543. if !bLoginOk {
  544. rv.Recv(func(ev rocommon.ProcEvent) {
  545. switch msg := ev.Msg().(type) {
  546. case *serverproto.SCLoginAck:
  547. //log.Printf("recv SCLoginAck[%v]...\n", ev.Msg())
  548. //ev.Session().Send(&serverproto.CSGMAddMoney{Coin:1000,})
  549. if msg.Error == int32(serverproto.ErrorCode_ERROR_ROLE_NOT_FOUND) {
  550. req := &serverproto.CSCreateRoleReq{
  551. OpenId: openid,
  552. Country: 1,
  553. Eye: 1002,
  554. Head: 10001,
  555. Hair: 1003,
  556. HairAvatar: 1001,
  557. JobId: 10000,
  558. Sex: 1,
  559. }
  560. ev.Session().Send(req)
  561. }
  562. case *serverproto.SSAccountGetRoleListAck:
  563. //log.Printf("recv SSAccountGetRoleListAck[%v]...\n", ev.Msg())
  564. case *serverproto.SCCreateRoleAck:
  565. //log.Printf("recv SCCreateRoleAck[%v]...\n", ev.Msg())
  566. case *serverproto.SCStartupInfoNtf:
  567. //log.Println("recv SCStartupInfoNtf:", ev.Msg())
  568. cliLock.Lock()
  569. totalCreateNum++
  570. totalCreateTime += util.GetTimeMilliseconds() - createBeginTime
  571. if totalCreateNum%20 == 0 || totalCreateNum >= totalConnNum {
  572. //deltaTime := util.GetTimeMilliseconds() - testBeginTime
  573. //util.InfoF("[onlinenum=%v,pertime=%v(ms),totaltime=%v(ms)]", totalCreateNum, float64(totalCreateTime)/float64(totalCreateNum), deltaTime)
  574. util.InfoF("[onlinenum=%v]", totalCreateNum)
  575. }
  576. //log.Printf("totalCreateNum:%v", totalCreateNum)
  577. //randInt := rand.Intn(120) + totalCreateNum*5
  578. cliLock.Unlock()
  579. bLoginOk = true
  580. //delayTimer := time.NewTimer(time.Duration(randInt) * time.Second)
  581. //<-delayTimer.C
  582. gmMsg := &serverproto.CSGMCommandReq{
  583. GmCmd: "AddRes 2 99999",
  584. }
  585. rv.Session().Send(gmMsg)
  586. //-ip 127.0.0.1:6379 -t 3 -tfname ./log/testload10_7002.log
  587. //setmapMsg := &serverproto.CSGMCommandReq{
  588. // GmCmd: "setmap 10 2",
  589. //}
  590. //rv.Session().Send(setmapMsg)
  591. //
  592. ////买路自己
  593. //toptowerMsg := &serverproto.CSGMCommandReq{
  594. // GmCmd: "toptower",
  595. //}
  596. //rv.Session().Send(toptowerMsg)
  597. //crossMsg0 := &serverproto.CSCrossYuanHangTrialRefreshTrialTypeReq{
  598. // Force: true,
  599. //}
  600. //rv.Session().Send(crossMsg0)
  601. //
  602. //crossMsg1 := &serverproto.CSCrossYuanHangTrialRewardReq{}
  603. //rv.Session().Send(crossMsg1)
  604. //
  605. //crossMsg := &serverproto.CSCrossYuanHangTrialReq{}
  606. //rv.Session().Send(crossMsg)
  607. //util.InfoF("randInt=%v", randInt)
  608. //gmMsg = &serverproto.CSGMCommandReq{
  609. // GmCmd: "test",
  610. //}
  611. //rv.Session().Send(gmMsg)
  612. tmpInt := rand.Intn(10)
  613. crossMsg := &serverproto.CSGCrossPlayerEnterMapReq{
  614. MapType: 31,
  615. Pos: &serverproto.Vector3{X: 1 + float32(tmpInt), Y: 0, Z: -30},
  616. }
  617. rv.Session().Send(crossMsg)
  618. //delayTimer := time.NewTimer(5 * time.Second)
  619. //<-delayTimer.C
  620. //posCrossMsg := &serverproto.CSGCrossPlayerMapSyncPosReq{
  621. // Pos: &serverproto.Vector3{X: 1, Y: 1, Z: 1},
  622. //}
  623. //rv.Session().Send(posCrossMsg)
  624. //leaveCrossMsg := &serverproto.CSGCrossPlayerLeaveMapReq{}
  625. //rv.Session().Send(leaveCrossMsg)
  626. }
  627. //log.Printf("type=%v msg=%v", reflect.TypeOf(ev.Msg()).Elem().String(), ev.Msg())
  628. })
  629. }
  630. cliLock.Lock()
  631. if totalCreateNum < totalConnNum {
  632. cliLock.Unlock()
  633. continue
  634. }
  635. cliLock.Unlock()
  636. break
  637. }
  638. go func() {
  639. for {
  640. rv.Recv(func(ev rocommon.ProcEvent) {})
  641. }
  642. }()
  643. }