public async Task InitializeWebRtc() { try { var iceServers = await CasterSocket.GetIceServers(); RtcSession = WebRtcSessionFactory.GetNewSession(this); if (RtcSession is null) { return; } RtcSession.LocalSdpReady += async(sender, sdp) => { await CasterSocket.SendRtcOfferToBrowser(sdp.Content, ViewerConnectionID, iceServers); }; RtcSession.IceCandidateReady += async(sender, candidate) => { await CasterSocket.SendIceCandidateToBrowser(candidate.Content, candidate.SdpMlineIndex, candidate.SdpMid, ViewerConnectionID); }; await RtcSession.Init(iceServers); } catch (Exception ex) { Logger.Write(ex); } }
public async Task SendCursorChange(CursorInfo cursorInfo) { var dto = new CursorChangeDto(cursorInfo.ImageBytes, cursorInfo.HotSpot.X, cursorInfo.HotSpot.Y, cursorInfo.CssOverride); await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); }
public async Task <IActionResult> OnGetAsync(Guid?id) { if (id == null) { return(NotFound()); } Session = await _context.RtcSessions .Include(session => session.Creator) .FirstOrDefaultAsync(m => m.Id == id); if (Session == null) { return(NotFound()); } var user = await _userManager.GetUserAsync(User); // get active invite ActiveInvite = await _inviteService.GetActiveAsync(Session.Id, user.Id); // get all grants (members) Grants = await _context.RtcSessionGrants .OrderByDescending(grant => grant.CreationTime) .Where(grant => grant.Session.Id == Session.Id) .Include(grant => grant.User) .ToListAsync(); Joined = Grants.Any(grant => grant.User == user); return(Page()); }
public async Task SendScreenCapture(byte[] encodedImageBytes, int left, int top, int width, int height) { PendingSentFrames.Enqueue(DateTimeOffset.Now); for (var i = 0; i < encodedImageBytes.Length; i += 50_000) { var dto = new CaptureFrameDto() { Left = left, Top = top, Width = width, Height = height, EndOfFrame = false, ImageBytes = encodedImageBytes.Skip(i).Take(50_000).ToArray(), ImageQuality = imageQuality }; await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); } var endOfFrameDto = new CaptureFrameDto() { Left = left, Top = top, Width = width, Height = height, EndOfFrame = true, ImageQuality = imageQuality }; await SendToViewer(() => RtcSession.SendDto(endOfFrameDto), () => CasterSocket.SendDtoToViewer(endOfFrameDto, ViewerConnectionID)); }
public async Task SendClipboardText(string clipboardText) { var dto = new ClipboardTextDto(clipboardText); await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); }
public async Task SendMachineName(string machineName) { var dto = new MachineNameDto(machineName); await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); }
public async Task <IActionResult> OnPostAsync(Guid?id) { if (id == null) { return(NotFound()); } var user = await _userManager.GetUserAsync(User); if (user == null) { return(Unauthorized()); } Session = await _context.RtcSessions.FindAsync(id); if (Session == null) { return(NotFound()); } if (Session.Creator != user) { return(Unauthorized()); } Session.Deleted = true; await _context.SaveChangesAsync(); return(RedirectToPage("./Index")); }
public async Task <IActionResult> OnGetAsync(Guid?id) { if (id == null) { return(NotFound()); } var user = await _userManager.GetUserAsync(User); if (user == null) { return(Unauthorized()); } Session = await _context.RtcSessions.FirstOrDefaultAsync(m => m.Id == id); if (Session == null) { return(NotFound()); } if (Session.Creator != user) { return(Unauthorized()); } return(Page()); }
public async Task SendScreenSize(int width, int height) { var dto = new ScreenSizeDto(width, height); await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); }
public async Task SendAudioSample(byte[] audioSample) { var dto = new AudioSampleDto(audioSample); await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); }
public async Task SendScreenData(string selectedScreen, string[] displayNames) { var dto = new ScreenDataDto(selectedScreen, displayNames); await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); }
public async Task SendFile(FileUpload fileUpload, Action <double> progressUpdateCallback) { try { var messageId = Guid.NewGuid().ToString(); var fileDto = new FileDto() { EndOfFile = false, FileName = fileUpload.DisplayName, MessageId = messageId, StartOfFile = true }; await SendToViewer(() => RtcSession.SendDto(fileDto), () => CasterSocket.SendDtoToViewer(fileDto, ViewerConnectionID)); using var fs = File.OpenRead(fileUpload.FilePath); using var br = new BinaryReader(fs); while (fs.Position < fs.Length) { fileDto = new FileDto() { Buffer = br.ReadBytes(50_000), FileName = fileUpload.DisplayName, MessageId = messageId }; await SendToViewer(async() => { await RtcSession.SendDto(fileDto); //await TaskHelper.DelayUntilAsync(() => RtcSession.CurrentBuffer > 0, TimeSpan.FromSeconds(1), 100); await TaskHelper.DelayUntilAsync(() => RtcSession.CurrentBuffer == 0, TimeSpan.MaxValue, 100); }, async() => { await CasterSocket.SendDtoToViewer(fileDto, ViewerConnectionID); }); progressUpdateCallback((double)fs.Position / fs.Length); } fileDto = new FileDto() { EndOfFile = true, FileName = fileUpload.DisplayName, MessageId = messageId, StartOfFile = false }; await SendToViewer(() => RtcSession.SendDto(fileDto), () => CasterSocket.SendDtoToViewer(fileDto, ViewerConnectionID)); progressUpdateCallback(1); } catch (Exception ex) { Logger.Write(ex); } }
public async Task SendWindowsSessions() { if (EnvironmentHelper.IsWindows) { await SendToViewer(() => RtcSession.SendWindowsSessions(Win32Interop.GetActiveSessions()), () => CasterSocket.SendWindowsSessions(Win32Interop.GetActiveSessions(), ViewerConnectionID)); } }
public async Task SendScreenCapture(IEnumerable <CaptureFrame> screenFrame) { PendingSentFrames.Enqueue(DateTimeOffset.Now); foreach (var frame in screenFrame) { var left = frame.Left; var top = frame.Top; var width = frame.Width; var height = frame.Height; for (var i = 0; i < frame.EncodedImageBytes.Length; i += 50_000) { var dto = new CaptureFrameDto() { Left = left, Top = top, Width = width, Height = height, EndOfFrame = false, ImageBytes = frame.EncodedImageBytes.Skip(i).Take(50_000).ToArray(), ImageQuality = _imageQuality, EndOfCapture = false }; await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); } var endOfFrameDto = new CaptureFrameDto() { Left = left, Top = top, Width = width, Height = height, EndOfFrame = true, ImageQuality = _imageQuality, EndOfCapture = false }; await SendToViewer(() => RtcSession.SendDto(endOfFrameDto), () => CasterSocket.SendDtoToViewer(endOfFrameDto, ViewerConnectionID)); } var endofCaptureDto = new CaptureFrameDto() { Left = 0, Top = 0, Width = 0, Height = 0, EndOfFrame = true, ImageQuality = _imageQuality, EndOfCapture = true }; await SendToViewer(() => RtcSession.SendDto(endofCaptureDto), () => CasterSocket.SendDtoToViewer(endofCaptureDto, ViewerConnectionID)); }
public async Task SendWindowsSessions() { if (EnvironmentHelper.IsWindows) { var dto = new WindowsSessionsDto(Win32Interop.GetActiveSessions()); await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); } }
public async Task SendScreenCapture(byte[] encodedImageBytes, int left, int top, int width, int height) { PendingSentFrames.Enqueue(DateTimeOffset.Now); await SendToViewer(() => { RtcSession.SendCaptureFrame(left, top, width, height, encodedImageBytes, ImageQuality); }, async() => { await CasterSocket.SendScreenCapture(encodedImageBytes, ViewerConnectionID, left, top, width, height, ImageQuality); }); }
public async Task SendScreenCapture(byte[] encodedImageBytes, int left, int top, int width, int height) { await SendToViewer(() => { RtcSession.SendCaptureFrame(left, top, width, height, encodedImageBytes, ImageQuality); WebSocketBuffer = 0; }, async() => { await CasterSocket.SendScreenCapture(encodedImageBytes, ViewerConnectionID, left, top, width, height, ImageQuality); WebSocketBuffer += encodedImageBytes.Length; }); }
public async Task Create(RtcSession session, ApplicationUser user) { if (await Exists(session.Id, user.Id)) // TODO: should be restricted by database { return; } await _context.RtcSessionGrants.AddAsync(new RtcSessionGrant { CreationTime = DateTime.Now, Session = session, User = user }); await _context.SaveChangesAsync(); }
public async Task <uint> CreateAsync(RtcSession session, ApplicationUser creator, uint expires) { var recent = await GetActiveAsync(session.Id, creator.Id); if (recent != null) { recent.Disabled = true; } var inviteId = GenerateInviteId(); await _context.AddAsync(new RtcSessionInvite { Creator = creator, Disabled = false, Expires = DateTime.Now.AddMinutes(expires), Id = inviteId, Session = session }); await _context.SaveChangesAsync(); return(inviteId); }
public async Task SendScreenData(string selectedScreen, string[] displayNames) { await SendToViewer(() => RtcSession.SendScreenData(selectedScreen, displayNames), () => CasterSocket.SendScreenData(selectedScreen, displayNames, ViewerConnectionID)); }
public async Task SendMachineName(string machineName) { await SendToViewer(() => RtcSession.SendMachineName(machineName), () => CasterSocket.SendMachineName(machineName, ViewerConnectionID)); }
public async Task SendCursorChange(CursorInfo cursorInfo) { await SendToViewer(() => RtcSession.SendCursorChange(cursorInfo), () => CasterSocket.SendCursorChange(cursorInfo, ViewerConnectionID)); }
public async Task SendClipboardText(string clipboardText) { await SendToViewer(() => RtcSession.SendClipboardText(clipboardText), () => CasterSocket.SendClipboardText(clipboardText, ViewerConnectionID)); }
public async Task SendAudioSample(byte[] audioSample) { await SendToViewer(() => RtcSession.SendAudioSample(audioSample), () => CasterSocket.SendAudioSample(audioSample, ViewerConnectionID)); }
public void Dispose() { EncoderParams?.Dispose(); RtcSession?.Dispose(); }
public void ToggleWebRtcVideo(bool toggleOn) { RtcSession.ToggleWebRtcVideo(toggleOn); }
public async Task SendScreenSize(int width, int height, string viewerID) { await SendToViewer(() => RtcSession.SendScreenSize(width, height), () => CasterSocket.SendScreenSize(width, height, viewerID)); }
public async Task SendScreenSize(int width, int height) { await SendToViewer(() => RtcSession.SendScreenSize(width, height), () => CasterSocket.SendScreenSize(width, height, ViewerConnectionID)); }
public void Dispose() { RtcSession?.Dispose(); Capturer?.Dispose(); }
public void Dispose() { RtcSession?.Dispose(); }