| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2019/6/26
- * Time: 12:03
- */
- namespace datainf\logic;
- use App\Lib\ModelBase;
- use App\Http\Response\Response;
- use App\Logic\WinfailLogic;
- use Illuminate\Database\Capsule\Manager as DB;
- class HttpServerSettelement
- {
- private $httpserver;
- private $config;
- public function __construct($config)
- {
- $this->httpserver = new \swoole\http\server($config['host'], $config['port']);
- $this->httpserver->set($config['sets']);
- $this->config = $config;
- $taskWorkingNum = new \swoole\Atomic();
- $this->httpserver->taskWorkingNum = $taskWorkingNum;
- $this->httpserver->on('request', array($this, 'OnRequest'));
- $this->httpserver->on('WorkerStart', array($this, 'onWorkerStart'));
- $this->httpserver->on('task', array($this, 'onTask'));
- $this->httpserver->on('finish', array($this, 'onFinish'));
- }
- public function onWorkerStart($serv, $worker_id)
- {
- $name = $serv->taskworker ? 'Task_' : 'Worker_';
- $name = 'Settelement_' . $name . ($serv->worker_id < 10 ? '0' . $serv->worker_id : $serv->worker_id);
- swoole_set_process_name($name);
- $GLOBALS['model'] = '';
- $GLOBALS['modeltime'] = 0;
- if (!$serv->taskworker) {
- $this->InitDb();
- }
- }
- public function OnRequest($request, $response)
- {
- $response->header('Content-Type', 'text/html; charset=utf-8');
- $response->header('Server', 'DataInfaceServer');
- $paras = array_merge(['request_time' => date("H:i:s")], !empty($request->get) ? $request->get : [], !empty($request->post) ? $request->post : []);
- $request_uri = substr($request->server['request_uri'], 1);
- $urls = ['WinFail', 'SettelementAll', 'SettelementSome'];
- if (!in_array($request_uri, $urls)) {
- $data = Response::generate('', 0, '', '无效的url');
- $response->end($data);
- return;
- }
- if ($this->httpserver->taskWorkingNum->get()) {
- $data = Response::generate('', 9, '', '还有未完成任务请稍等...');
- $response->end($data);
- return;
- }
- if ($request_uri == 'WinFail') {
- return $this->doWinFailse($request, $response, $paras);
- }
- if ($request_uri == 'SettelementSome') {
- return $this->doSettelementSome($request, $response, $paras);
- }
- if ($request_uri == 'SettelementAll') {
- return $this->doSettelementSome($request, $response, $paras);
- }
- return;
- }
- public function onTask($serv, $task)
- {
- $this->httpserver->taskWorkingNum->add();
- if ($task['type'] == 'doWinFailse') {
- $this->Task_winfalse($serv, $task);
- }
- $this->httpserver->taskWorkingNum->sub();
- }
- //胜负计算
- private function doWinFailse($request, $response, $paras)
- {
- $logic_obj = new WinfailLogic();
- $id = intval($paras['noticeid']);
- try {
- $noticeModel = $logic_obj->getNoticeDate($id);
- $AdapterObj = $logic_obj->getAdapterObj($noticeModel->game_code);
- $result = $logic_obj->getCompResult($noticeModel->game_code, $noticeModel->match_id);
- $moneySimples = $logic_obj->getSimplexData($noticeModel->game_code, $noticeModel->match_id);
- $matchs_1 = $logic_obj->getMatchRecords($noticeModel->game_code, $noticeModel->match_id, 1);
- $matchs_2 = $logic_obj->getMatchRecords($noticeModel->game_code, $noticeModel->match_id, 2);
- $RefClass = new \ReflectionClass($AdapterObj);
- if (!empty($matchs_1)) {
- while (true) {
- if ($this->httpserver->taskWorkingNum->get() > intval($this->config['sets']['task_worker_num'])) {
- co::sleep(100);
- } else {
- $now = array_shift($matchs_1);
- $paras = ['type' => 'doWinFailse', 'stype' => 1, 'matchModel' => $now, 'RefClass' => $RefClass, 'result' => $result, 'moneySimple' => $moneySimples[$now->batch_id][$now->match_id]];
- $this->onTask($this->httpserver, $paras);
- }
- }
- }
- if (!empty($matchs_2)) {
- while (true) {
- if ($this->httpserver->taskWorkingNum->get() > intval($this->config['sets']['task_worker_num'])) {
- co::sleep(100);
- } else {
- $now = array_shift($matchs_2);
- $paras = ['type' => 'doWinFailse', 'stype' => 1, 'matchModel' => $now, 'RefClass' => $RefClass, 'result' => $result, 'moneySimple' => $moneySimples[$now->batch_id][$now->match_id]];
- $this->onTask($this->httpserver, $paras);
- }
- }
- }
- unset($logic_obj, $noticeModel, $AdapterObj, $result, $moneySimples, $matchs_1, $matchs_2, $RefClass);
- } catch (\Exception $e) {
- unset($logic_obj);
- $data = Response::generate('', 10, '', $e->getMessage());
- $response->end($data);
- }
- return;
- }
- //部分结算
- private function doSettelementSome($request, $response, $paras)
- {
- }
- //全部结算
- private function doSettelementAll($request, $response, $paras)
- {
- }
- /////
- private function Task_winfalse($serv, $task)
- {
- echo "IN Task_winfalse".print_r([$task])."\n";
- }
- public function onFinish($serv, int $task_id, $data)
- {
- }
- private function InitDb()
- {
- $over_time = 60 * 5;
- $now = microtime(true);
- if (!$GLOBALS['modeltime']) {
- $GLOBALS['modeltime'] = $now;
- $GLOBALS['model'] = $this->httpserver->worker_id;
- ModelBase::init();
- return;
- }
- if (($now - $GLOBALS['modeltime']) > $over_time) {
- $GLOBALS['modeltime'] = $now;
- $GLOBALS['model'] = $this->httpserver->worker_id;
- ModelBase::close();
- ModelBase::init();
- return;
- }
- }
- public function start()
- {
- $this->httpserver->start();
- }
- }
|