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) { Utils.Time networkTime = Utils.TimeUtils.GetNetworkTime(); float length = PlayerService.Instance.CurrentMediaLength; Sync sync = new Sync() { TrackTime = length * PlayerService.Instance.CurrentMediaPosition, ServerTime = networkTime.DateTime.Ticks + networkTime.Elapsed.Ticks }; await responseStream.WriteAsync(sync); Console.WriteLine("Sent Sync"); await Task.Delay(5000); } } } }