TestServer.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <?php
  2. namespace loyalsoft;
  3. include_once __DIR__ . '/AppServer.php';
  4. require_once __DIR__ . '/../process/ActiveProc/CipheredBase32.php'; # 算法库
  5. /**
  6. * Description of TestServer
  7. * UT 测试
  8. * 约定: 底划线开头的函数为私有函数,不会在黑窗界面出现.
  9. */
  10. class TestServer {
  11. /**
  12. * 入口函数专用测试
  13. * @param type $req
  14. */
  15. static public function testApi($req) {
  16. DebugHelper::debug($req);
  17. $app = new AppServer();
  18. new Req($req);
  19. $ret = $app->api();
  20. DebugHelper::debug($ret);
  21. }
  22. /**
  23. * 运行环境自检:
  24. * PHP 版本,扩展模块
  25. * redis操作性
  26. * sqldb操作性
  27. */
  28. static function selfTest() {
  29. echoLine("phpver: " . PHP_VERSION . PHP_EOL); # 打印下PHP版本
  30. SelfChecker::CheckConfig(); # 进行配置环境检测
  31. }
  32. //----------------------------------------------------
  33. /**
  34. * 给玩家发邮件
  35. * @param type $uid
  36. * @param type $zoneid
  37. * @param type $items
  38. * @param type $ctx
  39. */
  40. public static function sendUserEmail($uid, $zoneid, $title, $reward, $ctx) {
  41. $mail = new Ins_Email(null, 1, $title, #
  42. $ctx, $reward);
  43. $list = explode(',', $uid);
  44. if (count($list) != 0) {
  45. foreach ($list as $userId) {
  46. EmailProc::InsertMail($zoneid, $userId, $mail);
  47. }
  48. }
  49. echo '邮件已经成功发送';
  50. }
  51. private static function GetUserDataKeys($uid, $zoneid) {
  52. $list = array();
  53. $zoneKey = MemKey_User::Union_PlayedZoneInfo_normal($uid); # 分区信息
  54. $list[] = $zoneKey;
  55. $publicKey = MemKey_User::Union_PublicState_hash($uid); # 公共信息
  56. $list[] = $publicKey;
  57. $gameInfoKey = MemKey_User::Info_hash($zoneid, $uid); # 游戏数据主体
  58. $list[] = $gameInfoKey;
  59. $interactKey = MemKey_User::Interact($zoneid, $uid); # 交互字段
  60. $list[] = $interactKey;
  61. $OffensiveLogKey = MemKey_User::OffensiveLog_zset($zoneid, $uid); # 主动挑战记录
  62. $list[] = $OffensiveLogKey;
  63. $DefensiveLogKey = MemKey_User::DefensiveLog_zset($zoneid, $uid); # 被动挑战记录
  64. $list[] = $DefensiveLogKey;
  65. $PVP_OffensiveLogKey = MemKey_User::PVP_OffensiveLog_zset($zoneid, $uid); # 竞技场主动挑战记录
  66. $list[] = $PVP_OffensiveLogKey;
  67. $PVP_DefensiveLogKey = MemKey_User::PVP_DefensiveLog_zset($zoneid, $uid); # 竞技场被动挑战记录
  68. $list[] = $PVP_DefensiveLogKey;
  69. $SigKey = MemKey_User::Sig($zoneid, $uid); # 玩家证书
  70. $list[] = $SigKey;
  71. $CurIdKey = MemKey_User::Mail_CurId_int($zoneid, $uid); # 当前邮件编号
  72. $list[] = $CurIdKey;
  73. $SysRecordKey = MemKey_User::Mail_SysRecord_set($zoneid, $uid); # 当前已经领取过的系统邮件记录
  74. $list[] = $SysRecordKey;
  75. $QueueKey = MemKey_User::Mail_Queue_hash($zoneid, $uid); # 邮件列表
  76. $list[] = $QueueKey;
  77. return $list;
  78. }
  79. /**
  80. * 删除账号-区别内外网
  81. * @param type $uid
  82. * @param type $zoneid
  83. */
  84. static public function deleteUserUId($uid, $zoneid) {
  85. $mem = gMem();
  86. $list = self::GetUserDataKeys($uid, $zoneid); # 玩家数据key
  87. foreach ($list as $key) {
  88. if ($mem->exists($key)) {
  89. $mem->delete($key);
  90. }
  91. }
  92. // <editor-fold defaultstate="collapsed" desc="清理mongodb中的数据">
  93. self::deleteUserMapData($uid, $zoneid);
  94. // </editor-fold>
  95. echo '删除账号成功';
  96. }
  97. /**
  98. * 删除账号-区别内外网
  99. * @param type $uid
  100. * @param type $type
  101. */
  102. static public function deleteUserMapData($uid, $zoneid) {
  103. if (gMongo()->delete("playerMapInfo", array('Uid' => $uid, 'ZoneId' => intval($zoneid)))) { # 地图
  104. echoLine("地图数据删除成功");
  105. } else {
  106. echoLine("请单独检查一下地图数据是否已删除.");
  107. }
  108. if (gMongo()->delete("PlayerInfo", array('Uid' => $uid, 'ZoneId' => intval($zoneid)))) { # 地图
  109. echoLine("Player数据删除成功");
  110. } else {
  111. echoLine("请单独检查一下Player数据是否已删除.");
  112. }
  113. if (gMongo()->delete("userInfoBack", array('key' => MemKey_User::Info_hash($zoneid, $uid))) > 0) { # 游戏数据备份
  114. echoLine("玩家info备份数据删除成功");
  115. }
  116. }
  117. /**
  118. * 跳过当前任务步骤
  119. * @param type $uid
  120. * @param type $zoneid
  121. * @param type $curNum
  122. */
  123. static public function JumpCurTaskStep($uid, $zoneid, $curNum) {
  124. $userRedisKey = MemKey_User::Info_hash($zoneid, $uid);
  125. $privateState = gMem()->hget($userRedisKey, 'privateState');
  126. $store = gMem()->hget($userRedisKey, 'store');
  127. $k = 1;
  128. $curMainTaskUId = $privateState->taskCardTracing->$k;
  129. if (StlUtil::dictHasProperty($store->taskcards, $curMainTaskUId)) {
  130. $curSteps = $store->taskcards->$curMainTaskUId->curSteps;
  131. $n = count($curSteps);
  132. $index = 0;
  133. foreach ($curSteps as &$val) {
  134. $index += 1;
  135. if ($index == $n) {
  136. $val->cur = $curNum;
  137. }
  138. }
  139. $store->taskcards->$curMainTaskUId->curSteps = $curSteps;
  140. gMem()->hset($userRedisKey, 'store', $store);
  141. echoLine("修改成功");
  142. } else {
  143. echoLine("不存在这个任务信息");
  144. }
  145. }
  146. /**
  147. * 将当前任务改成一个新的任务
  148. * @param type $uid
  149. * @param type $zoneid
  150. * @param type $taskId
  151. */
  152. static public function SetNewTask($uid, $zoneid, $taskId) {
  153. $userRedisKey = MemKey_User::Info_hash($zoneid, $uid);
  154. $privateState = gMem()->hget($userRedisKey, 'privateState');
  155. $store = gMem()->hget($userRedisKey, 'store');
  156. $k = 1;
  157. $curMainTaskUId = $privateState->taskCardTracing->$k;
  158. $task = new Ins_TaskCard($taskId);
  159. $task->uid = $curMainTaskUId;
  160. $task->state = 2;
  161. $store->taskcards->$curMainTaskUId = $task;
  162. gMem()->hset($userRedisKey, 'store', $store);
  163. echoLine("修改成功");
  164. }
  165. private static function MemOnline() {
  166. static $cmem = null;
  167. if ($cmem == null) {
  168. $nosql = config::Inst()->nosql;
  169. $cmem = new CRedisUtil();
  170. $cmem->conn($nosql->host, $nosql->port, $nosql->pwd, 0);
  171. }
  172. return $cmem;
  173. }
  174. private static function MemDev() {
  175. static $cmem = null;
  176. if ($cmem == null) {
  177. $nosql = config::Inst()->nosql;
  178. $cmem = new CRedisUtil();
  179. $cmem->conn($nosql->host, $nosql->port, $nosql->pwd, 2);
  180. }
  181. return $cmem;
  182. }
  183. /**
  184. * 临时方法: 从online复制数据到dev,覆盖
  185. * @param type $uid
  186. * @param type $zoneid
  187. */
  188. public static function tempCopyDataFromOnlineToDev($uid, $zoneid) {
  189. $devMem = self::MemDev();
  190. $onlineMem = self::MemOnline();
  191. // $zoneKey = MemKey_User::Union_PlayedZoneInfo_normal($uid); # 分区信息
  192. // $zoneInfo = $onlineMem->get($zoneKey);
  193. // $devMem->set($zoneKey, $zoneInfo);
  194. // $publicKey = MemKey_User::Union_PublicState_hash($uid); # 公共信息
  195. // $pubs = $onlineMem->hgetall($publicKey);
  196. // $devMem->hmset($publicKey, $pubs);
  197. $gameInfoKey = MemKey_User::Info_hash($zoneid, $uid); # 游戏数据主体
  198. $userInfo = $onlineMem->hgetall($gameInfoKey);
  199. $obj = new Data_UserGame($userInfo);
  200. $devMem->delete($gameInfoKey);
  201. $devMem->hmset_Cas($gameInfoKey, $obj);
  202. // <editor-fold defaultstate="collapsed" desc="清理mongodb中的数据">
  203. self::deleteUserMapData($uid, $zoneid);
  204. // </editor-fold>
  205. echo '账号主体数据已覆盖';
  206. }
  207. }