· 4 years ago · Jul 12, 2021, 12:04 PM
1 public function actionSetEventLive($code_api) {
2 Yii::info('Live events setting started', 'integration/betapi');
3 $service = new MainBetapiService();
4 $client = $this->getHttpClient();
5 $event = $this->sendRequest($client, "event/{$code_api}/sub/live/en");
6 if (!empty($event['body'])) {
7 if(!\array_key_exists('game_id', $event['body'])) {
8 Yii::error("event format error, " . json_encode($event['body']));
9 return;
10 }
11 try {
12 $service->eventLive($event['body']);
13 /** @var ApiEventSubGameModel[] $subGames */
14 $subGames = ApiEventSubGameModel::find()->where([
15 //'parent_api_event_id' => $event['body']['uniq'],
16 'parent_api_event_id' => $code_api,
17 //'is_main_provider' => true
18 ])->all();
19 $codeApiSubGames = [];
20 if (!empty($event['body']['sub_games'])) {
21 $codeApiSubGames = ArrayHelper::getColumn($event['body']['sub_games'], 'game_id');
22 }
23 $requests = [];
24 foreach ($subGames as $game) {
25 if(in_array($game->code_api, $codeApiSubGames)) {
26 if($game->is_main_provider == 0) {
27 $game->updateAttributes(['is_main_provider' => 1]);
28 }
29 $key = 'betapi-sub-event-live' . $game['code_api'];
30 if(MutexesHelper::exists($key)) {
31 continue;
32 }
33 MutexesHelper::place($key, 600);
34 $request = $this->buildRequest($client, "event/{$game['code_api']}/sub/live/en");
35 $request->on(Request::EVENT_AFTER_SEND, function(RequestEvent $event) use ($game, $key) {
36 try {
37 if(!$event->response->headers->has('http-code') || !$event->response->getIsOk()) {
38 Yii::error($event->request->getFullUrl() . ' contents: ' . $event->response->getContent(), 'integration/betapiRequestAPI');
39 } else {
40 $response = $event->response->getData();
41 if(!empty($response['body'])) {
42 $service = new MainBetapiService();
43 $service->eventSubGameLive($response['body'], $game);
44 } else {
45 $group = ApiGameMarketsGroupsModel::find()->select('group_id')->where([
46 'sports_id' => $game->sports_id,
47 'code_api' => $game->title,
48 'service_api' => $game->service_api
49 ])->asArray()->one();
50 if(!is_null($group)) {
51 EventOutcomesModel::updateAll(['is_enabled' => 0], [
52 'game_id' => $game->game_id, 'group_id' => $group['group_id'], 'is_enabled' => 1
53 ]);
54 } else {
55 EventOutcomesModel::updateAll(['is_enabled' => 0], [
56 'game_id' => $game->game_id, 'is_enabled' => 1
57 ]);
58 }
59 }
60 }
61 } catch (\Throwable $e) {
62 Yii::error($e, 'integration/betapi');
63 }
64 MutexesHelper::release($key);
65 });
66 $requests[] = $request;
67 } else {
68 if($game->is_main_provider == 1) {
69 $group = ApiGameMarketsGroupsModel::find()->select(['group_id'])->where([
70 'sports_id' => $game->sports_id,
71 'code_api' => $game->title,
72 'service_api' => $game->service_api
73 ])->asArray()->one();
74 // TODO: ???
75 EventOutcomesModel::updateAll(['is_enabled' => 0], [
76 'group_id' => $group['group_id'],
77 'game_id' => $game->game_id,
78 'is_enabled' => 1
79 ]);
80 $game->updateAttributes(['is_main_provider' => 0]);
81 }
82 }
83 }
84 MutexesHelper::release('betapi-event-live' . $event['body']['game_id']);
85 if(count($requests) > 0) {
86 $client->batchSend($requests);
87 //$this->batchSendAsync($requests);
88 }
89 } catch (\Throwable $e) {
90 Yii::error($e, 'integration/betapi');
91 }
92 } else {
93 // Finished game if not exist in API
94 try {
95 $gameApi = $service->findGame(MainBetapiService::SOURCE_BETSAPI, $code_api);
96 if ($gameApi !== null) {
97 $gameEventOutcomes = EventOutcomesModel::find()->andWhere([
98 'game_id' => $gameApi->game_id,
99 'is_hidden' => 0
100 ])->all();
101 if(count($gameEventOutcomes) > 0) {
102 EventOutcomesModel::updateAll(['is_hidden' => 1], [
103 'game_id' => $gameApi->game_id,
104 'is_hidden' => 0
105 ]);
106 foreach($gameEventOutcomes as $eventOutcomes){
107 $eventOutcomes->sendUpdatedParams(['is_hidden' => 1]);
108 }
109 }
110 }
111 } catch (\Throwable $e) {
112 Yii::error($e, 'integration/betapi');
113 }
114 }
115