using System.Net.Http.Headers; using System.Net.Http.Json; using System.Text.Json; using RelayShared.Rtc; namespace RelayClient; public class ServerAPI { private static readonly HttpClient client = new() { BaseAddress = new Uri("http://localhost:5000/") }; public static void setupClient() { client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); } public static async Task PostOfferAsync(RtcOffer offer) { var response = await client.PostAsJsonAsync("api/rtc/offer", offer); response.EnsureSuccessStatusCode(); } public static async Task> GetParticipantsForChannelAsync(string channelId) { var response = await client.GetAsync($"api/rtc/participants/{channelId}"); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize>(json) ?? []; } public static async Task GetOfferForChannelAsync(string channelId, string fromUsername, string targetUsername) { var response = await client.GetAsync($"api/rtc/offer/{channelId}/{fromUsername}/{targetUsername}"); if (!response.IsSuccessStatusCode) return null; var json = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize(json); } public static async Task PostAnswerAsync(RtcAnswer answer) { var response = await client.PostAsJsonAsync("api/rtc/answer", answer); response.EnsureSuccessStatusCode(); } public static async Task GetAnswerForChannelAsync(string channelId, string fromUsername, string targetUsername) { var response = await client.GetAsync($"api/rtc/answer/{channelId}/{fromUsername}/{targetUsername}"); if (!response.IsSuccessStatusCode) return null; var json = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize(json); } public static async Task PostIceCandidateAsync(DBIceCandidate candidate) { var response = await client.PostAsJsonAsync("api/rtc/candidate", candidate); response.EnsureSuccessStatusCode(); } public static async Task PostLeaveAsync(RtcLeaveRequest leave) { var response = await client.PostAsJsonAsync("api/rtc/leave", leave); response.EnsureSuccessStatusCode(); } }