Route all remaining fill paths through the shared atomic queue
Completes the overfill-race fix (item #1). New queue.php functions, all under the same GET_LOCK + transaction and self-healing numplayers: - pqs_add_player_to_mission (staff 'new' -> registration.php) - pqs_add_player_to_missions (staff 'add to N missions' -> registration.php) - pqs_enqueue_group (kiosk group leader -> callsign.php) - pqs_claim_group_slot (kiosk group member -> callsign.php) callsign.php and registration.php now call these instead of their own non-atomic read-check-insert blocks. Verified on the local stack: scenario test (leader/member/staff paths) and 120 mixed concurrent solo+group writers x3 -> zero overfill, zero drift; HTTP smoke of leader/member/new paths all seat correctly. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+15
-58
@@ -86,67 +86,24 @@ if (isset($_POST['edit'])) {
|
||||
}
|
||||
|
||||
if (isset($_POST['add'])) {
|
||||
if (isset($_POST['playerid'])) $playerid = $_POST['playerid'];
|
||||
if (isset($_POST['callsign'])) $callsign = str_replace("'", "'", $_POST['callsign']);
|
||||
if (isset($_POST['missionid'])) $missionid = $_POST['missionid'];
|
||||
if (isset($_POST['merc'])) $merc = $_POST['merc'];
|
||||
if (isset($_POST['mech'])) $mech = $_POST['mech'];
|
||||
if (isset($_POST['nummissions'])) $nummissions = $_POST['nummissions'];
|
||||
|
||||
$link = mysqli_connect('localhost', 'pqs', 'pqs') or die('Could not connect: ' . mysqli_error($link));
|
||||
mysqli_select_db($link, 'pqs') or die('Could not select database');
|
||||
|
||||
$sql = "SELECT MAX(MissionID) FROM pqs_mission";
|
||||
$result = mysqli_query($link, $sql) or die('Update player in Queue failed: ' . mysqli_error($link));
|
||||
$rs = mysqli_fetch_array($result);
|
||||
$maxmission = $rs[0];
|
||||
$newmissionid = $missionid + 1;
|
||||
|
||||
for ($i = 1; $i <= $nummissions;) {
|
||||
if ($newmissionid <= $maxmission) {
|
||||
$sql = "SELECT numplayers FROM pqs_mission WHERE MissionID = $newmissionid";
|
||||
$result = mysqli_query($link, $sql) or die('Update player in Queue failed: ' . mysqli_error($link));
|
||||
$rs = mysqli_fetch_array($result);
|
||||
if ($rs[0] < $missionsize) {
|
||||
$sql = "UPDATE pqs_mission SET numplayers = numplayers + 1 WHERE MissionID = $newmissionid";
|
||||
$result = mysqli_query($link, $sql) or die('Update player in Queue failed: ' . mysqli_error($link));
|
||||
$sql = "INSERT INTO pqs_queue (CallSign, Mech, MissionID, Merc) VALUES ('$callsign', '$mech', $newmissionid, $merc)";
|
||||
$result = mysqli_query($link, $sql) or die('Update player in Queue failed: ' . mysqli_error($link));
|
||||
$i++;
|
||||
}
|
||||
} else {
|
||||
$sql = "INSERT INTO pqs_mission (MissionDate, MissionSize, numplayers, nummercs, MissionTime) VALUES ($tdate, $missionsize, 1, $merc, $ttime)";
|
||||
mysqli_query($link, $sql) or die('Query failed: ' . mysqli_error($link));
|
||||
$sql = "INSERT INTO pqs_queue (CallSign, Mech, MissionID, Merc) VALUES ('$callsign', '$mech', $newmissionid, $merc)";
|
||||
$result = mysqli_query($link, $sql) or die('Update player in Queue failed: ' . mysqli_error($link));
|
||||
$i++;
|
||||
}
|
||||
$newmissionid++;
|
||||
}
|
||||
mysqli_close($link);
|
||||
// Add one player to the next N missions after $missionid (atomic).
|
||||
require_once("includes/queue.php");
|
||||
$callsign = isset($_POST['callsign']) ? $_POST['callsign'] : '';
|
||||
$mech = isset($_POST['mech']) ? $_POST['mech'] : '';
|
||||
$merc = isset($_POST['merc']) ? (int)$_POST['merc'] : 0;
|
||||
$startmission = isset($_POST['missionid']) ? (int)$_POST['missionid'] : 0;
|
||||
$nummissions = isset($_POST['nummissions']) ? (int)$_POST['nummissions'] : 0;
|
||||
pqs_add_player_to_missions($startmission, $nummissions, $callsign, $mech, $merc);
|
||||
}
|
||||
|
||||
if (isset($_POST['new'])) {
|
||||
if (isset($_POST['callsign'])) $callsign = str_replace("'", "''", $_POST['callsign']);
|
||||
if(is_null($callsign)){ $callsign = 'empty'; }
|
||||
if (isset($_POST['mech'])) $mech = $_POST['mech'];
|
||||
if (isset($_POST['missionid'])) $missionid = $_POST['missionid'];
|
||||
|
||||
$link = mysqli_connect('localhost', 'pqs', 'pqs') or die('Could not connect: ' . mysqli_error($link));
|
||||
mysqli_select_db($link, 'pqs') or die('Could not select database');
|
||||
|
||||
$sql = "SELECT numplayers FROM pqs_mission WHERE MissionID = '$missionid'";
|
||||
$getid = mysqli_query($link, $sql) or die('Query failed: ' . mysqli_error($link));
|
||||
$rs = mysqli_fetch_array($getid);
|
||||
$numplayers = $rs[0];
|
||||
$newplayers = $numplayers+1;
|
||||
$sql = "UPDATE pqs_mission SET numplayers='$newplayers' WHERE MissionID=$missionid";
|
||||
mysqli_query($link, $sql) or die('Update player in Queue failed: ' . mysqli_error($link));
|
||||
|
||||
$sql = "INSERT INTO pqs_queue (callsign, mech, missionid) VALUES ('$callsign','$mech',$missionid)";
|
||||
mysqli_query($link, $sql) or die('Update player in Queue failed: ' . mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
// Add one player to a specific mission (atomic).
|
||||
require_once("includes/queue.php");
|
||||
$callsign = isset($_POST['callsign']) ? $_POST['callsign'] : '';
|
||||
if ($callsign === '') { $callsign = 'empty'; }
|
||||
$mech = isset($_POST['mech']) ? $_POST['mech'] : '';
|
||||
$missionid = isset($_POST['missionid']) ? (int)$_POST['missionid'] : 0;
|
||||
pqs_add_player_to_mission($missionid, $callsign, $mech);
|
||||
}
|
||||
|
||||
if (isset($_POST['editgame'])) {
|
||||
|
||||
Reference in New Issue
Block a user