public async Task <IActionResult> ProcessHeartbeat(string sessionHostId, [FromBody] SessionHostHeartbeatInfo heartbeatRequest) { await Task.Delay(1); SessionHostStatus currentGameState = heartbeatRequest.CurrentGameState; Operation op = Operation.Continue; SessionConfig config = null; Console.WriteLine($"CurrentGameState: {heartbeatRequest.CurrentGameState}"); if (currentGameState == SessionHostStatus.Terminated || currentGameState == SessionHostStatus.Terminating) { HeartBeatsCount.TryRemove(sessionHostId, out _); } else if (HeartBeatsCount.TryGetValue(sessionHostId, out int numHeartBeats)) { if (numHeartBeats >= Globals.Settings.NumHeartBeatsForTerminateResponse) { op = Operation.Terminate; } else if (numHeartBeats >= Globals.Settings.NumHeartBeatsForActivateResponse && currentGameState == SessionHostStatus.StandingBy) { op = Operation.Active; config = Globals.SessionConfig; } HeartBeatsCount[sessionHostId]++; } else { HeartBeatsCount.TryAdd(sessionHostId, 1); } return(Ok(new SessionHostHeartbeatInfo { CurrentGameState = currentGameState, NextHeartbeatIntervalMs = DefaultHeartbeatIntervalMs, Operation = op, SessionConfig = config })); }
public static void SetState(SessionHostStatus status) { CurrentState.currentGameState = status; }
internal static SessionHostData DeserializeSessionHostData(JsonElement element) { ResourceIdentifier id = default; string name = default; ResourceType type = default; SystemData systemData = default; Optional <string> objectId = default; Optional <DateTimeOffset> lastHeartBeat = default; Optional <int> sessions = default; Optional <string> agentVersion = default; Optional <bool> allowNewSession = default; Optional <string> virtualMachineId = default; Optional <string> resourceId = default; Optional <string> assignedUser = default; Optional <SessionHostStatus> status = default; Optional <DateTimeOffset> statusTimestamp = default; Optional <string> osVersion = default; Optional <string> sxSStackVersion = default; Optional <UpdateState> updateState = default; Optional <DateTimeOffset> lastUpdateTime = default; Optional <string> updateErrorMessage = default; Optional <IReadOnlyList <SessionHostHealthCheckReport> > sessionHostHealthCheckResults = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("id")) { id = new ResourceIdentifier(property.Value.GetString()); continue; } if (property.NameEquals("name")) { name = property.Value.GetString(); continue; } if (property.NameEquals("type")) { type = property.Value.GetString(); continue; } if (property.NameEquals("systemData")) { systemData = JsonSerializer.Deserialize <SystemData>(property.Value.ToString()); continue; } if (property.NameEquals("properties")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } foreach (var property0 in property.Value.EnumerateObject()) { if (property0.NameEquals("objectId")) { objectId = property0.Value.GetString(); continue; } if (property0.NameEquals("lastHeartBeat")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } lastHeartBeat = property0.Value.GetDateTimeOffset("O"); continue; } if (property0.NameEquals("sessions")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } sessions = property0.Value.GetInt32(); continue; } if (property0.NameEquals("agentVersion")) { agentVersion = property0.Value.GetString(); continue; } if (property0.NameEquals("allowNewSession")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } allowNewSession = property0.Value.GetBoolean(); continue; } if (property0.NameEquals("virtualMachineId")) { virtualMachineId = property0.Value.GetString(); continue; } if (property0.NameEquals("resourceId")) { resourceId = property0.Value.GetString(); continue; } if (property0.NameEquals("assignedUser")) { assignedUser = property0.Value.GetString(); continue; } if (property0.NameEquals("status")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } status = new SessionHostStatus(property0.Value.GetString()); continue; } if (property0.NameEquals("statusTimestamp")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } statusTimestamp = property0.Value.GetDateTimeOffset("O"); continue; } if (property0.NameEquals("osVersion")) { osVersion = property0.Value.GetString(); continue; } if (property0.NameEquals("sxSStackVersion")) { sxSStackVersion = property0.Value.GetString(); continue; } if (property0.NameEquals("updateState")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } updateState = new UpdateState(property0.Value.GetString()); continue; } if (property0.NameEquals("lastUpdateTime")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } lastUpdateTime = property0.Value.GetDateTimeOffset("O"); continue; } if (property0.NameEquals("updateErrorMessage")) { updateErrorMessage = property0.Value.GetString(); continue; } if (property0.NameEquals("sessionHostHealthCheckResults")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } List <SessionHostHealthCheckReport> array = new List <SessionHostHealthCheckReport>(); foreach (var item in property0.Value.EnumerateArray()) { array.Add(SessionHostHealthCheckReport.DeserializeSessionHostHealthCheckReport(item)); } sessionHostHealthCheckResults = array; continue; } } continue; } } return(new SessionHostData(id, name, type, systemData, objectId.Value, Optional.ToNullable(lastHeartBeat), Optional.ToNullable(sessions), agentVersion.Value, Optional.ToNullable(allowNewSession), virtualMachineId.Value, resourceId.Value, assignedUser.Value, Optional.ToNullable(status), Optional.ToNullable(statusTimestamp), osVersion.Value, sxSStackVersion.Value, Optional.ToNullable(updateState), Optional.ToNullable(lastUpdateTime), updateErrorMessage.Value, Optional.ToList(sessionHostHealthCheckResults))); }