/yii/ProjectHttpTrait2.php

https://github.com/a07061625/swooleyaf · PHP · 207 lines · 174 code · 20 blank · 13 comment · 6 complexity · 5ffb80ab6ea0fe08dbbe1865fecb791a MD5 · raw file

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: 姜伟
  5. * Date: 18-5-27
  6. * Time: 上午10:10
  7. */
  8. namespace SyTrait\Server;
  9. use DesignPatterns\Factories\CacheSimpleFactory;
  10. use ProjectTask\DataFeed\GoodsTreatComplete;
  11. use ProjectTask\DataFeed\GoodsTreatStart;
  12. use ProjectTask\Mail\PlanPreTreatComplete;
  13. use ProjectTask\Mail\PlanPreTreatStart;
  14. use ProjectTask\Mail\PlanTreatComplete;
  15. use ProjectTask\Mail\PlanTreatStart;
  16. use ProjectTask\Mail\TplTreatComplete;
  17. use ProjectTask\Mail\TplTreatStart;
  18. use Swoole\Http\Request;
  19. use Swoole\Http\Response;
  20. use Swoole\Server;
  21. use SyConstant\Project;
  22. use SyLog\Log;
  23. use SyResponse\Result;
  24. use SyTool\SyPack;
  25. use SyTool\Tool;
  26. trait ProjectHttpTrait2
  27. {
  28. private function checkServerHttpTrait()
  29. {
  30. ini_set('session.save_handler', 'redis');
  31. ini_set('session.save_path', 'tcp://127.0.0.1:6379');
  32. ini_set('session.cookie_domain', SY_COOKIE_DOMAIN);
  33. }
  34. private function initTableHttpTrait()
  35. {
  36. }
  37. private function addTaskHttpTrait(Server $server)
  38. {
  39. $this->_messagePack->setCommandAndData(SyPack::COMMAND_TYPE_SOCKET_CLIENT_SEND_TASK_REQ, [
  40. 'task_module' => SY_MODULE,
  41. 'task_command' => Project::TASK_TYPE_MAIL_PLAN,
  42. 'task_params' => [],
  43. ]);
  44. $taskData1 = $this->_messagePack->packData();
  45. $this->_messagePack->init();
  46. $server->tick(Project::TIME_TASK_MAIL_PLAN, function () use ($server, $taskData1) {
  47. $server->task($taskData1);
  48. });
  49. $this->_messagePack->setCommandAndData(SyPack::COMMAND_TYPE_SOCKET_CLIENT_SEND_TASK_REQ, [
  50. 'task_module' => SY_MODULE,
  51. 'task_command' => Project::TASK_TYPE_DATA_FEED,
  52. 'task_params' => [],
  53. ]);
  54. $taskData2 = $this->_messagePack->packData();
  55. $this->_messagePack->init();
  56. $server->tick(Project::TIME_TASK_DATA_FEED, function () use ($server, $taskData2) {
  57. $server->task($taskData2);
  58. });
  59. $this->_messagePack->setCommandAndData(SyPack::COMMAND_TYPE_SOCKET_CLIENT_SEND_TASK_REQ, [
  60. 'task_module' => SY_MODULE,
  61. 'task_command' => Project::TASK_TYPE_MAIL_TPL_TASK,
  62. 'task_params' => [],
  63. ]);
  64. $taskData3 = $this->_messagePack->packData();
  65. $this->_messagePack->init();
  66. $server->tick(Project::TIME_TASK_MAIL_TPL_TASK, function () use ($server, $taskData3) {
  67. $server->task($taskData3);
  68. });
  69. }
  70. private function getTokenExpireTime() : int
  71. {
  72. $decryptStr = Tool::decrypt(SY_TOKEN_SECRET, 'f68a600f6c1b1163');
  73. if (is_bool($decryptStr)) {
  74. return 0;
  75. } elseif (substr($decryptStr, 0, 8) != SY_TOKEN) {
  76. return 0;
  77. }
  78. return (int)substr($decryptStr, 8);
  79. }
  80. /**
  81. * @param \Swoole\Server $server
  82. * @param int $taskId
  83. * @param int $fromId
  84. * @param array $data
  85. * @return string 空字符串:执行成功 非空:执行失败
  86. */
  87. private function handleTaskHttpTrait(Server $server, int $taskId, int $fromId, array &$data) : string
  88. {
  89. $taskCommand = Tool::getArrayVal($data['params'], 'task_command', '');
  90. switch ($taskCommand) {
  91. case Project::TASK_TYPE_REFRESH_TOKEN_EXPIRE:
  92. self::$_syServer->set(self::$_serverToken, [
  93. 'token_etime' => $this->getTokenExpireTime(),
  94. ]);
  95. break;
  96. case Project::TASK_TYPE_MAIL_PLAN:
  97. $redisKey = Project::REDIS_PREFIX_TASK_MAIL . '1';
  98. $cacheData = CacheSimpleFactory::getRedisInstance()->get($redisKey);
  99. if (is_bool($cacheData)) {
  100. CacheSimpleFactory::getRedisInstance()->set($redisKey, '1', 360);
  101. try {
  102. PlanPreTreatStart::handleTask($data['params']['task_params']);
  103. } catch (\Exception $e) {
  104. Log::error($e->getMessage());
  105. }
  106. try {
  107. PlanPreTreatComplete::handleTask($data['params']['task_params']);
  108. } catch (\Exception $e) {
  109. Log::error($e->getMessage());
  110. }
  111. try {
  112. PlanTreatStart::handleTask($data['params']['task_params']);
  113. } catch (\Exception $e) {
  114. Log::error($e->getMessage());
  115. }
  116. try {
  117. PlanTreatComplete::handleTask($data['params']['task_params']);
  118. } catch (\Exception $e) {
  119. Log::error($e->getMessage());
  120. }
  121. CacheSimpleFactory::getRedisInstance()->del($redisKey);
  122. }
  123. break;
  124. case Project::TASK_TYPE_DATA_FEED:
  125. $redisKey = Project::REDIS_PREFIX_TASK_DATA_FEED . '1';
  126. $cacheData = CacheSimpleFactory::getRedisInstance()->get($redisKey);
  127. if (is_bool($cacheData)) {
  128. CacheSimpleFactory::getRedisInstance()->set($redisKey, '1', 360);
  129. try {
  130. GoodsTreatStart::handleTask($data['params']['task_params']);
  131. } catch (\Exception $e) {
  132. Log::error($e->getMessage());
  133. }
  134. try {
  135. GoodsTreatComplete::handleTask($data['params']['task_params']);
  136. } catch (\Exception $e) {
  137. Log::error($e->getMessage());
  138. }
  139. CacheSimpleFactory::getRedisInstance()->del($redisKey);
  140. }
  141. break;
  142. case Project::TASK_TYPE_MAIL_TPL_TASK:
  143. $redisKey = Project::REDIS_PREFIX_TASK_MAIL_TPL_TASK . '1';
  144. $cacheData = CacheSimpleFactory::getRedisInstance()->get($redisKey);
  145. if (is_bool($cacheData)) {
  146. CacheSimpleFactory::getRedisInstance()->set($redisKey, '1', 360);
  147. try {
  148. TplTreatStart::handleTask($data['params']['task_params']);
  149. } catch (\Exception $e) {
  150. Log::error($e->getMessage());
  151. }
  152. try {
  153. TplTreatComplete::handleTask($data['params']['task_params']);
  154. } catch (\Exception $e) {
  155. Log::error($e->getMessage());
  156. }
  157. CacheSimpleFactory::getRedisInstance()->del($redisKey);
  158. }
  159. break;
  160. default:
  161. $result = new Result();
  162. $result->setData([
  163. 'result' => 'fail',
  164. ]);
  165. return $result->getJson();
  166. }
  167. return '';
  168. }
  169. private function handleReqExceptionByProject(\Exception $e) : Result
  170. {
  171. }
  172. private function initYiiReq(Request $request, Response $response)
  173. {
  174. $this->_app->request->setSwRequest($request);
  175. $this->_app->response->setSwResponse($response);
  176. $this->_app->request->getHeaders()->removeAll();
  177. $this->_app->response->clear();
  178. foreach ($request->header as $name => $value) {
  179. $this->_app->request->getHeaders()->set($name, $value);
  180. }
  181. $this->_app->request->setQueryParams($_GET);
  182. $this->_app->request->setBodyParams($_POST);
  183. $rawContent = $request->rawContent() ?? null;
  184. $this->_app->request->setRawBody($rawContent);
  185. $this->_app->request->setPathInfo($request->server['path_info']);
  186. }
  187. }