the browser-facing portion of osu!
at master 53 lines 1.7 kB view raw
1<?php 2 3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 4// See the LICENCE file in the repository root for full licence text. 5 6namespace App\Providers; 7 8use App\Libraries\TransactionStateManager; 9use Event; 10use Illuminate\Database\Events\TransactionBeginning; 11use Illuminate\Database\Events\TransactionCommitted; 12use Illuminate\Database\Events\TransactionRolledBack; 13use Illuminate\Support\ServiceProvider; 14 15class TransactionStateServiceProvider extends ServiceProvider 16{ 17 /** 18 * Bootstrap the application services. 19 * 20 * @return void 21 */ 22 public function boot() 23 { 24 Event::listen(TransactionBeginning::class, function ($event) { 25 resolve(TransactionStateManager::class)->begin($event->connection); 26 }); 27 28 Event::listen(TransactionCommitted::class, function ($_event) { 29 resolve(TransactionStateManager::class)->commit(); 30 }); 31 32 Event::listen(TransactionRolledBack::class, function ($_event) { 33 resolve(TransactionStateManager::class)->rollback(); 34 }); 35 } 36 37 /** 38 * Register the application services. 39 * 40 * @return void 41 */ 42 public function register() 43 { 44 // Connection after commit tracker. 45 46 // Laravel uses a singleton DatabaseManager that reuses connections 47 // by name, so a singleton for tracking should be good enough. 48 // The alternative is to override Connection and its subclasses. 49 $this->app->singleton(TransactionStateManager::class, function ($app) { 50 return new TransactionStateManager(); 51 }); 52 } 53}