Archived
First pass at events almost buttoned up.
The goal is to get the members list to update when new users enter and leave the party.
This commit is contained in:
1 parent
74f5d3e9c6
commit
823e1341ca
14 files changed
+563
-20
No files matched your search
@@ -0,0 +1,80 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Aurora.Services;
|
||||
using Aurora.Proto.Events;
|
||||
using Aurora.Proto.General;
|
||||
|
||||
namespace Aurora.RemoteImpl
|
||||
{
|
||||
public class RemoteEventServiceImpl : RemoteEventService.RemoteEventServiceBase
|
||||
{
|
||||
public RemoteEventServiceImpl()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// RPC for getting event stream for a particular client.
|
||||
/// </summary>
|
||||
/// <param name="request">Empty</param>
|
||||
/// <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)
|
||||
{
|
||||
while (EventManager.Instance.GetSubscriptionCount(context.Peer) > 0)
|
||||
{
|
||||
List<BaseEvent> events = EventManager.Instance.GetSessionEvents(context.Peer);
|
||||
foreach (BaseEvent currentEvent in events)
|
||||
{
|
||||
await responseStream.WriteAsync(currentEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// RPC for subscribing to remote events
|
||||
/// </summary>
|
||||
/// <param name="request">SubscribeRequest</param>
|
||||
/// <param name="context">gRPC client context</param>
|
||||
/// <returns></returns>
|
||||
public override Task<SubscriptionResponse> SubscribeToEvents(SubscribeRequest request, Grpc.Core.ServerCallContext context)
|
||||
{
|
||||
EventManager.Instance.AddSubscriptionList(context.Peer, request.EventTypes.ToList());
|
||||
|
||||
return Task.FromResult(new SubscriptionResponse { Successful = true });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// RPC for unsubscibing from events
|
||||
/// </summary>
|
||||
/// <param name="request">UnsubscribeRequest</param>
|
||||
/// <param name="context">gRPC client context</param>
|
||||
/// <returns></returns>
|
||||
public override Task<SubscriptionResponse> UnsubscribeFromEvents(UnsubscribeRequest request, Grpc.Core.ServerCallContext context)
|
||||
{
|
||||
EventType[] eventTypes = null;
|
||||
request.EventTypes.CopyTo(eventTypes, 0);
|
||||
|
||||
EventManager.Instance.RemoveSubscriptionList(context.Peer, eventTypes.ToList());
|
||||
|
||||
return Task.FromResult(new SubscriptionResponse { Successful = true });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// RPC for unsubscribing from all events
|
||||
/// </summary>
|
||||
/// <param name="request">UnsubscribeAllRequest</param>
|
||||
/// <param name="context">gRPC client context</param>
|
||||
/// <returns></returns>
|
||||
public override Task<SubscriptionResponse> UnsubscribeFromAll(UnsubscribeAllRequest request, Grpc.Core.ServerCallContext context)
|
||||
{
|
||||
EventManager.Instance.RemoveAllSubscriptions(context.Peer);
|
||||
|
||||
return Task.FromResult(new SubscriptionResponse { Successful = true });
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,7 +2,10 @@ using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using Aurora.Proto;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using Aurora.Proto.Party;
|
||||
using Aurora.Proto.General;
|
||||
using Aurora.Proto.Events;
|
||||
using Aurora.Models;
|
||||
using Aurora.Services;
|
||||
|
||||
@@ -39,11 +42,24 @@ namespace Aurora.RemoteImpl
|
||||
|
||||
public override Task<JoinPartyResponse> JoinParty(JoinPartyRequest request, Grpc.Core.ServerCallContext context)
|
||||
{
|
||||
_partyMembers.Add(new PartyMember()
|
||||
PartyMember partyMember = new PartyMember()
|
||||
{
|
||||
UserName = request.UserName,
|
||||
IpAddress = context.Host,
|
||||
});
|
||||
};
|
||||
|
||||
_partyMembers.Add(partyMember);
|
||||
|
||||
BaseEvent e = new BaseEvent
|
||||
{
|
||||
EventType = EventType.PartyMemberJoined,
|
||||
PartyMemberJoinedEvent = new PartyMemberJoinedEvent
|
||||
{
|
||||
Member = partyMember,
|
||||
}
|
||||
};
|
||||
|
||||
EventManager.Instance.PushEvent(e);
|
||||
|
||||
JoinPartyResponse response = new JoinPartyResponse() { Status = PartyJoinedStatusEnum.Connected };
|
||||
return Task.FromResult(response);
|
||||
@@ -51,12 +67,26 @@ namespace Aurora.RemoteImpl
|
||||
|
||||
public override Task<LeavePartyResponse> LeaveParty(LeavePartyRequest request, Grpc.Core.ServerCallContext context)
|
||||
{
|
||||
_partyMembers.Remove(_partyMembers.Where(e => e.Id == request.ClientId).Single());
|
||||
PartyMember partyMember = _partyMembers.Where(e => e.Id == request.ClientId).Single();
|
||||
|
||||
_partyMembers.Remove(partyMember);
|
||||
|
||||
BaseEvent bv = new BaseEvent
|
||||
{
|
||||
EventType = EventType.PartyMemberJoined,
|
||||
PartyMemberLeftEvent = new PartyMemberLeftEvent
|
||||
{
|
||||
Member = partyMember,
|
||||
}
|
||||
};
|
||||
|
||||
EventManager.Instance.PushEvent(bv);
|
||||
|
||||
LeavePartyResponse response = new LeavePartyResponse() { Status = PartyJoinedStatusEnum.Disconnected };
|
||||
return Task.FromResult(response);
|
||||
}
|
||||
|
||||
public override Task<MembersResponse> GetPartyMembers(Empty empty, Grpc.Core.ServerCallContext context)
|
||||
public override Task<MembersResponse> GetPartyMembers(Proto.General.Empty empty, Grpc.Core.ServerCallContext context)
|
||||
{
|
||||
MembersResponse response = new MembersResponse();
|
||||
response.Members.AddRange(_partyMembers);
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.IO;
|
||||
using Aurora.Proto;
|
||||
using Aurora.Proto.Playback;
|
||||
using Aurora.Proto.General;
|
||||
using Aurora.Models;
|
||||
|
||||
namespace Aurora.RemoteImpl
|
||||
@@ -14,7 +15,7 @@ namespace Aurora.RemoteImpl
|
||||
|
||||
}
|
||||
|
||||
public override async Task GetPartyStream(Empty empty,
|
||||
public override Task GetPartyStream(Empty empty,
|
||||
Grpc.Core.IServerStreamWriter<Chunk> responseStream,
|
||||
Grpc.Core.ServerCallContext context)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user