using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using RestEase; using SharedLibraryCore; namespace IW4MAdmin.Application.API.Master { public class Heartbeat { static IMasterApi api; public static async Task Send(ApplicationManager mgr, bool firstHeartbeat = false) { if (firstHeartbeat) { api = RestClient.For("http://127.0.0.1"); var token = await api.Authenticate(new AuthenticationId() { Id = mgr.GetApplicationSettings().Configuration().Id }); api.AuthorizationToken = $"Bearer {token.AccessToken}"; } var instance = new ApiInstance() { Id = mgr.GetApplicationSettings().Configuration().Id, Uptime = (int)(DateTime.UtcNow - mgr.StartTime).TotalSeconds, Version = (float)Program.Version, Servers = mgr.Servers.Select(s => new ApiServer() { ClientNum = s.ClientNum, Game = s.GameName.ToString(), Gametype = s.Gametype, Hostname = s.Hostname, Map = s.CurrentMap.Name, MaxClientNum = s.MaxClients, Id = s.GetHashCode(), Port = (short)s.GetPort() }).ToList() }; if (firstHeartbeat) { instance = await api.AddInstance(instance); } else { instance = await api.UpdateInstance(instance.Id, instance); } } } }