Example #1
0
        public void StartReaderWorker(RLocalClient client, RunWorkerCompletedEventHandler PacketHandler)
        {
            BackgroundWorker worker = new BackgroundWorker();

            worker.DoWork += new DoWorkEventHandler((object sender, DoWorkEventArgs eargs) =>
            {
                byte[] bytes = null;
                ReadBytes(client, out bytes);
                if (bytes == null)
                {
                    return;
                }

                RLocalIncomingMessage message = new RLocalIncomingMessage();
                message.bytes    = bytes;
                message.playerId = client.playerId;
                message.type     = BitConverter.ToInt32(bytes, 0);

                eargs.Result = message;
            });
            worker.RunWorkerCompleted += PacketHandler;
            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler((object sender, RunWorkerCompletedEventArgs e) =>
            {
                if (e.Result == null)
                {
                    return;
                }
                worker.RunWorkerAsync();
            });
            worker.RunWorkerAsync();
        }
Example #2
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;
            }
            ;
        }