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; } ; }
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(); }