using System.Diagnostics; using System.Net.Http; using System.Net.Http.Json; using System.Text.Json; namespace CrashReporter; class Program { static async Task Main( string[] args ) { if ( args.Length < 1 ) { Console.WriteLine( "Usage: CrashReporter.exe " ); return 1; } using var stream = File.OpenRead( args[0] ); var envelope = await Envelope.FromFileStreamAsync( stream ); var dsn = envelope.TryGetDsn(); var event_id = envelope.TryGetEventId(); // Submit to Sentry await SentryClient.SubmitEnvelopeAsync( dsn!, envelope ); // Submit to our own API var sentryEvent = envelope.TryGetEvent()?.TryParseAsJson(); if ( sentryEvent is not null ) { var tags = sentryEvent["tags"]; var payload = new { sentry_event_id = event_id, timestamp = sentryEvent["timestamp"], version = sentryEvent["release"], session_id = tags?["session_id"], activity_session_id = tags?["activity_session_id"], launch_guid = tags?["launch_guid"], gpu = tags?["gpu"], cpu = tags?["cpu"], mode = tags?["mode"], }; // Submit to our API using var client = new HttpClient(); await client.PostAsJsonAsync( "https://services.facepunch.com/sbox/event/crash/1/", payload ); } // Open browser to crash report page Process.Start( new ProcessStartInfo( $"https://sbox.game/crashes/{event_id}" ) { UseShellExecute = true } ); return 0; } }