using System; using System.Threading.Tasks; using System.Collections.ObjectModel; using System.Linq; using Aurora.Proto; using Aurora.Models; using Aurora.Services; namespace Aurora.RemoteImpl { public class RemotePartyServiceImpl : RemotePartyService.RemotePartyServiceBase { /// /// Dictionary of party members. Key -> ClientId /// private ObservableCollection _partyMembers; public RemotePartyServiceImpl() { _partyMembers = new ObservableCollection(); //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 PartyMembers { get { return _partyMembers; } } public override Task JoinParty(JoinPartyRequest request, Grpc.Core.ServerCallContext context) { _partyMembers.Add(new PartyMember() { UserName = request.UserName, IpAddress = context.Host, }); JoinPartyResponse response = new JoinPartyResponse() { Status = PartyJoinedStatusEnum.Connected }; return Task.FromResult(response); } public override Task LeaveParty(LeavePartyRequest request, Grpc.Core.ServerCallContext context) { _partyMembers.Remove(_partyMembers.Where(e => e.Id == request.ClientId).Single()); LeavePartyResponse response = new LeavePartyResponse() { Status = PartyJoinedStatusEnum.Disconnected }; return Task.FromResult(response); } public override Task GetPartyMembers(Empty empty, Grpc.Core.ServerCallContext context) { MembersResponse response = new MembersResponse(); response.Members.AddRange(_partyMembers); return Task.FromResult(response); } } }