Beispiel #1
0
        private void PacketHandler(object sender, RunWorkerCompletedEventArgs eargs)
        {
            if (eargs.Result == null)
            {
                return;
            }
            RLocalIncomingMessage message = (RLocalIncomingMessage)eargs.Result;

            switch (message.type)
            {
            case 3:     // Frame
                if (renderer == null)
                {
                    break;
                }
                DecodeFrame(message.bytes, renderer.RenderBuffer);
                break;

            case 9:     // Button
                RLocalButtonState buttonState = RLocalButtonState.FromPacket(message.bytes);
                vjoy.SetButtonState((uint)message.playerId, RLocalInput.MapIdToButton[buttonState.button], buttonState.value);
                break;

            case 20:     // Audio Format
                var waveFormat = RLocalAudioCapture.WaveFormatFromPacket(message.bytes);
                audioPlayback = new RLocalAudioPlayback(waveFormat);
                break;

            case 21:     // Audio Data
                if (audioPlayback == null)
                {
                    break;
                }
                audioPlayback.Write(message.bytes, 8, message.bytes.Length - 8);
                break;

            case 45:     // Video Format
                options.outWidth  = BitConverter.ToInt32(message.bytes, 8);
                options.outHeight = BitConverter.ToInt32(message.bytes, 12);

                renderer = new RLocalRenderer(options.outWidth, options.outHeight);
                ThreadPool.QueueUserWorkItem((a) =>
                {
                    StartRender();
                });
                break;
            }
            ;
        }
Beispiel #2
0
        private void StartServer()
        {
            connection.StartServer(options.bindAddress, options.port, new RunWorkerCompletedEventHandler(NewClientHandler));

            videoCapture = new RLocalDesktopCapture(MonitorComboBox.SelectedIndex);
            AllocTranscoderContext();
            transcoder.AllocEncoder();
            transcoder.AllocDecoder();

            videoCapture.Capture((sender, e) =>
            {
                EncodeAndBroadcastFrame();
            });

            //DecodedBytes = new byte[RLocalUtils.GetSizeBGRA(options.outWidth, options.outHeight)];

            //renderer = new RLocalRenderer(options.outWidth, options.outHeight);

            PrepareVJoy();

            if (options.enableSound)
            {
                audioCapture = new RLocalAudioCapture((bytes, size) =>
                {
                    BinaryWriter writer = new BinaryWriter(new MemoryStream());
                    writer.Write(21);
                    writer.Write(size);
                    writer.Write(bytes);

                    BinaryReader reader        = new BinaryReader(writer.BaseStream);
                    reader.BaseStream.Position = 0;
                    int packetSize             = sizeof(int) * 2 + size;
                    byte[] packet = reader.ReadBytes(packetSize);
                    connection.BroadcastBytes(packet, packetSize);
                });
            }

            //renderer.Start();
        }