GameController.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package com.jyc.threegames.controller;
  2. import com.google.gson.Gson;
  3. import com.jyc.threegames.App;
  4. import com.jyc.threegames.bean.ControllerMessage;
  5. import com.jyc.threegames.bean.GameAnswer;
  6. import com.jyc.threegames.bean.GameInfo;
  7. import com.jyc.threegames.bean.PageInfo;
  8. import com.jyc.threegames.bean.ScaleLog;
  9. import com.jyc.threegames.bean.SearchInfo;
  10. import com.jyc.threegames.bean.result.ResGameInfo;
  11. import com.jyc.threegames.bean.result.ResGamePlayTime;
  12. import com.jyc.threegames.net.ResData;
  13. import com.jyc.threegames.net.RetrofitHelper;
  14. import com.jyc.threegames.net.api.GameService;
  15. import com.jyc.threegames.net.api.LoginService;
  16. import java.text.SimpleDateFormat;
  17. import java.util.ArrayList;
  18. import java.util.Date;
  19. import java.util.List;
  20. import java.util.Locale;
  21. import io.reactivex.Observable;
  22. import io.reactivex.functions.Function;
  23. import retrofit2.http.Field;
  24. public class GameController extends BaseController {
  25. private static GameController mInstance;
  26. private GameController(){}
  27. public static GameController getInstance(){
  28. if(mInstance == null){
  29. synchronized (GameController.class){
  30. if(mInstance == null)
  31. mInstance = new GameController();
  32. }
  33. }
  34. return mInstance;
  35. }
  36. private static GameService mService;
  37. protected static GameService getGameService(){
  38. if (mService == null){
  39. synchronized (GameController.class){
  40. if (mService == null)
  41. mService = RetrofitHelper.getDefaultRetrofit(App.SERVER_ADDRESS).create(GameService.class);
  42. }
  43. }
  44. return mService;
  45. }
  46. public Observable<ControllerMessage<List<ScaleLog>>> list(SearchInfo search, int pageIndex, int pageSize){
  47. return getGameService().list(new Gson().toJson(search), pageIndex, pageSize)
  48. .map(new Function<ResData<PageInfo<ScaleLog>>, ControllerMessage<List<ScaleLog>>>() {
  49. @Override
  50. public ControllerMessage<List<ScaleLog>> apply(ResData<PageInfo<ScaleLog>> data) throws Exception {
  51. return ControllerMessage.getSimpleMessage(data.isRequestSuccess(), data.message, data.data != null ? data.data.list : null);
  52. }
  53. });
  54. }
  55. public Observable<ControllerMessage<ResGameInfo>> needPlayGame(){
  56. return getGameService().questNeedPlayGame()
  57. .map(new SimpleDataHandleFunction<>());
  58. }
  59. public Observable<ControllerMessage<List<ResGamePlayTime>>> listOverDate(){
  60. return getGameService().listOverDate()
  61. .map(new SimpleDataHandleFunction<>());
  62. }
  63. public Observable<ControllerMessage<Object>> addScale(
  64. long gamePlayId,
  65. String startDate,
  66. String endDate,
  67. String eventDate,
  68. String contact,
  69. String dinner,
  70. String getUp,
  71. String sleep,
  72. String work
  73. ){
  74. return getGameService().addScale(gamePlayId, startDate, endDate, eventDate, contact, dinner, getUp, sleep, work, getDeviceId())
  75. .map(new SimpleDataHandleFunction<>());
  76. }
  77. public Observable<ControllerMessage<Object>> delayScale(long gamePlayTimeId, int delayMin){
  78. return getGameService().delayScale(gamePlayTimeId, delayMin, getDeviceId())
  79. .map(new SimpleDataHandleFunction<>());
  80. }
  81. public Observable<ControllerMessage<Object>> delayGame(long gamePlayTimeId, long gameConfigId, int delayMin){
  82. return getGameService().delayGame(gamePlayTimeId, gameConfigId, delayMin, getDeviceId())
  83. .map(new SimpleDataHandleFunction<>());
  84. }
  85. public Observable<ControllerMessage<Object>> enterGame(long gamePlayTimeId){
  86. return getGameService().enter(gamePlayTimeId, getDeviceId(), 1)
  87. .map(new SimpleDataHandleFunction<>());
  88. }
  89. public Observable<ControllerMessage<Object>> enterScale(long gamePlayTimeId){
  90. return getGameService().enter(gamePlayTimeId, getDeviceId(), 2)
  91. .map(new SimpleDataHandleFunction<>());
  92. }
  93. public Observable<ControllerMessage<Object>> addAnswer(
  94. long gamePlayId,
  95. Integer[] showNumbers,
  96. List<Integer> mRecordList,
  97. List<Long> mResponseList,
  98. List<Integer> mPressRecordList,
  99. int mSpecialNumberOne,
  100. int mSpecialNumberTwo,
  101. int gameVersion,
  102. long startTime,
  103. long endTime,
  104. int right,
  105. int grasp
  106. ){
  107. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
  108. return getGameService().addGameAnswer(
  109. gamePlayId,
  110. LoginController.getInstance().getCurrentLoginInfo().info.id,
  111. getRealCorrectRate(mRecordList),
  112. right,
  113. grasp,
  114. dateFormat.format(new Date(startTime)),
  115. dateFormat.format(new Date(endTime)),
  116. gameVersion == GameInfo.VERSION_GAME_ONE ? "A" : gameVersion == GameInfo.VERSION_GAME_TWO ? "B" : "C",
  117. gameVersion == GameInfo.VERSION_GAME_TWO ? mSpecialNumberOne + "," + mSpecialNumberTwo : mSpecialNumberOne + "",
  118. getGameAnswer(showNumbers, mRecordList, mResponseList, mPressRecordList),
  119. getDeviceId()).map(new SimpleDataHandleFunction<>());
  120. }
  121. private String getGameAnswer(
  122. Integer[] showNumbers,
  123. List<Integer> mRecordList,
  124. List<Long> mResponseList,
  125. List<Integer> mPressRecordList
  126. ){
  127. List<GameAnswer> result = new ArrayList<>();
  128. for (int i = 0; i < showNumbers.length; i ++){
  129. result.add(new GameAnswer(
  130. mPressRecordList.get(i),
  131. mRecordList.get(i),
  132. mResponseList.get(i),
  133. showNumbers[i]
  134. ));
  135. }
  136. return new Gson().toJson(result);
  137. }
  138. private float getRealCorrectRate(List<Integer> mRecordList){
  139. float right = 0;
  140. for (Integer integer : mRecordList)
  141. if (integer == GameInfo.CLICK_RIGHT)
  142. right++;
  143. return right / mRecordList.size();
  144. }
  145. }