using System; using System.Collections.ObjectModel; using Grpc.Core; using Aurora.Proto; using Aurora.Models; using Aurora.Services; namespace Aurora.Executors { public class ClientExecutor : BaseExecutor { private Channel _channel; private RemotePartyService.RemotePartyServiceClient _remotePartyClient; private RemotePlaybackService.RemotePlaybackServiceClient _remotePlaybackClient; private ObservableCollection _partyMembers; public ClientExecutor() { _partyMembers = new ObservableCollection(); } #region Properties public override ObservableCollection PartyMembers { get { return _partyMembers; } } #endregion Properties public override void Connect(string hostname) { _channel = new Channel(string.Format("{0}:{1}", hostname, SettingsService.Instance.DefaultPort), ChannelCredentials.Insecure); _remotePartyClient = new RemotePartyService.RemotePartyServiceClient(_channel); _remotePlaybackClient = new RemotePlaybackService.RemotePlaybackServiceClient(_channel); JoinParty(); } public override async void Close() { await _channel.ShutdownAsync(); } public override void AddToQueue() { throw new NotImplementedException(); } public override ObservableCollection GetMembers() { throw new NotImplementedException(); } public override void GetQueue() { throw new NotImplementedException(); } public override void RemoveFromQueue() { throw new NotImplementedException(); } private async void JoinParty() { await _remotePartyClient.JoinPartyAsync(new JoinPartyRequest { UserName = SettingsService.Instance.Username, }); MembersResponse resposne = _remotePartyClient.GetPartyMembers(new Empty()); //Add members foreach (PartyMember member in resposne.Members) { _partyMembers.Add(member); } //Remove out of date members foreach (PartyMember member in _partyMembers) { if (!resposne.Members.Contains(member)) { _partyMembers.Remove(member); } } } } }