Fixed issue with Horizontal list not refreshing. Added clientId to joinPartyResponse. Crashing on multiple user joins.

This commit is contained in:
watsonb8
2019-07-12 11:34:06 -04:00
parent 11a585ecc0
commit d78dce44f0
11 changed files with 173 additions and 54 deletions

View File

@ -22,16 +22,26 @@ namespace Aurora.RemoteImpl
/// <param name="responseStream">The response stream</param>
/// <param name="context">gRPC client context</param>
/// <returns></returns>
public async override Task GetEvents(Empty request, Grpc.Core.IServerStreamWriter<BaseEvent> responseStream, Grpc.Core.ServerCallContext context)
public async override Task GetEvents(EventsRequest request, Grpc.Core.IServerStreamWriter<BaseEvent> responseStream, Grpc.Core.ServerCallContext context)
{
while (EventManager.Instance.GetSubscriptionCount(context.Peer) > 0)
try
{
List<BaseEvent> events = EventManager.Instance.GetSessionEvents(context.Peer);
foreach (BaseEvent currentEvent in events)
while (EventManager.Instance.GetSubscriptionCount(Combine(new string[] { context.Peer, request.ClientId })) > 0)
{
await responseStream.WriteAsync(currentEvent);
Console.WriteLine("Peer " + context.Peer);
//TODO this causes crashes when two or more members are connected
//TODO Change this to events based stream instead of a poll based...
List<BaseEvent> events = EventManager.Instance.GetSessionEvents(Combine(new string[] { context.Peer, request.ClientId }));
foreach (BaseEvent currentEvent in events)
{
await responseStream.WriteAsync(currentEvent);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Exception caught:" + ex.Message);
}
}
/// <summary>
@ -42,7 +52,7 @@ namespace Aurora.RemoteImpl
/// <returns></returns>
public override Task<SubscriptionResponse> SubscribeToEvents(SubscribeRequest request, Grpc.Core.ServerCallContext context)
{
EventManager.Instance.AddSubscriptionList(context.Peer, request.EventTypes.ToList());
EventManager.Instance.AddSubscriptionList(Combine(new string[] { context.Peer, request.ClientId }), request.EventTypes.ToList());
return Task.FromResult(new SubscriptionResponse { Successful = true });
}
@ -58,7 +68,7 @@ namespace Aurora.RemoteImpl
EventType[] eventTypes = null;
request.EventTypes.CopyTo(eventTypes, 0);
EventManager.Instance.RemoveSubscriptionList(context.Peer, eventTypes.ToList());
EventManager.Instance.RemoveSubscriptionList(Combine(new string[] { context.Peer, request.ClientId }), eventTypes.ToList());
return Task.FromResult(new SubscriptionResponse { Successful = true });
}
@ -71,10 +81,28 @@ namespace Aurora.RemoteImpl
/// <returns></returns>
public override Task<SubscriptionResponse> UnsubscribeFromAll(UnsubscribeAllRequest request, Grpc.Core.ServerCallContext context)
{
EventManager.Instance.RemoveAllSubscriptions(context.Peer);
EventManager.Instance.RemoveAllSubscriptions(Combine(new string[] { context.Peer, request.ClientId }));
return Task.FromResult(new SubscriptionResponse { Successful = true });
}
private string Combine(string[] args)
{
string outString = "";
foreach (string arg in args)
{
if (arg == args.Last())
{
outString += arg;
}
else
{
outString += arg + ":";
}
}
return outString;
}
}
}

View File

@ -21,15 +21,6 @@ namespace Aurora.RemoteImpl
public RemotePartyServiceImpl()
{
_partyMembers = new ObservableCollection<PartyMember>();
//Add self to members list
_partyMembers.Add(new PartyMember
{
UserName = SettingsService.Instance.Username,
Id = "asdf",
IpAddress = ServerService.Instance.Hostname,
Port = ServerService.Instance.Port
});
}
public ObservableCollection<PartyMember> PartyMembers
@ -42,7 +33,7 @@ namespace Aurora.RemoteImpl
public override Task<JoinPartyResponse> JoinParty(JoinPartyRequest request, Grpc.Core.ServerCallContext context)
{
PartyMember partyMember = new PartyMember()
PartyMember partyMember = new PartyMember("")
{
UserName = request.UserName,
IpAddress = context.Host,
@ -61,7 +52,7 @@ namespace Aurora.RemoteImpl
EventManager.Instance.PushEvent(e);
JoinPartyResponse response = new JoinPartyResponse() { Status = PartyJoinedStatusEnum.Connected };
JoinPartyResponse response = new JoinPartyResponse() { Status = PartyJoinedStatusEnum.Connected, ClientId = partyMember.Id };
return Task.FromResult(response);
}