diff --git a/Client/CefHost/CefController.cs b/Client/CefHost/CefController.cs index 6a111e7..985df14 100644 --- a/Client/CefHost/CefController.cs +++ b/Client/CefHost/CefController.cs @@ -6,6 +6,7 @@ using System.IO.MemoryMappedFiles; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Ipc; +using System.Threading; using System.Threading.Tasks; using CefSharp; using CefSharp.OffScreen; @@ -35,16 +36,23 @@ namespace RageCoop.Client.CefHost private static ActivatedClientTypeEntry _controllerEntry; private static IpcChannel _adapterChannel; public static Action OnCefMessage; - private object _browser; + private ChromiumWebBrowser _browser; private MemoryMappedFile _mmf; private string _mmfName; + private CefProcessor _processor; private SafeMemoryMappedViewHandle _mmfView; private BufferMode _mode; public IntPtr PtrBuffer { get; private set; } + public int FrameRate + { + get => _browser.GetBrowserHost().WindowlessFrameRate; + set => _browser.GetBrowserHost().WindowlessFrameRate = value; + } + public void Dispose() { - (_browser as ChromiumWebBrowser)?.Dispose(); + _browser?.Dispose(); _mmf?.Dispose(); if (PtrBuffer != IntPtr.Zero) _mmfView?.ReleasePointer(); @@ -153,28 +161,34 @@ namespace RageCoop.Client.CefHost var adapter = new CefAdapter(); adapter.Register(id, mode, _mmfName); - _browser = new ChromiumWebBrowser(); - ((ChromiumWebBrowser)_browser).RenderHandler = new CefProcessor(size, adapter, PtrBuffer, mode); + _browser.RenderHandler = _processor = new CefProcessor(size, adapter, PtrBuffer, mode); + while (_browser.GetBrowserHost() == null) Thread.Sleep(20); // Wait till the browser is actually created Console.WriteLine("CefController created: " + size); } public void LoadUrl(string url) { - ((ChromiumWebBrowser)_browser).LoadUrl(url); + _browser.LoadUrl(url); + } + public void Resize(Size size) + { + _browser.Size = size; + _processor.Size = size; } - public void SendMouseClick(int x, int y, int modifiers, MouseButton button, bool mouseUp, int clicks) { var e = new MouseEvent(x, y, (CefEventFlags)modifiers); - ((ChromiumWebBrowser)_browser).GetBrowserHost() + _browser.GetBrowserHost() ?.SendMouseClickEvent(e, (MouseButtonType)button, mouseUp, clicks); } - public void SendMouseMove() + public void SendMouseMove(int x, int y,bool leave=false) { - // _browser.GetBrowserHost() ?.SendMouseMoveEvent(,); + var e = new MouseEvent(x, y, 0); + + _browser.GetBrowserHost()?.SendMouseMoveEvent(e,leave); } public DateTime Ping() @@ -203,7 +217,7 @@ namespace RageCoop.Client.CefHost private MemoryMappedFile _mmf; private SafeMemoryMappedViewHandle _mmfView; public int Id; - public Size Size; + public Size Size { get; private set; } public CefAdapter() { diff --git a/Client/Installer/RageCoop.Client.Installer.csproj b/Client/Installer/RageCoop.Client.Installer.csproj index 96130a2..2cf8ced 100644 --- a/Client/Installer/RageCoop.Client.Installer.csproj +++ b/Client/Installer/RageCoop.Client.Installer.csproj @@ -10,6 +10,13 @@ Debug;Release + + + + + + + @@ -51,10 +58,6 @@ - - - - all diff --git a/Client/Scripts/Properties/AssemblyInfo.cs b/Client/Scripts/Properties/AssemblyInfo.cs index 7caa371..d937da4 100644 --- a/Client/Scripts/Properties/AssemblyInfo.cs +++ b/Client/Scripts/Properties/AssemblyInfo.cs @@ -16,7 +16,7 @@ using System.Resources; // Version informationr( -[assembly: AssemblyVersion("1.5.7.351")] -[assembly: AssemblyFileVersion("1.5.7.351")] +[assembly: AssemblyVersion("1.5.7.356")] +[assembly: AssemblyFileVersion("1.5.7.356")] [assembly: NeutralResourcesLanguageAttribute( "en-US" )] diff --git a/Server/Properties/AssemblyInfo.cs b/Server/Properties/AssemblyInfo.cs index b3afb06..fe3eca2 100644 --- a/Server/Properties/AssemblyInfo.cs +++ b/Server/Properties/AssemblyInfo.cs @@ -15,7 +15,7 @@ using System.Resources; [assembly: AssemblyCulture("")] // Version information -[assembly: AssemblyVersion("1.5.8.32")] -[assembly: AssemblyFileVersion("1.5.8.32")] +[assembly: AssemblyVersion("1.5.8.34")] +[assembly: AssemblyFileVersion("1.5.8.34")] [assembly: NeutralResourcesLanguageAttribute( "en-US" )] diff --git a/Tools/CefTest/CefTest.csproj b/Tools/CefTest/CefTest.csproj index dc5cf11..5d6e305 100644 --- a/Tools/CefTest/CefTest.csproj +++ b/Tools/CefTest/CefTest.csproj @@ -38,13 +38,53 @@ ..\libs\BitmapUtil.dll + + ..\..\packages\PInvoke.Kernel32.0.7.124\lib\net46\PInvoke.Kernel32.dll + + + ..\..\packages\PInvoke.User32.0.7.124\lib\net45\PInvoke.User32.dll + + + ..\..\packages\PInvoke.Windows.Core.0.7.124\lib\net45\PInvoke.Windows.Core.dll + + + ..\..\packages\PInvoke.Windows.ShellScalingApi.0.7.124\lib\net45\PInvoke.Windows.ShellScalingApi.dll + + + ..\..\packages\SharpD2D.0.1.1\lib\netstandard2.0\SharpD2D.dll + + + ..\..\packages\SharpDX.4.2.0\lib\net45\SharpDX.dll + + + ..\..\packages\SharpDX.Direct2D1.4.2.0\lib\net45\SharpDX.Direct2D1.dll + + + ..\..\packages\SharpDX.DXGI.4.2.0\lib\net45\SharpDX.DXGI.dll + + + ..\..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + ..\packages\System.Drawing.Common.4.5.0\lib\net461\System.Drawing.Common.dll + + ..\..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + ..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + @@ -52,8 +92,14 @@ + + ..\..\packages\Validation.2.4.15\lib\net45\Validation.dll + + + Component + diff --git a/Tools/CefTest/D2DWindow.cs b/Tools/CefTest/D2DWindow.cs new file mode 100644 index 0000000..496afcd --- /dev/null +++ b/Tools/CefTest/D2DWindow.cs @@ -0,0 +1,45 @@ +using System; +using SharpD2D.Drawing; +using SharpD2D.Windows; +using System.Windows.Forms; +using SharpDX.Direct2D1; +using Image = SharpD2D.Drawing.Image; + +namespace CefTest +{ + public class D2DMedia:Control + { + private Canvas _canvas; + private Image _img; + public D2DMedia() + { + } + + protected override void OnHandleCreated(EventArgs e) + { + base.OnHandleCreated(e); + Console.WriteLine("Initialize"); + _canvas = new Canvas(Handle); + _canvas.SetupGraphics += _canvas_SetupGraphics; + _canvas.Initialize(); + _canvas.DrawGraphics += _canvas_DrawGraphics; + } + + private void _canvas_DrawGraphics(object sender, DrawGraphicsEventArgs e) + { + e.Graphics.BeginScene(); + e.Graphics.DrawImage(_img,default(PointF)); + e.Graphics.EndScene(); + } + + public void UpdateAndPaint(int width,int height,int pitch,IntPtr scan0,PixelFormat format) + { + _img.Update(width,height,pitch,scan0,format); + _canvas.SafeDraw(); + } + private void _canvas_SetupGraphics(object sender, SetupGraphicsEventArgs e) + { + _img = e.Graphics.CreateImage(); + } + } +} \ No newline at end of file diff --git a/Tools/CefTest/Program.cs b/Tools/CefTest/Program.cs index fa9f3b8..fb414c4 100644 --- a/Tools/CefTest/Program.cs +++ b/Tools/CefTest/Program.cs @@ -1,9 +1,15 @@ -using System.Drawing; +using System; +using System.Drawing; using System.Drawing.Imaging; using System.Security.Permissions; using System.Threading; using System.Windows.Forms; using RageCoop.Client.CefHost; +using SharpDX.DXGI; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; +using AlphaMode = SharpDX.Direct2D1.AlphaMode; +using SharpD2D; +using SharpD2D.Windows; namespace CefTest { @@ -12,36 +18,58 @@ namespace CefTest [SecurityPermission(SecurityAction.Demand)] private static void Main(string[] args) { - CefController.Initialize(); - var thread = new Thread(() => - { - var controller = CefController.Create(0, new Size(800, 600), out var adapter, BufferMode.Dirty); - Application.Run(new Test(adapter, controller)); - }); - thread.SetApartmentState(ApartmentState.STA); - thread.Start(); - var controller2 = CefController.Create(1, new Size(800, 600), out var adapter2, BufferMode.Full); - Application.Run(new Test2(adapter2, controller2)); + WindowHelper.DisableScalingGlobal(); + TimerService.EnableHighPrecisionTimers(); + CefController.Initialize(@"M:\SandBox-Shared\repos\RAGECOOP\RAGECOOP-V\bin\Debug\Client\SubProcess\RageCoop.Client.CefHost.exe"); + CefController.OnCefMessage += s => Console.WriteLine(s); + Test2(); + } + + static void Test1() + { + + var controller2 = CefController.Create(1, new Size(1920, 1080), out var adapter2, BufferMode.Dirty); + Application.Run(new Test(adapter2, controller2)); + } + private static void Test2() + { + var controller = CefController.Create(0, new Size(1920, 1080), out var adapter, BufferMode.Full); + controller.FrameRate = 60; + Application.Run(new Test2(adapter, controller)); } } internal class Test2 : Test { + private D2DMedia _con; public Test2(CefAdapter adapter, CefController controller) : base(adapter, controller) { - Text = "test2: full update"; + Text = "test2: d2d"; + _con = new D2DMedia { Size = Size }; + Controls.Add(_con); + SizeChanged += (s, e) => + { + _con.Size = Size; + }; + _con.KeyDown += CefKeyDown; + _con.MouseDown += (s, e) => MouseKey(e, false); + _con.MouseUp += (s, e) => MouseKey(e, true); + _con.MouseMove += (s, e) => controller?.SendMouseMove(Cursor.Position.X, Cursor.Position.Y - (Height - ClientRectangle.Height)); + } protected override void CefPaint(int bufferSize, Rectangle dirtyRect) { - lock (_adapter) + try { - var size = _adapter.Size; - var draw = new Bitmap(size.Width, size.Height, size.Width * 4, PixelFormat.Format32bppArgb, - _adapter.PtrBuffer); - _graphics.DrawImage(draw, Point.Empty); - draw.Dispose(); + + lock (_adapter) + { + var size = _adapter.Size; + _con.UpdateAndPaint(size.Width, size.Height, size.Width * 4, _adapter.PtrBuffer, new SharpDX.Direct2D1.PixelFormat(Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied)); + } } + catch (Exception ex) { Console.WriteLine(ex); } } } @@ -54,23 +82,24 @@ namespace CefTest public Test(CefAdapter adapter, CefController controller) { Text = "test1: partial update"; - AutoScaleMode = AutoScaleMode.None; - Application.EnableVisualStyles(); Size = adapter.Size; _adapter = adapter; _controller = controller; _adapter.OnPaint += CefPaint; - controller.LoadUrl("https://www.youtube.com/watch?v=w3rQ3328Tok"); - KeyDown += TestForm_KeyDown; - MouseClick += TestForm_MouseClick; + controller.LoadUrl("https://www.youtube.com/watch?v=LXb3EKWsInQ"); + KeyDown += CefKeyDown; + MouseDown += (s, e) => MouseKey(e, false); + MouseUp += (s, e) => MouseKey(e, true); + MouseMove += (s, e) => controller?.SendMouseMove(Cursor.Position.X, Cursor.Position.Y - (Height - ClientRectangle.Height)); BackColor = Color.AliceBlue; _graphics = CreateGraphics(); + AutoScaleMode = AutoScaleMode.None; + SizeChanged += (s, e) => _controller.Resize(ClientRectangle.Size); } - private void TestForm_MouseClick(object sender, MouseEventArgs e) + public void MouseKey(MouseEventArgs e, bool up) { - _controller?.SendMouseClick(e.X, e.Y, 0, GetFrom(e.Button), false, 1); - _controller?.SendMouseClick(e.X, e.Y, 0, GetFrom(e.Button), true, 1); + _controller?.SendMouseClick(e.X, e.Y, 0, GetFrom(e.Button), up, 1); } public static MouseButton GetFrom(MouseButtons b) @@ -85,9 +114,23 @@ namespace CefTest } } - private void TestForm_KeyDown(object sender, KeyEventArgs e) + public void CefKeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.R) _controller.LoadUrl("https://www.youtube.com/watch?v=x53lfkuP044/"); + else if (e.KeyCode == Keys.F11) + { + if (WindowState != FormWindowState.Maximized) + { + FormBorderStyle = FormBorderStyle.None; + WindowState = FormWindowState.Maximized; + } + else + { + FormBorderStyle = FormBorderStyle.Sizable; + WindowState = FormWindowState.Normal; + } + + } } protected virtual void CefPaint(int bufferSize, Rectangle dirtyRect) diff --git a/Tools/CefTest/packages.config b/Tools/CefTest/packages.config index 3f85828..5bb1c82 100644 --- a/Tools/CefTest/packages.config +++ b/Tools/CefTest/packages.config @@ -1,5 +1,18 @@  - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libs/DXHook/DXHook.dll b/libs/DXHook/DXHook.dll index 209763f..67751d2 100644 Binary files a/libs/DXHook/DXHook.dll and b/libs/DXHook/DXHook.dll differ diff --git a/libs/DXHook/DXHook.pdb b/libs/DXHook/DXHook.pdb index 315e54c..9a52190 100644 Binary files a/libs/DXHook/DXHook.pdb and b/libs/DXHook/DXHook.pdb differ