using System; using System.Threading.Tasks; using Aurora.Proto.Sync; using Aurora.Proto.General; using Aurora.Services.PlayerService; namespace Aurora.RemoteImpl { public class RemoteSyncServiceImpl : RemoteSyncService.RemoteSyncServiceBase { /// /// RPC for getting a stream of media syncs /// /// /// /// /// public override async Task GetMediaSync(Empty request, Grpc.Core.IServerStreamWriter responseStream, Grpc.Core.ServerCallContext context) { bool continueSync = true; string currentId = PlayerService.Instance.CurrentMedia.Id; MediaChangedEventHandler mediaChanged = (sender, e) => { if (e.NewId != currentId) { continueSync = false; } }; PlayerService.Instance.MediaChanged += mediaChanged; while (continueSync) { float length = PlayerService.Instance.CurrentMediaLength; Sync sync = new Sync() { TrackPosition = PlayerService.Instance.CurrentMediaPosition, ServerTimeTicks = Utils.TimeUtils.GetNetworkTime().DateTime.Ticks }; await responseStream.WriteAsync(sync); Console.WriteLine("Sent Sync"); await Task.Delay(5000); } } } }