Esempio n. 1
0
        private IImageCompression GetImageCompression(ImageCompressionType compressionType)
        {
            if (_compressionType == compressionType && _currentImageCompression != null)
            {
                return(_currentImageCompression);
            }

            _currentImageCompression?.Dispose();
            _compressionType = compressionType;

            switch (compressionType)
            {
            case ImageCompressionType.ManagedJpg:
                return(_currentImageCompression = new JpgCompression(70));

            case ImageCompressionType.TurboJpg:
                return(_currentImageCompression = new TurboJpgImageCompression(false));

            case ImageCompressionType.NoCompression:
                return(_currentImageCompression = new NoCompression());

            default:
                throw new ArgumentOutOfRangeException(nameof(compressionType), compressionType, null);
            }
        }
Esempio n. 2
0
        public UnsafeStreamCodec(IImageCompression imageCompression, UnsafeStreamCodecParameters parameters)
        {
            _sendFullImage = (parameters & UnsafeStreamCodecParameters.UpdateImageEveryTwoSeconds) ==
                             UnsafeStreamCodecParameters.UpdateImageEveryTwoSeconds;
            _keepCompressor = (parameters & UnsafeStreamCodecParameters.DontDisposeImageCompressor) ==
                              UnsafeStreamCodecParameters.DontDisposeImageCompressor;

            if (_sendFullImage)
            {
                _fullImageStopwatch = Stopwatch.StartNew();
            }
            _checkBlock      = new Size(50, 1);
            ImageCompression = imageCompression;
            ImageQuality     = 70;
        }
        private async Task Stop(bool remoteCancelled)
        {
            if (!IsStreaming)
            {
                return;
            }

            if (!remoteCancelled)
            {
                await ConnectionInfo.SendCommand(this, (byte)RemoteDesktopCommunication.Stop);
            }

            //important, else dead lock because this is UI thread and lock invokdes into UI thread -> block
            await Task.Run(() =>
            {
                lock (_updateLock)
                {
                    IsStreaming = false;
                }
            });

            FramesPerSecond = 0;
            _framesReceived = 0;

            _cursorStreamCodec?.Dispose();
            _streamCodec?.Dispose();
            _currentImageCompression?.Dispose();
            _remoteConnection?.Dispose();

            _remoteConnection        = null;
            _currentImageCompression = null;
            _cursorStreamCodec       = null;
            _streamCodec             = null;

            LogService.Send((string)Application.Current.Resources["StopRemoteDesktop"]);
        }