new API and rematch WIP
This commit is contained in:
@@ -14,6 +14,8 @@ public class GameManager : NetworkBehaviour
|
||||
public static Team MyTeam { get; set; }
|
||||
public static MatchmadePlayer RedPlayer { get; set; }
|
||||
public static MatchmadePlayer BluePlayer { get; set; }
|
||||
/// <summary>Coin units from matchmaker <c>rc_prize</c>; used for in-game prize UI.</summary>
|
||||
public static int MatchRcPrizeCoins { get; set; }
|
||||
/// <summary>Set by dedicated server startup (e.g. CupidConnector parsing <c>-matchId</c>). PATCH is skipped if id ≤ 0 or secret is empty.</summary>
|
||||
public static int DedicatedMatchId { get; private set; }
|
||||
/// <summary>Sent as <c>X-Dedicated-Server-Secret</c>. From <c>-dedicatedSecret</c> arg or <c>DEDICATED_SERVER_SECRET</c> env.</summary>
|
||||
@@ -257,7 +259,7 @@ public class GameManager : NetworkBehaviour
|
||||
using (var req = DedicatedMatschInternalApi.BuildWinnerRequest(baseUrl, matchId, secret, jsonBody))
|
||||
{
|
||||
yield return req.SendWebRequest();
|
||||
DedicatedMatschInternalApi.LogIfFailed(req);
|
||||
DedicatedMatschInternalApi.LogWinnerPatchResult(req);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -688,7 +690,7 @@ public class GameManager : NetworkBehaviour
|
||||
yield return new WaitForSeconds(2f);
|
||||
yield return CoroutineFetchBothPlayersL10();
|
||||
|
||||
StopClient();
|
||||
// StopClient();
|
||||
|
||||
LevelLoadManager.instance.SetupGameOver(team,redScore,blueScore);
|
||||
GameOverCanvas.instance.Show(team, MyTeam, redScore, blueScore);
|
||||
@@ -810,6 +812,9 @@ public class GameManager : NetworkBehaviour
|
||||
freezeInput=false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>Headless dedicated server → matchmaker internal PATCH. Runs only where started (server-side coroutines).</summary>
|
||||
@@ -850,4 +855,54 @@ static class DedicatedMatschInternalApi
|
||||
Logger.Log("More details : " + req.url + " " + req.method + " " + req.uploadHandler.data + " " + req.downloadHandler.text);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Handles <c>PATCH /internal/match/:id/winner</c>: 200 parses economy; 409 idempotent (already paid).</summary>
|
||||
public static void LogWinnerPatchResult(UnityWebRequest req)
|
||||
{
|
||||
long code = req.responseCode;
|
||||
string body = req.downloadHandler != null ? req.downloadHandler.text : "";
|
||||
|
||||
if (code == 200 && req.result == UnityWebRequest.Result.Success)
|
||||
{
|
||||
try
|
||||
{
|
||||
var parsed = JsonUtility.FromJson<DedicatedWinnerPatchResponse>(body);
|
||||
if (parsed != null && parsed.ok && parsed.economy != null)
|
||||
GameManager.MatchRcPrizeCoins = parsed.economy.rc_prize;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.Log("Dedicated winner PATCH: could not parse economy: " + e.Message + " body=" + body);
|
||||
}
|
||||
|
||||
Logger.Log("Dedicated match winner PATCH success: " + code + " " + body);
|
||||
return;
|
||||
}
|
||||
|
||||
if (code == 409)
|
||||
{
|
||||
Logger.Log("Dedicated match winner PATCH: winner already recorded (409 idempotent), no second payout. " + body);
|
||||
return;
|
||||
}
|
||||
|
||||
Logger.Log("Dedicated match winner PATCH failed: " + code + " " + req.error + " " + body);
|
||||
Logger.Log("More details : " + req.url + " " + req.method + " " + body);
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
class DedicatedWinnerPatchEconomy
|
||||
{
|
||||
public int entry_fee_rc;
|
||||
public int rc_prize;
|
||||
public int participant_cc;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
class DedicatedWinnerPatchResponse
|
||||
{
|
||||
public bool ok;
|
||||
public int id;
|
||||
public int winner_id;
|
||||
public DedicatedWinnerPatchEconomy economy;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user