hallClient.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import {APP_SERVER} from "@constants/app";
  2. import {connectServer, disconnectServer, onDisconnect, sendToServer} from "@features/socketSlice";
  3. import {reqGameInfo} from "@features/api";
  4. import {updatePayFinish} from "@features/paySlice";
  5. import {trackEvent} from "../../tracking/TrackAll";
  6. import {toast} from "react-toastify";
  7. import {useLocation} from "react-router-dom";
  8. import {updateServerKick} from "@features/mainSlice";
  9. const roomName=APP_SERVER.ROOM_HALL;
  10. const serverUrl=APP_SERVER.SERVER_URL;
  11. const i18n=global.i18n;
  12. //信息处理
  13. const __playground_message_types=(message,dispatch)=>{
  14. }
  15. const handlePayFinish=(message,dispatch)=>{
  16. dispatch(reqGameInfo());
  17. dispatch(updatePayFinish(message));
  18. let {data}=message;
  19. if (data&&data.PayNum>=200)global.showDropCoins();
  20. }
  21. const roger=(message,dispatch)=>{
  22. // console.log(message);
  23. if (message){
  24. let {cmd}=message;
  25. switch (cmd){
  26. case "pay_finish": {
  27. //充值完成 message={cmd:...,data:{Golds:12.xx,PayNum:10}}
  28. handlePayFinish(message, dispatch)
  29. //顺带处理打点
  30. let {data}=message;
  31. if(!!data&&!!data.event){
  32. trackEvent("pay",data.params);
  33. }
  34. break;
  35. }
  36. case "call_client":{
  37. //调用客户端接口,比如将进入游戏的客户端踢出返回,强制登出等 message={cmd:"",data:{}}
  38. if(!!message.data&&!!message.data.type){
  39. let {data}=message;
  40. switch(message.data.type){
  41. case "track":{
  42. trackEvent(data.event,data.params)
  43. break;
  44. }
  45. }
  46. }
  47. break;
  48. }
  49. //踢
  50. case "kick":{
  51. // send("operate",{cmd:"kick",data:{reason:"hall.other_online"}});
  52. if(!!message.data){
  53. let {data}=message;
  54. let reason=data.reason;
  55. if (reason!=null){
  56. toast.error(i18n.t(reason));
  57. }
  58. }
  59. dispatch(updateServerKick(1));
  60. }
  61. }
  62. }
  63. }
  64. const chat=(message,dispatch)=>{
  65. console.log(message);
  66. }
  67. //信息处理
  68. const messageHandler={
  69. __playground_message_types,
  70. roger,
  71. chat
  72. }
  73. const onHallConnect=()=>{
  74. return (dispatch, getState) => {
  75. dispatch(hallSendReg());
  76. dispatch(hallSendState());
  77. // dispatch(hallSendState(0));
  78. // dispatch(hallSendChat("123456"));
  79. // setInterval(()=>{
  80. // dispatch(hallSendChat("test"));
  81. // },1000);
  82. }
  83. }
  84. const send=(type,message,dispatch)=>{
  85. dispatch(sendToServer({
  86. roomName,
  87. type,
  88. message
  89. }));
  90. }
  91. export const onHallMessage=(type,message)=>{
  92. return (dispatch, getState) => {
  93. let handler=messageHandler[type];
  94. if (handler!=null){
  95. handler(message,dispatch);
  96. }
  97. }
  98. }
  99. export const connectHall=(hallServerUrl='')=>{
  100. if (hallServerUrl==='')hallServerUrl=serverUrl;
  101. return connectServer({
  102. roomName:roomName,
  103. serverUrl:hallServerUrl,
  104. messageCB:onHallMessage,
  105. onRoomConnect:onHallConnect
  106. });
  107. }
  108. export const disconnectHall=()=>{
  109. return disconnectServer(roomName);
  110. }
  111. export const hallSendReg=()=>{
  112. return (dispatch, getState) => {
  113. console.log("login user");
  114. let main=getState().main;
  115. let userInfo=main.userInfo;
  116. let {UserID,GlobalUID,FaceID,NickName}=userInfo;
  117. send("id",{UserID,GlobalUID,FaceID,NickName},dispatch);
  118. }
  119. }
  120. export const hallSendChat=(message)=>{
  121. return (dispatch, getState) => {
  122. send("chat",message,dispatch);
  123. }
  124. }
  125. export const hallSendState=()=>{
  126. return (dispatch, getState) => {
  127. let main=getState().main;
  128. let gameID=main.gameID;
  129. let message={in_game:gameID};
  130. send("state",message,dispatch);
  131. }
  132. }