- BDD (migrations 1.6.0 + 1.7.0, idempotentes) :
* 4 nouveaux index composites sur reactevents, triggerevents, sessions
* vue sessiondebriefs reecrite (sous-requetes correlees -> JOINs)
puis materialisee dans table session_debriefs_cache via procedure
stockee rebuild_debrief_cache, recalculee uniquement aux changements
* fix bug double JOIN participates : TargetRole = "IA" pour les hits
NPC/objets (au lieu d'un role aleatoire de participant)
- API PHP :
* connexion PDO en singleton + ATTR_PERSISTENT
* cache disque par session (cache/sess_<id>/) pour debrief, get, userhistory
avec invalidation ciblee sur events et lifecycle
* pagination opt-in (limit/offset) sur lists/sessions_for_user
* helpers ensure_/rebuild_/invalidate_session_debrief_cache_db
* debug/benchmark.php pour mesurer la latence des 6 endpoints cles
- Endpoints HTTP : signatures inchangees, compat Unreal preservee
- Gain mesure : -58% a -83% sur les 5 endpoints cles
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
49 lines
1.8 KiB
PHP
49 lines
1.8 KiB
PHP
<?php
|
|
// include database and object files
|
|
include_once '../config/init.php'; // contains $db
|
|
include_once '../config/error.php';
|
|
include_once '../objects/db_reactevent.php';
|
|
|
|
// prepare user object
|
|
$event = new ReactEvent($db);
|
|
|
|
// read mandatory $_POST properties
|
|
// ensure sessionId, trigger index and event type are passed in $_POST parameters
|
|
if (isset($_POST['srcEventIndex']) && $_POST['srcEventIndex'] >= 0)
|
|
$event->srcEventIndex = $_POST['srcEventIndex'];
|
|
else trigger_error( missing_parameter_error("srcEventIndex") );
|
|
|
|
if (isset($_POST['srcEventSessionId']) && $_POST['srcEventSessionId'] > 0)
|
|
$event->srcEventSessionId = $_POST['srcEventSessionId'];
|
|
else trigger_error( missing_parameter_error("srcEventSessionId") );
|
|
|
|
if (isset($_POST['type']))
|
|
$event->reactType = $_POST['type'];
|
|
else trigger_error( missing_parameter_error("type") );
|
|
|
|
|
|
// read other $_POST properties
|
|
$event->hitUserId = $_POST['hitUserId'];
|
|
$event->hitTargetName = $_POST['targetName'];
|
|
$event->hitBoneName = $_POST['boneName'];
|
|
$event->damage = $_POST['damage'];
|
|
$event->targetKilled = (strcasecmp( ($_POST['targetKilled'] ?? false), "true" ) == 0) ? 1 : 0;
|
|
$event->objectHitLocationX = $_POST['objectHitLocationX'];
|
|
$event->objectHitLocationY = $_POST['objectHitLocationY'];
|
|
$event->objectHitTagLocation = $_POST['objectHitTagLocation'];
|
|
$event->hitPrecision = $_POST['hitPrecision'];
|
|
$event->distance = $_POST['distance'];
|
|
$event->reactTime = $_POST['reactTime'];
|
|
$event->reactMode = $_POST['reactMode'];
|
|
$event->timeStamp = $_POST['timestamp'];
|
|
|
|
// create reactevent
|
|
if ($event->record())
|
|
{
|
|
cache_invalidate_session($event->srcEventSessionId);
|
|
invalidate_session_debrief_cache_db($db, $event->srcEventSessionId);
|
|
$evt_arr = $event->getResultArray(true, "Event_Stored_OK");
|
|
print_r(json_encode($evt_arr)); // OK
|
|
}
|
|
else trigger_error("Error_Occured");
|
|
?>
|