Attempts to get horizontal list to work
This commit is contained in:
@ -2,6 +2,8 @@ using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using System.Linq.Expressions;
|
||||
using System.Linq;
|
||||
using Grpc.Core;
|
||||
using wellKnown = Google.Protobuf.WellKnownTypes;
|
||||
using Aurora.Proto.General;
|
||||
@ -18,6 +20,7 @@ namespace Aurora.Executors
|
||||
private RemotePlaybackService.RemotePlaybackServiceClient _remotePlaybackClient;
|
||||
private RemoteEventService.RemoteEventServiceClient _remoteEventsClient;
|
||||
private Task _eventsTask;
|
||||
CancellationTokenSource _eventCancellationTokenSource;
|
||||
|
||||
private ObservableCollection<PartyMember> _partyMembers;
|
||||
|
||||
@ -48,6 +51,7 @@ namespace Aurora.Executors
|
||||
|
||||
//Assign but don't start task
|
||||
_eventsTask = new Task(GetEvents);
|
||||
_eventCancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
JoinParty();
|
||||
}
|
||||
@ -58,6 +62,7 @@ namespace Aurora.Executors
|
||||
/// <returns></returns>
|
||||
public override async void Close()
|
||||
{
|
||||
_eventCancellationTokenSource.Cancel();
|
||||
await _channel.ShutdownAsync();
|
||||
}
|
||||
|
||||
@ -81,6 +86,10 @@ namespace Aurora.Executors
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Join the remote party.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async void JoinParty()
|
||||
{
|
||||
await _remotePartyClient.JoinPartyAsync(new JoinPartyRequest
|
||||
@ -108,6 +117,9 @@ namespace Aurora.Executors
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Refresh members list.
|
||||
/// </summary>
|
||||
private void RefreshMembers()
|
||||
{
|
||||
MembersResponse resposne = _remotePartyClient.GetPartyMembers(new Empty());
|
||||
@ -127,32 +139,43 @@ namespace Aurora.Executors
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Asynchronous function for processing events off of the event stream.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async void GetEvents()
|
||||
{
|
||||
|
||||
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
|
||||
using (AsyncServerStreamingCall<BaseEvent> eventStream = _remoteEventsClient.GetEvents(new Empty()))
|
||||
{
|
||||
while (await eventStream.ResponseStream.MoveNext(cancellationTokenSource.Token))
|
||||
while (!_eventCancellationTokenSource.Token.IsCancellationRequested)
|
||||
{
|
||||
//Convert derived event type
|
||||
BaseEvent e = eventStream.ResponseStream.Current;
|
||||
switch (e.DerivedEventCase)
|
||||
if (await eventStream.ResponseStream.MoveNext(_eventCancellationTokenSource.Token))
|
||||
{
|
||||
case BaseEvent.DerivedEventOneofCase.None:
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
case BaseEvent.DerivedEventOneofCase.PartyMemberJoinedEvent:
|
||||
{
|
||||
PartyMemberJoinedEvent derivedEvent = e.PartyMemberJoinedEvent;
|
||||
break;
|
||||
}
|
||||
case BaseEvent.DerivedEventOneofCase.PartyMemberLeftEvent:
|
||||
{
|
||||
PartyMemberJoinedEvent derivedEvent = e.PartyMemberJoinedEvent;
|
||||
break;
|
||||
}
|
||||
//Convert derived event type
|
||||
BaseEvent e = eventStream.ResponseStream.Current;
|
||||
switch (e.DerivedEventCase)
|
||||
{
|
||||
case BaseEvent.DerivedEventOneofCase.None:
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
case BaseEvent.DerivedEventOneofCase.PartyMemberJoinedEvent:
|
||||
{
|
||||
PartyMemberJoinedEvent derivedEvent = e.PartyMemberJoinedEvent;
|
||||
_partyMembers.Add(derivedEvent.Member);
|
||||
break;
|
||||
}
|
||||
case BaseEvent.DerivedEventOneofCase.PartyMemberLeftEvent:
|
||||
{
|
||||
PartyMemberJoinedEvent derivedEvent = e.PartyMemberJoinedEvent;
|
||||
var found = _partyMembers.Where(x => x.Id == derivedEvent.Member.Id);
|
||||
foreach (PartyMember member in found)
|
||||
{
|
||||
_partyMembers.Remove(member);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user