72 lines
1.9 KiB
C#
72 lines
1.9 KiB
C#
using Newtonsoft.Json.Linq;
|
|
using PluralRichPresence.SimplyPlural;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace PluralRichPresence
|
|
{
|
|
public class System
|
|
{
|
|
public event EventHandler FronterChanged;
|
|
string token;
|
|
|
|
public Member[] Members;
|
|
public string SystemId;
|
|
|
|
private Socket sock;
|
|
private Rest rest;
|
|
|
|
private ManualResetEvent waitHandle = new ManualResetEvent(false);
|
|
public Member? LookupMember(string memberId)
|
|
{
|
|
foreach(Member member in this.Members)
|
|
if (member.Id == memberId) return member;
|
|
|
|
return null;
|
|
}
|
|
|
|
|
|
public async Task<Member[]> GetCurrentFronterInfo()
|
|
{
|
|
string[] fronters = await rest.GetCurrentFronters();
|
|
|
|
List<Member> members = new List<Member>();
|
|
|
|
foreach (string fronter in fronters)
|
|
{
|
|
Member? frontingMember = LookupMember(fronter);
|
|
if (frontingMember is not null) members.Add(frontingMember);
|
|
}
|
|
|
|
return members.ToArray();
|
|
}
|
|
private async Task setup()
|
|
{
|
|
this.SystemId = await rest.GetSystemId();
|
|
this.Members = await rest.GetMembers(this.SystemId);
|
|
this.sock.FronterChanged += OnFronterChange;
|
|
|
|
waitHandle.Set();
|
|
}
|
|
|
|
private void OnFronterChange(object? sender, EventArgs e)
|
|
{
|
|
if (FronterChanged is not null)
|
|
FronterChanged(sender, e);
|
|
}
|
|
|
|
public System(string simplyPluralToken)
|
|
{
|
|
this.token = simplyPluralToken;
|
|
this.rest = new Rest(this.token);
|
|
this.sock = new Socket(this.token);
|
|
_ = setup();
|
|
waitHandle.WaitOne();
|
|
}
|
|
}
|
|
}
|